0

我正在尝试在 Microsoft Excel 上运行此宏,但每次我这样做时,我都会得到一个

运行时错误“5”

我究竟做错了什么?这是我第一次做这样的事情。

假设发生的是,每次我运行键盘快捷键时,都假设从区块链网站获取数据。

它本质上只是代码说..

1 美元值这么多 BTC

Sub USD_to_BTC()
'
' USD_to_BTC Macro
' Get the price of 1 btc if purchased by 1 USD
'
' Keyboard Shortcut: Ctrl+Shift+B
'
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;https://blockchain.info/tobtc?currency=USD&value=1", Destination:=Range( _
        "$D$8"))
        .CommandType = 0
        .Name = "tobtc?currency=USD&value=1_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlAllTables
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
4

3 回答 3

-1

尝试使用 XHR 而不是 QueryTable:

Sub USD_to_BTC()

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://blockchain.info/tobtc?currency=USD&value=1", False
        .Send
        Range("D8").Value = .responseText
    End With

End Sub
于 2017-03-31T23:18:42.960 回答
-1

删除(或注释掉).CommandType = 0行。

正如这篇 MSDN 帖子所解释的,

仅当查询表或数据透视表缓存的 QueryType 属性值为 xlOLEDBQuery 时,才能设置 CommandType 属性。

于 2017-03-31T19:38:35.637 回答
-1

这里有两件事:

  1. 您正在添加查询表并设置各种属性。这些属性之一是 CommandType,它是常量类型 XlCmdType。您将该属性设置为 0,这不是有效值。您可以简单地注释掉(或删除)该行代码。这将允许您的代码无错误地运行。然而...

  2. 每次运行此过程时,您都将添加一个新的查询表。我想你想要做的只是刷新数据。将查询表添加到工作表后,您只需运行以下代码即可刷新数据:

    Sub RefreshQueryTable()
    
        ActiveSheet.QueryTables("tobtc?currency=USD&value=1_1").Refresh
    
    End Sub
    

请记住,如果您使用键盘快捷键,用户可能会从工作簿中的任何工作表调用该快捷键,因此如果用户不在包含查询表的工作表上,此代码将失败。您需要确保明确参考相应的工作表:

Sub RefreshQueryTable()
    ThisWorkbook.Sheets("Sheet1").QueryTables("tobtc?currency=USD&value=1_1").Refresh
End Sub
于 2017-03-31T19:39:57.373 回答