Excel VBA-比特币

Excel VBA-比特币,excel,bitcoin,currency-exchange-rates,vba,Excel,Bitcoin,Currency Exchange Rates,Vba,我试图在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 ' Wi

我试图在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
删除(或注释掉)
.CommandType=0

解释说

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

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

解释说

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


这里有两件事:

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

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

    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
    

    这里有两件事:

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

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

    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
    

    尝试使用XHR而不是QueryTable:

    Sub USD_to_BTC()
    使用CreateObject(“MSXML2.XMLHTTP”)
    .打开“获取”https://blockchain.info/tobtc?currency=USD&value=1”“错
    .发送
    范围(“D8”)。值=.responseText
    以
    端接头
    
    尝试使用XHR而不是QueryTable:

    Sub USD_to_BTC()
    使用CreateObject(“MSXML2.XMLHTTP”)
    .打开“获取”https://blockchain.info/tobtc?currency=USD&value=1”“错
    .发送
    范围(“D8”)。值=.responseText
    以
    端接头
    
    我是否要在我的整个代码下面加上你刚才提到的那三行代码?对不起,我是VBA新手。试图找出在我的代码中添加的位置,这样就不会出现错误9问题。你应该首先应用BruceWayne的解决方案来修复你的错误(我在上文第1点中已经提到。但是,如果工作表中已经存在您的查询表,您可以将我的3行代码添加到整个代码下面。并且确保更新您的键盘快捷键以调用RefreshQueryTable而不是方法。我是否将您刚才提到的3行代码添加到我的整个代码下面?对不起,我是VBA新手。试图找出在我的代码中添加的位置,这样就不会出现错误9问题。你应该首先应用BruceWayne的解决方案来修复你的错误(正如我在第1点中提到的。但是,如果工作表中已经存在查询表,则可以在整个代码下面添加我的3行代码。并确保更新键盘快捷键以调用RefreshQueryTable而不是方法。