2011-12-22 16 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

どのエラーが表示されますか? –

+0

添字が範囲外です。 – user677275

+0

Table1の列と同じ数のレコードだけが必要ですか?これは 'data = rs.GetRows(rs.Fields.Count)'でやっていることです。また、変数名 'colummn1'と' Column1'にタイプミスがあります。 –

答えて

1

Column1 = data(0,0) 

代わりに

Column1 = data.data(0) 
data

2次元配列を含有してみてください。第1のインデックスはフィールド番号であり、第2のインデックスは行番号である。どちらもゼロから始まります。したがって、data(0,0)は最初の行の最初のフィールドです。 data(1,0)は、最初の行の2番目のフィールドです。私はあなたのソリューションでユーザー定義型

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で配列全体をインボイス番号に変換しようとしました。したがって、例えば、私は私はすべてのresulsedをループしなければならない
invoiceNumber invoiceNumber(0) invoiceNumber(0,1)1 invoiceNumber(0,2)2 invoiceNumber(0,3)3 – user677275

+0

で終わるであろうすべての0を取得するには?データ(0,0)、データ(0,1)、データ(0,3)?私はこのデータ= rs.GetRows(rs.Fields.Count)は配列全体にテーブルを取得するが、今は各列を単一の配列に分割しようとしているので、私は少しバカになると思います。何か案は? – user677275

+0

天才です! – user677275

0

達成しようとしていることを理解するのが少し難しいと感じています。

データセット全体をレコードセットオブジェクトに読み込み、レコードセットオブジェクトのフィールドを2次元配列にロードしてから、配列を繰り返し処理して結果を単一の変数に出力しようとしています配列値)。

テーブルから直接データを抽出するのに、SQL式を使用しないのはなぜですか?

私たちは、あなたが、少なくとも以下のフィールドを持つ請求書(と言う...「myInvoiceTable」)のテーブルを持っていると仮定することができたら...

invoiceID invoiceValue (そしておそらく他の多く、例えば。invoiceDate、クライアントIDなど)

あなたはこの

のTh "invoiceID> XXXX myInvoiceTable FROM MyTotal AS SUM(invoiceValue)を選択する" のような表現の何かを書くことができますこのようなあなたの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

+0

あなたのニーズに合った答えが得られました。 VBAには、配列、コレクション、レコードセットなどの数多くのデータオブジェクトが用意されています。マニュアルをよく読んで理解する価値があります。 SQLの理解も役立ちますが、MS Accessでは必ずしも必要ではありません。 – Eric

関連する問題