Макрос не может сохранить результаты, если он запущен с использованием 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.

Другие вопросы по тегам