我一直试图创建一个表,该表自动提供用户指定的给定期间的汇率范围。我偶然发现了这篇文章,我发现它非常有用,我一直试图扩展VBA代码,以包括多个货币转换。但是,我还没有弄清楚如何做到这一点,因此我被以下错误困住了:
错误1004:一次只能转换一个列。范围可以是许多行高,但不超过一列宽。只在一列中选择单元格,再试一次。
请您看一看下面的代码,并帮助我解决错误,以便我可以获得多个货币转换?在此之前,非常感谢您。
Sub GetData()
Dim DataSheet As Worksheet
Dim endDate As String
Dim startDate As String
Dim str As String
Dim LastRow As Integer
Sheets("GBP").Cells.Clear
Set DataSheet = ActiveSheet
startDate = DataSheet.Range("startDate").Value
endDate = DataSheet.Range("endDate").Value
' GBP/EUR
str = "http://www.oanda.com/currency/historical-rates/download?quote_currency=" _
& "GBP" _
& "&end_date=" _
& Year(endDate) & "-" & Month(endDate) & "-" & Day(endDate) _
& "&start_date=" _
& Year(startDate) & "-" & Month(startDate) & "-" & Day(startDate) _
& "&period=daily&display=absolute&rate=0&data_range=c&price=bid&view=table&base_currency_0=" _
& "EUR" _
& "&base_currency_1=&base_currency_2=&base_currency_3=&base_currency_4=&download=csv"
With Sheets("GBP").QueryTables.Add(Connection:="URL;" & str, Destination:=Sheets("GBP").Range("A1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Sheets("GBP").Range("A5").CurrentRegion.TextToColumns Destination:=Sheets("GBP").Range("A5"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, other:=True, OtherChar:=",", FieldInfo:=Array(1, 2)
Sheets("GBP").Columns("A:B").ColumnWidth = 12
Sheets("GBP").Range("A1:B2").Clear
LastRow = Sheets("GBP").UsedRange.Row - 6 + Sheets("GBP").UsedRange.Rows.Count
Sheets("GBP").Range("A" & LastRow + 2 & ":B" & LastRow + 5).Clear
' GBP/USD
str = "http://www.oanda.com/currency/historical-rates/download?quote_currency=" _
& "GBP" _
& "&end_date=" _
& Year(endDate) & "-" & Month(endDate) & "-" & Day(endDate) _
& "&start_date=" _
& Year(startDate) & "-" & Month(startDate) & "-" & Day(startDate) _
& "&period=daily&display=absolute&rate=0&data_range=c&price=bid&view=table&base_currency_0=" _
& "USD" _
& "&base_currency_1=&base_currency_2=&base_currency_3=&base_currency_4=&download=csv"
With Sheets("GBP").QueryTables.Add(Connection:="URL;" & str, Destination:=Sheets("GBP").Range("C1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Sheets("GBP").Range("C5").CurrentRegion.TextToColumns Destination:=Sheets("GBP").Range("C5"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, other:=True, OtherChar:=",", FieldInfo:=Array(1, 2)
Sheets("GBP").Columns("C:D").ColumnWidth = 12
Sheets("GBP").Range("C1:D2").Clear
LastRow = Sheets("GBP").UsedRange.Row - 6 + Sheets("GBP").UsedRange.Rows.Count
Sheets("GBP").Range("C" & LastRow + 2 & ":D" & LastRow + 5).Clear
End Sub
此错误发生在以下行:
Sheets("GBP").Range("C5").CurrentRegion.TextToColumns Destination:=Sheets("GBP").Range("C5"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, other:=True, OtherChar:=",", FieldInfo:=Array(1, 2)
发布于 2013-07-25 16:34:51
您有C& D栏中的原始数据吗?如果是这样,您可能需要以不同的方式组织它们,要么用逗号将两者连接到c中以分隔它们(因为这是这里使用的分隔符),要么将数据放在列c中的另一行中。
.CurrentRegion
之后
Sheets("GBP").Range("C5")
发布于 2013-07-25 17:14:54
根据Microsoft开发人员网络中的文档;
当前区域是以空白行和空白列的任意组合为界的区域。
考虑到你的代码Sheets("GBP").Range("C5").CurrentRegion
..。
这意味着查找Sheets("GBP").Range("C5")
上方和下面的第一个空白行。然后在Sheets("GBP").Range("C5")
的左边和右边找到第一个空白列。这些空白行和列中的所有内容都成为您的CurrentRegion
。如果这是一个以上的列,您将得到您正在得到的错误。
要解决这个问题,您需要确保空白行和列中的单元格区域仅为一列。
https://stackoverflow.com/questions/17861766
复制相似问题