2011-06-29 7 views
0

私はこのコードを苦労して作成しましたが、それは動作しますが、数百回の繰り返しを経て遅くクラッシュします。私はデータベース検索の結果を示すマルチcoloumnリストボックスを持っています。私はそれらの結果を取って、コマンドボタンのクリックで "MailingListTemp"と呼ばれる一時テーブルに入れたいと思う。これを早くしてクラッシュや代替の方法にしない方法がありますか?最終的な結果は、リストをExcelにエクスポートすることです。リストボックスの検索結果をテーブルに送信

ありがとうございました。ここに私のコードです:

Private Sub AllToMailingListCommand_Click() 
     Dim i As Variant 
     Dim Item As Variant 
     Dim var0Search As Variant 
     Dim var1Search As Variant 
     Dim var2Search As Variant 
     Dim var3Search As Variant 
     Dim var4Search As Variant 
     Dim var5Search As Variant 
     Dim var6Search As Variant 
     Dim var7Search As Variant 
     Dim var8Search As Variant 
     Dim var9Search As Variant 
     Dim var10Search As Variant 
     Dim var11Search As Variant 
     Dim var12Search As Variant 
     Dim strX As String 
     Dim DValue As String 
     DValue = " " 
     DValue = Format(date, "mm/dd/yyyy") 

     Dim dbThisDatabase As DAO.Database 
     Dim rstMailingListTemp As DAO.Recordset 

     Set dbThisDatabase = CurrentDb 
     Set rstMailingListTemp = dbThisDatabase.OpenRecordset("MailingListTemp") 


     For i = 0 To Me.List0.ListCount 

     Me.List0.Selected(i) = True 
     For Each Item In List0.ItemsSelected 

     var0Search = List0.Column(0, Item) 
     var1Search = List0.Column(1, Item) 
     var2Search = List0.Column(4, Item) 
     var3Search = List0.Column(5, Item) 
     Next 

     var4Search = DLookup("[FirstName]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var5Search = DLookup("[LastName]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var6Search = DLookup("[Zip]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var7Search = DLookup("[Address1]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var8Search = DLookup("[Address2]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var9Search = DLookup("[Address3]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var10Search = DLookup("[Prefix]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var11Search = DLookup("[Suffix]", "[Master Marketing List]", "[MMLID] = " & var0Search) 
     var12Search = DLookup("[Title]", "[Master Marketing List]", "[MMLID] = " & var0Search) 

     rstMailingListTemp.AddNew 
     rstMailingListTemp("ID").value = var0Search 
     rstMailingListTemp("CompanyName").value = var1Search 
     rstMailingListTemp("City").value = var2Search 
     rstMailingListTemp("State").value = var3Search 
     rstMailingListTemp("FirstName").value = var4Search 
     rstMailingListTemp("LastName").value = var5Search 
     rstMailingListTemp("Zip").value = var6Search 
     rstMailingListTemp("Address1").value = var7Search 
     rstMailingListTemp("Address2").value = var8Search 
     rstMailingListTemp("Address3").value = var9Search 
     rstMailingListTemp("Prefix").value = var10Search 
     rstMailingListTemp("Suffix").value = var11Search 
     rstMailingListTemp("Title").value = var12Search 

     rstMailingListTemp.Update 

     Next i 

    End Sub 
+0

なぜサブフォームとしてリストボックスを使用していますか? –

答えて

1

"マルチcoloumnリストボックスは、データベース検索の結果を示しています。その検索はどのようにリストボックスにフィルタリングされますか?さまざまな検索基準を使用してオンザフライでSQL Where句を作成していますか?もしそうなら、rstMailingListTempテーブルと実際にこのサブルーチンのすべてのコードを無視してください。

代わりに、オートメーションとCopyFromRecordset関数を使用して、クエリに添付されたそのWhere句の結果をメーリングリストテーブルに直接Excelに送信します。

Modules: Transferring Records to Excel with Automation

を追加しました: &(ここではあなたのWhere句を挿入)

が続いて転送レコードにあることを置く "MailingListTable SELECT * FROM"

のように見える文字列変数を作成します。 Excelコードに変換します。

また、これを行うにはdocmd.TransferSpreadsheet関数を使用してください。そして、これはあなたの要求に十分なかもしれません。 tablenameパラメータには、SELECTクエリを含む文字列式を指定できます。

+0

"さまざまな検索基準を使用してオンザフライでSQL Where句を作成していますか?" - はい – Tom

+0

"代わりに、オートメーションとCopyFromRecordset関数を使用して、クエリーに添付されたWhere句の結果をメーリングリストテーブルに直接Excelに送信してください。第一に、Where句の結果をクエリにどのように送信すればよいですか?残りの部分はどういう意味ですか? -thanks – Tom

+0

私はDlookupを取り除くだけで、より速くする方法を見つけました。私は代わりにリストボックスに必要なすべてのデータがあることを確認したので、colounmによってcoloumnを引き出し、別のテーブルにrefferingすることについて心配する必要はありません。そのはるかに速い。 10〜20,000件のエントリを実行するのに数秒かかりますが、クラッシュしませんでした – Tom

関連する問題