Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : その他)
ACCESSのテーブルデータ(3行2列)をエクセルのメッセージボックスに表示したい。
投稿日時: 22/09/15 15:15:11
投稿者: ラブ

お世話になっております。
オフィスのバージョン2010を利用しています。
 
今、アクセスのテーブルで作成した3行2列のデータをエクセルのメッセージボックスで
表示したいと考えています。
 
具体的には、T_XXX集計(3行2列)のテーブルデータをエクセルのメッセージボックスに表示したいです。
1行ずつ表示(メッセージボックスを3回表示)ではなく、1回のメッセージボックスのメッセージに
アクセスのテーブルの内容をボンと1回で表示させたいです。
 
 
Sub 〇〇〇〇()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
  ・・・
 
  dbs.Execute ("exec Q_XXX集計_削除")
    dbs.Execute ("exec Q_XXX集計_作成")
     
    Set dbs = New ADODB.Connection
    dbs.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data SOURCE=C:\Temp\XXX\△△.mdb"
 
    Dim A As Variant
   
    Set Rec = New ADODB.Recordset
    With Rec
         .LockType = adLockPessimistic
         .Source = "T_XXX集計"
         .ActiveConnection = dbs
         .Open
    End With
 
  → T_XXX集計をレコードセットに格納はできた!
     
    'Sheets("データ数").Select
    'GYO = 1
    'Do While Rec.EOF = False
    ' Cells(GYO, 1) = Rec![物件親]
    ' Cells(GYO, 2) = Rec![件数]
    'Rec.MoveNext
    'GYO = GYO + 1
    'Loop
    'Rec.Close
    'Set res = Nothing
 
  → T_XXX集計のテーブルの内容をエクセルのセルには吐きだす事もできた!
    ※上の ' を外して実行すれば、セルには書き込める。
     
    'A = ActiveSheet.ListObjects("データ数").DataBodyRange
    If MsgBox(A, "取り込んだデータ件数は間違えないですか?", vbYesNo) = vbNo Then
        ThisWorkbook.Close
    End If
     
  → T_XXX集計のデータを変数?・配列?に格納して、それをメッセージボックスで表示させたい!
    ※これができない!!!。
 
    Set dbs = Nothing
End Sub
 
どの様に書いたら、良いでしょうか?
 ※アクセスのT_XXX集計データをエクセルに1度吐き出して、それを変数に取り込む?のは
  あまり意味がない(無駄)の様な気がしますが、どうやって書けば良いかわからないです。
 
  ※1番効率的な書き方を、勉強もかねて学びたいです。
  ※私の力では、エクセルに吐き出したテーブルの内容を配列にして?メッセージボックスに表示?
   としか、思いつかないですが。。。
 
大変恐縮ですが、何卒宜しくお願い致します。
 
 
 

回答
投稿日時: 22/09/15 15:35:06
投稿者: WinArrow
投稿者のウェブサイトに移動

質問
 
3件x2項目を
1回のMsgboxで表示させたいのですか?
1件毎にMsgboxで表示させたいのですか?
どちらなんでしょうか、
具体例で説明して貰えますか?

投稿日時: 22/09/15 15:42:22
投稿者: ラブ

お世話になっております。
 
ご連絡ありがとうございます。
 
3件×2項(3行2列)を1回のメッセージボックスで表示させたいです。
 
3回に分けて、表示するのは、この様に書けば良い!とはわかります。
 
If MsgBox(Rec![物件親] & "は" & Rec![件数] & "件です", "取り込んだデータ件数は間違えないですか?", vbYesNo) = vbNo Then
        ThisWorkbook.Close
End If
 
↑ この様に書くと、3回メッセージボックスが表示されると思いますが、
 
メッセージボックスは1回だけ表示させて、
その中身が3行2列のアクセスのテーブル(T_XXX集計)を表示させたいです。
 
具体的に、メッセージボックスには
 
タイトル 件数は間違えないですか?
 
 Aは10件です。
 Bは35件です。
 Cは3000件です。
 
はい いいえ
 
の様に1回のメッセージボックスで表示させたいです。
 
大変申し訳ございません。

回答
投稿日時: 22/09/15 15:48:57
投稿者: WinArrow
投稿者のウェブサイトに移動

