Спасибо, что нашли время, чтобы прочитать, очень легкие навыки программирования здесь. У меня есть сценарий VBS, который открывает модель excel, которая затем вызывает макрос, чтобы извлекать данные из TXT-файла. Макрос в excel работает отлично вручную, но при использовании скрипта он пытается выбрать все файлы в окне проводника Windows. Я считаю, что проблема связана с открытием .txt-файла, так как мои два других скрипта vbs и excel работают нормально, когда вы извлекаете данные из файлов .xls.VBS-скрипт для открытия excel для вызова макроса с ошибкой
Мой VBS скрипт:
Option Explicit
Dim xlApp, xlBook
Set xlApp = CreateObject("Excel.Application")
'xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Open("\\xyzpath\model name.xlsm")
xlApp.Application.Wait(Now + TimeValue("0:00:5"))
xlApp.Application.Run "macroName"
xlBook.Close True
xlApp.Quit
Set xlBook = Nothing
Set xlApp = Nothing
WScript.Quit
My Excel макрос:
Sub updateData()
'Application.ScreenUpdating = False
reloop:
Dim ldate As Date
Dim home, myPath, ldatefile, txtfile As String
Dim ldata As Integer
Dim lrow As Integer
Dim lcol As Integer
Dim s As Variant
ActiveWorkbook.Worksheets("Data").Activate
'Determine end of data set
ldata = Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
'Determine date of last data set
ldate = Cells(2, ldata - 14).Value
home = ActiveWorkbook.Name
'Check if up to date, if yes then exit, if no then continue
If ldate >= (Date - 1) Then
Workbooks(home).Worksheets("Dashboard").Activate
Application.ScreenUpdating = True
'MsgBox "Up to date."
Exit Sub
End If
'Specify the path to the folder and open data file
myPath = "\\xyzpath\" & Year(ldate) & "\" & Year(ldate) & " " & Format(ldate + 1, "MM") & "\" & "data" & "\" & "Standard" & "\"
txtfile = "data" & Format(ldate + 1, "YYYYMMDD") & ".txt"
ldatefile = myPath & txtfile
s = Shell("C:\Windows\System32\notepad.exe " & ldatefile, vbNormalFocus)
AppActivate s
'Send keys of actions to Notepad
SendKeys "^a"
SendKeys "^h"
SendKeys " "
SendKeys "{Tab 5}"
SendKeys "~"
SendKeys "{Tab}"
SendKeys "~"
SendKeys "^a", True
SendKeys "^c", True
SendKeys "%{f4}", True
SendKeys "{Tab}", True
SendKeys "~", True
'Copy and paste required data
Application.Wait DateAdd("s", 3, Now())
Workbooks(home).Worksheets("Data").Activate
ActiveSheet.Range(Cells(1, ldata + 1), Cells(50, ldata + 16)).Activate
Application.DisplayAlerts = False
ActiveSheet.Paste
Application.SendKeys "{Enter}", True
Application.DisplayAlerts = True
GoTo reloop
End Sub
Так как я уже говорил, я считаю, что ошибка заключается при использовании командной консоли, чтобы открыть текстовый файл, а когда я бегу сценарий как видимый, я вижу, что он пытается захватить все в окне проводника Windows. Я попытался по-разному активировать окно .txt после его открытия, но не удачи на основе поиска Google. Как я могу изменить макрос VBScript или excel для правильной отправки ключей в приложение .txt, а не в Windows Explorer? Любая помощь или ввод приветствуются, и спасибо всем за то, что вы делаете, у меня было много возможностей для использования этих форумов.
Fantastic! Это решило мою проблему отлично. Спасибо, что собрали это вместе, теперь я могу вызвать сценарий из планировщика заданий, запустить макрос по назначению и быстрее (и меньше подвержен ошибкам), чем мой первоначальный процесс. Я знал, что SendKeys был плохой подход, но не знал о FileSystemObject. Еще раз спасибо. – ohearty