2014-11-14 4 views
0

Спасибо, что нашли время, чтобы прочитать, очень легкие навыки программирования здесь. У меня есть сценарий 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? Любая помощь или ввод приветствуются, и спасибо всем за то, что вы делаете, у меня было много возможностей для использования этих форумов.

ответ

0

Прежде всего: Do NOTSendKeys.
Second: Do NOTSendKeys.

FileSystemObject Используйте для чтения текста из файлов:

... 
Set fso = CreateObject("Scripting.FileSystemObject") 

ldatefile = fso.BuildPath(myPath, txtfile) 
Set f = fso.OpenTextFile(ldatefile) 
Do Until f.AtEndOfStream 
    l = f.Line 
    v = Split(Replace(f.ReadLine, " ", ""), vbTab) 
    For i = 0 To UBound(v) 
    Workbooks(home).Worksheets("Data").Cells(l, ldata+i+1).Value = v(i) 
    Next 
Loop 
f.Close 
... 
+0

Fantastic! Это решило мою проблему отлично. Спасибо, что собрали это вместе, теперь я могу вызвать сценарий из планировщика заданий, запустить макрос по назначению и быстрее (и меньше подвержен ошибкам), чем мой первоначальный процесс. Я знал, что SendKeys был плохой подход, но не знал о FileSystemObject. Еще раз спасибо. – ohearty

Смежные вопросы