2011-12-22 47 views
0

嗨,大家好我試圖取數據的值(0) 並將其放入變量InvoiceNumber中。我試圖把我的手錶屏幕的圖像,但我最終沒有被允許。但這裏是我的手錶屏幕的樣子。 數據
數據(0)
數據(0,1)1個
數據(0,2)2個
數據(0,3)3
如何在vba中引用數組變量訪問另一個變量

我試圖

dim InvoiceNumber as variant <br/> 
invoiceNumber = data(0) 

但我不斷收到錯誤。我不知道如何引用該數組的一部分。任何幫助將不勝感激。

這裏是任何想看到更多的人的完整代碼。

Dim db As Database 
Dim rs As Recordset 
Dim data As Variant 
Dim colummn1 As Variant 

Dim obj As Object 


Set db = CurrentDb 
Set rs = db.OpenRecordset("select * from Table1") 
'set obj = new object 
While Not rs.EOF 
'MsgBox (rs.RecordCount) 
'MsgBox (rs.Fields.Count) 

data = rs.GetRows(rs.Fields.Count) 


Column1 = data.data(0) 

Wend 
rs.Close 
db.Close 

End Sub 
+0

你得到哪個錯誤? – 2011-12-22 19:45:23

+0

下標超出範圍。 – user677275 2011-12-22 19:46:11

+0

您確定只需要與Table1中的列相同數量的記錄?這就是你用'data = rs.GetRows(rs.Fields.Count)'所做的事情''另外,你的變量名'colummn1'與'Column1'有拼寫錯誤。 – 2011-12-22 20:09:21

回答

1

嘗試代替

Column1 = data(0,0) 

Column1 = data.data(0) 

data包含一個二維陣列。第一個索引是字段號,第二個索引是行號。兩者都從零開始。所以data(0,0)是第一行的第一個字段。 data(1,0)是第一行的第二個字段。

我會嘗試通過使用用戶定義的類型

Public Type Invoice 
    Nr As Variant 
    IssueDate As Variant 
    Total As Variant 
    'Or whatever your invoice contains 
End Type 

Public Sub TestGetRecords() 
    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim data As Variant 
    Dim numRecords As Long, i As Long 
    Dim Invoices() As Invoice 

    Set db = CurrentDb 
    Set rs = db.OpenRecordset("select * from Table1") 
    data = rs.GetRows() 
    rs.Close 
    db.Close 

    numRecords = UBound(data, 2) + 1 
    ReDim Invoices(0 To numRecords - 1) As Invoice 
    For i = 0 To numRecords - 1 
     Invoices(i).Nr = data(0, i) 
     Invoices(i).IssueDate = data(1, i) 
     Invoices(i).Total = data(2, i) 
    Next i 

    Debug.Print Invoices(0).Total 
End Sub 

錯誤在你的解決方案是,你在一個循環中放置GetRows使發票的陣列。但是,GetRows一次返回所有行!

+0

我已經嘗試過,但即時通訊試圖讓位置0的整個數組進入發票號碼。因此,例如,我將結束與
invoiceNumber invoiceNumber(0) invoiceNumber(0,1)1 invoiceNumber(0,2)2 invoiceNumber(0,3)3 – user677275 2011-12-22 19:50:04

+0

所以,我會通過所有的resulsed必須循環得到所有的0?如數據(0,0),數據(0,1),數據(0,3)?我想我有點被寵壞,因爲這個數據= rs.GetRows(rs.Fields.Count)獲取整個表到一個數組,但現在我試圖將每列分離成單個數組。有任何想法嗎? – user677275 2011-12-22 19:58:23

+0

謝謝你,這是天才! – user677275 2011-12-24 00:14:56

0

我發現它有點難以理解你想要達到的目標。

您正在將整個數據表讀入記錄集對象,將記錄集對象的字段加載到二維數組中,然後嘗試遍歷數組以將結果輸出到單個變量(或總和數組值)。

爲什麼不直接使用SQL表達式從表中提取數據?

如果我們可以假設你有發票的表(說...「myInvoiceTable」)至少有以下字段...

invoiceID invoiceValue (也可能是其他許多人,如:invoiceDate, clientID的,等等)

你可以寫一個表達式像這樣

「SELECT SUM(invoiceValue)AS MyTotal FROM myInvoiceTable WHERE invoiceID> XXXX」

釷可能會像這樣進入你的VBA代碼。

Dim rst as Recordset 
Dim strSQL as string 

strSQL = "SELECT SUM(invoiceValue) AS MyTotal FROM myInvoiceTable WHERE invoiceID > 400" '-- use an appropriate WHERE clause if needed 

Set rst = CurrentDb.Openrecordset(strSQL) '-- the rst object should contain a single value "MyTotal" which is the sum of the fields you are trying to access 

MsgBox rst!MyTotal '-- use this value wherever you need to use it 
+0

我基本上是試圖讓我的表中的每個列到一個數組,但我是新的訪問vba。上面的解決方案讓我感謝回覆。 – user677275 2011-12-24 00:17:25

+0

很好,你有一個滿足你的需求的答案。 VBA提供了一些數據對象供您使用,包括數組,集合和記錄集,您可能需要花些時間閱讀手冊以更好地理解它們。對SQL的理解也很有幫助,但在MS Access中並不總是必需的。 – Eric 2011-12-27 00:13:02

相關問題