Макрос не может сохранить результаты, если он запущен с использованием vbscript
Я создал макрос для очистки заголовков постов с веб-страницы. Макрос работает нормально, когда я пробую его вручную.
Тем не менее, я намерен запустить и сохранить результат, используя .vbs
файл, который будет выполнен через .bat
файл, чтобы я мог в конечном итоге использовать его через windows task scheduler
,
Когда я нажимаю на это .bat
файл, чтобы проверить, будет ли он работать вообще, он открывает этот макрос с помощью .vbs
и очистить содержимое, как это должно быть.
Единственная проблема, с которой я сталкиваюсь, заключается в том, что я не могу .vbs
файл сохранить результат в этой книге. Как я могу сохранить результат?*
.vbs
содержит:
RunMacro
Sub RunMacro()
Dim xl, path, xlBook
path = CreateObject("Scripting.FileSystemObject").GetAbsolutePathName(".")
Set xl = CreateObject("Excel.application")
Set xlBook = xl.Workbooks.Open(path & "\basicScraper.xlsm", 0, True)
xl.Application.Visible = False
xl.DisplayAlerts = False
xl.Application.Run "basicScraper.xlsm!MyMacro.GetPosts"
xl.ActiveWorkbook.Save
xl.ActiveWindow.Close
End Sub
.bat
содержит:
cscript macro.vbs "C:\Users\WCS\Desktop\vba scheduler\macro.vbs"
Это макрос, с которым я работаю (имя модуля: MyMacro
):
Sub GetPosts()
Dim S$, r&, post As Object
With New XMLHTTP
.Open "GET", "https://stackru.com/questions", False
.send
S = .responseText
End With
With New HTMLDocument
.body.innerHTML = S
For Each post In .getElementsByClassName("question-hyperlink")
r = r + 1: Cells(r, 1) = post.innerText
Next post
End With
End Sub
2 ответа
Обнаружил решение!!!
.bat
файл должен содержать:
@echo off
echo %~dp0
cd /d %~dp0
"C:\Users\WCS\Desktop\New folder\macro.vbs" "C:\Users\WCS\Desktop\New folder\basicScraper.xlsm"
И
.vbs
файл должен содержать:
Dim xl, args
Set args = Wscript.Arguments
Set xl = CreateObject("Excel.application")
xl.Workbooks.Open args(0)
xl.Application.Visible = False
xl.Application.Run "GetPosts"
xl.ActiveWorkbook.Save
xl.ActiveWorkbook.Close
xl.Quit
basicScraper.xlsm
должно быть как есть. Вот и все.
Теперь, поместив полный адрес .bat
расположение файла в планировщиках program/script
поле ввода в Action
вкладка сделает свое дело.
Почтовый скрипт: я сохранил все три файла .bat
, .vbs
а также .xlsm
в одной папке перед выполнением и получил результат, как и ожидалось.
@robots.txt Вы хотите использовать планировщик задач Windows, создайте задачу с именем.vbs
.Vbs должен выглядеть
Set XLObj = CreateObject("Excel.Application")
XLObj.visible = true
XLObj.Workbooks.Open "T:\he\path\to\basicScraper.xlsm"
XLObj.Run "'T:\he\path\to\basicScraper.xlsm'!MyMacro.GetPosts"
XLObj.quit
set XLObj = nothing
Если я правильно понимаю ваш код, вы пытаетесь вставить внутренний текст каждой ссылки в некоторые ячейки: попробуйте указать, где именно вы хотите поместить его (например, "Рабочие листы"(Книга 1"). Ячейки (r, 1)).
Dim xHttp As MSXML2.XMLHTTP
Dim hDoc As MSHTML.HTMLDocument
Dim objCollection As Object
Dim objElement As Object
Dim strLink As String
Set xHttp = New MSXML2.XMLHTTP
xHttp.Open "GET", "https://stackru.com/questions", False
xHttp.send
Do Until xHttp.READYSTATE = 4
DoEvents
Loop
If xHttp.Status = 200 Then
Set hDoc = New MSHTML.HTMLDocument
hDoc.body.innerHTML = xHttp.responseText
Set objCollection = hDoc.getElementsByClassName("question-hyperlink")
For Each objElement In objCollection
strLink = objElement.InnerText
Worksheets("Book 1").Cells(r, 1) = strLink
r = r + 1
Next
End If
ActiveWorkbook.Save
Вы должны найти свои результаты в Книге 1, строки с 1 по n.