我有一个输出特定货币值的SQL查询。我需要将该表提取到我的Excel工作表,然后将货币除以1.在我的情况下,当前只检索第一批货币,然后只是复制与第一种货币相同的值。我应该采用不同的方法吗?
Dim rst As ADODB.Recordset
Set rst = conn.Execute("SELECT [midpoint] " _
& "FROM[FOREX] " _
& "Where currency in ('CAD','AUD','EURO','HKD','JPY','MYR','NZD','SGD','THB') and " _
& "xdate=(select max(xdate) FROM [FOREX] where currency in ('CAD','AUD','EURO','HKD','JPY','MYR','NZD','SGD','THB'))")
If rst.EOF Then
Exit Sub
End If
Dim rstCAD As Double
Sheets("Tables").Range("FX2USD_CAD").Value = 1 / rst(0)
Sheets("Tables").Range("FX2USD_AUD").Value = 1 / rst(1)
Sheets("Tables").Range("FX2USD_EURO").Value = 1 / rst(2)
Sheets("Tables").Range("FX2USD_HKD").Value = 1 / rst(3)
Sheets("Tables").Range("FX2USD_JPY").Value = 1 / rst(4)
Sheets("Tables").Range("FX2USD_MYR").Value = 1 / rst(5)
Sheets("Tables").Range("FX2USD_NZD").Value = 1 / rst(6)
Sheets("Tables").Range("FX2USD_SGD").Value = 1 / rst(7)
Sheets("Tables").Range("FX2USD_THB").Value = 1 / rst(8)
Sheets("Tables").Range("FXLastUpdated").Value = Now
End If
答案 0 :(得分:1)
rst(1)
尝试阅读第一行的 2nd 列,但您只有一列。
你需要调用.movenext
移动到下一行,你可以循环,但你有一个预定义的值顺序,所以你可以:
dim sht as worksheet: set sht = Sheets("Tables")
with sht
.Range("FX2USD_CAD").Value = 1 / rst(0)
rst.movenext
.Range("FX2USD_AUD").Value = 1 / rst(0)
rst.movenext
... and so on
end with
您需要修改SQL&添加ORDER BY
子句以确保查询结果中的行顺序与代码中FX2USD_CAD_*
的顺序一致。
答案 1 :(得分:0)
您必须将代码包装到while-loop
:
i = 0
While Not rs.EOF ' keep cycling untill all rows have been retrived
' write the value of the i-th cell
Sheets("Tables").offset(index).Range("FX2USD_CAD").Value = 1 / rst(0)
' one line per column (FX2USD_AUD, FX2USD_EURO, ...)
rst.MoveNext ' retrive the next row
i = i + 1 ' mode the index by one
Wend
当然,当你完成时关闭你的陈述:rst.Close