簡體   English   中英

使用vbscript進行運行時,宏無法保存結果

[英]Macro unable to save results when it is made to run using 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://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

@ robots.txt您要使用Windows Task Scheduler,創建一個調用.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

如果我正確理解了您的代碼,則嘗試將每個鏈接的內部文本插入到某些單元格中:嘗試指定要確切放置的位置(例如,工作表“(Book 1”)。Cells(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到n行中找到結果。

找出解決方案!!!

.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應該保持basicScraper.xlsm 而已。

現在,將.bat文件位置的完整地址放入“ Action選項卡中的調度program/script框即可。

發布腳本:執行之前,我將所有三個文件.bat.vbs.xlsm在一個文件夾中,並得到了預期的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM