2017-03-31 78 views
0

我想上运行的Microsoft Excel这个宏,但每次我这样做的时候,我得到一个Excel的VBA - 比特币

运行时错误“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 

回答

0

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

As this MSDN Post解释,

您可以设置CommandType属性只有在查询类型属性的查询表或数据透视表高速缓存的值是xlOLEDBQuery。

0

有两件事情怎么回事:

  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 
+0

难道我补充一点,整个3号线你刚才提到我的整个代码下方?对不起,我是VBA新手。试图找出在我的代码中添加的地方,所以它不会给我一个错误9问题。 – user6260366

+0

你应该首先应用BruceWayne的解决方案来解决你的错误(我在上面提到的第一点,但是如果你的查询表已经存在于工作表中,那么你可以在你的整个代码下面添加我的3行代码。更新您的键盘快捷键以调用RefreshQueryTable而不是您的方法。 –

0

尝试使用替代的QueryTable XHR:

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