掲示板にコードを入力する際、
コードを手入力していませんか?
 
一部、コードが間違っていますよ。
 
間違っている個所
> 'Set res = Nothing
※このコードは間違っていても動かいことはないが、
モジュールの先頭に
Option Explicit
を記述すると、間違いをチェックしてくれます。
 
なお、「ツール」ー「オプション」「全般」タブの
「変数の宣言を強制する」にチェックを入れておくと
Option Explicit
が自動で挿入されます。
 
 
 
 
コードペインから、コピペしてください。
 

投稿日時: 22/09/15 15:58:51
投稿者: ラブ

お世話になっております。
 
ありがとうございます。
 
コードペインの内容を貼り付けしているのですが、とても長いコードの1部を修正して貼り付けております。
 
また、自分でソースを書込み(追記)しながら、手探りで実現させて、書いています。
 
その為、1部内容に相違があるかもしれないです。
 
 
大変申し訳ございません。
 
 
 

回答
投稿日時: 22/09/15 16:04:05
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

 Aは10件です。
 Bは35件です。
 Cは3000件です。

 
この説明の「A」「B」「C」について
「A」は、1件目の「Rec![物件親]」と解釈するのでしょうか?
「B」「C」は「A」の準ずる・・
 

投稿日時: 22/09/15 16:10:35
投稿者: ラブ

お世話になっております。
 
ありがとうございます。
 
 テーブル名 T_XXX集計 
 
 項目と内容は
 
    Rec![物件親] Rec![件数]
    A       10
    B       35
    C       3000
 
アクセスのテーブル上では、この様なデータになります。
 
これをメッセージボックスで、
 
 
件数は間違えないですか?
  
 Aは10件です。
 Bは35件です。
 Cは3000件です。
  
はい いいえ
 
と表示させたいです。
 
大変申し訳ございません。
 
 
 

回答
投稿日時: 22/09/15 16:11:49
投稿者: WinArrow
投稿者のウェブサイトに移動

こんな感じでいかがですか?
 
Dim MSG As String
 
    MSG = ""
    Do While Rec.EOF = False
        If MSG <> "" Then MSG = MSG & vbLf
        MSG = MSG & Rec![物件親] & "は" & Rec![件数] & "件です。"
        Rec.MoveNext
    Loop
 
    MsgBox MSG
 

投稿日時: 22/09/15 16:28:38
投稿者: ラブ

お世話になっております。
 
ありがとうございます。
教えて頂きました内容を下の通り、記載してみました。
 
 
 
  Set dbs = New ADODB.Connection
    dbs.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data SOURCE=C:\Temp\XXX\△△.mdb"
 
 
    Set Rec = New ADODB.Recordset
    With Rec
         .LockType = adLockPessimistic
         .Source = "T_XXX集計"
         .ActiveConnection = dbs
         .Open
    End With
     
     
    Dim MSG As String
  
    MSG = ""
    Do While Rec.EOF = False
        If MSG <> "" Then MSG = MSG & vbLf
        MSG = MSG & Rec![物件親] & "は" & Rec![件数] & "件です。"
        Rec.MoveNext
    Loop
  
 If MsgBox(MSG, "取り込んだデータ件数は間違えないですか?", vbYesNo) = vbNo Then
        ThisWorkbook.Close
 End If
     
  → ここの部分で「型が一致しません」と表示されます。
    すいません。私の力ではこれをささっと直せない。 
     
    Set dbs = Nothing
     
End Sub
 
 
今回の修正は、作業している担当者が、良く間違えるので、その注意を込めてメッセージボックスで
表示させたい!になります。
 
その為、件数が「0」件だったりした場合、NOを選んで、エクセルを閉じる仕組みにしたいと考えています。
 
大変申し訳ございません。
 
 

投稿日時: 22/09/15 16:59:59
投稿者: ラブ

お世話になっております。
 
ありがとうございます。
 
If MsgBox(MSG, vbYesNo, "取り込んだデータ件数は間違えないですか?") = vbNo Then
  
        ThisWorkbook.Close
  
 End If
 
と書き直したら、無事に動くようになりました。
 
一番わかっていなかった「変数への代入の考え方」を教えて頂きありがとうございました。