Макрос не может сохранить результаты, если он запущен с использованием vbscript - PullRequest
0 голосов
/ 03 декабря 2018

Я создал макрос для очистки заголовков постов с веб-страницы.Макрос работает нормально, когда я пробую его вручную.

Однако я намерен запустить и сохранить результат, используя файл .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://stackoverflow.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 ]

0 голосов
/ 03 декабря 2018

Обнаружено решение !!!

Файл .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 в одной папке перед выполнением и получил ожидаемый результат.

0 голосов
/ 03 декабря 2018

@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://stackoverflow.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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...