いつもいつもお世話になっております(><)
今までこちらで色々質問しながら、
「条件入力フォームで入力した条件で、レコードを条件抽出し、この抽出結果をフォームに出力、かつ、伝票発行する」
というシステムを作っています。
今、伝票発行の部分で、下記のようなプロシージャを組みました。
そして、下記★(コード内参照)の2点で詰まっています。
★1 指定しているクエリは抽出結果のフォームなのですが、これが「SQLステートメントが正しくありません」となります。どうしてでしょうか。ちなみに実在する別のクエリ名にすると、一応動きます。
★2 フォーム上に抽出されたレコードがEOFになるまで、というループ条件にしたいのですが、この部分の記述は正しいでしょうか。
いつも初心者的質問で恐縮です。
どうぞよろしくお願い致します。
---------------------------------------------
Option Compare Database
Private Sub 伝票発行_Click()
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim app As Object
Dim wb As Excel.Workbook
Dim iRow As Long
Dim iColm As Long
'■初期化
iRow = 12
iColm = 1
'■確認
If MsgBox("伝票を出力します。", vbOKCancel) = vbOK Then
'■DBコネクション
Set db = CurrentProject.Connection
'■レコードセットの取得
Set rs = New ADODB.Recordset
rs.Open "受注集計クエリ_f", db, adOpenStatic, adLockReadOnly '★1
'■Excelアプリの起動及びファイルオープン
Set app = CreateObject("Excel.Application")
app.Workbooks.Open filename:=CurrentProject.Path & "\nouhinsyo.xls"
'■Excelシート名指定
app.Worksheets(1).Select
Do Until rs.EOF '★2
ws.Cells(iRow, iColm + 2) = rs("品番")
ws.Cells(iRow, iColm + 3) = rs("商品名")
ws.Cells(iRow, iColm + 4) = rs("受注数の合計")
ws.Cells(iRow, iColm + 8) = rs("備考")
rs.MoveNext
iRow = iRow + 1
Loop
MsgBox "発行完了。"
End If
rs.Close
app.Quit 'エクセルセッションをクローズする。
Set ws = Nothing '変数の初期化
Set wb = Nothing '変数の初期化
Set app = Nothing '変数の初期化
Set db = Nothing
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1です
> 指定しているクエリは抽出結果のフォームなのですが
既に抽出結果をフォームに表示しており、それをExcel出力したいということでしたか?。
抽出結果を表示しているフォーム名を「F1」と仮定します。
Private Sub 伝票発行_Click()
Dim app As Object
Dim iRow As Long
Dim iColm As Long
iRow = 12
iColm = 1
Set app = CreateObject("Excel.Application")
app.Workbooks.Open filename:=CurrentProject.Path & "\nouhinsyo.xls"
app.Worksheets(1).Select
With Forms("F1").RecordsetClone ' ★
.MoveFirst
While (Not .EOF)
app.Cells(iRow, iColm + 2) = !品番
app.Cells(iRow, iColm + 3) = !商品名
app.Cells(iRow, iColm + 4) = !受注数の合計
app.Cells(iRow, iColm + 8) = !備考
.MoveNext
iRow = iRow + 1
Wend
End With
app.Visible = True ' ☆
Set app = Nothing
End Sub
※ ☆では、Excel書き込み保存していません。(結果を表示する状態)
書き込み保存用に変更してください。
※ ★では、自分のフォームに抽出結果が表示されているのなら
With Me.RecordsetClone
に書き換えてください。
※※ 0件の時に実行するかは処理を盛り込んでください。
.MoveFirst でエラー?
No.1
- 回答日時:
> ★1 指定しているクエリは抽出結果のフォームなのですが、これが「SQLステートメントが正しくありません」となります。
どうしてでしょうか。ちなみに実在する別のクエリ名にすると、一応動きます。> ■レコードセットの取得
> Set rs = New ADODB.Recordset
> rs.Open "受注集計クエリ_f", db, adOpenStatic, adLockReadOnly '★1
言われていることが今一つわからないのですが、
"受注集計クエリ_f"は、実在するクエリではないのですか?
ここの部分は、クエリ名またはテーブル名の指定になっています。
私のやり方は、テーブル名/クエリ名を直に指定しない時には、
rs.Source = "SELECT * FROM テーブル名 ORDER BY XXXX;"
rs.Open , db, adOpenStatic, adLockReadOnly
の様にしていますが、書き方はいろいろです。
rs.Open "SELECT * FROM テーブル名 ORDER BY XXXX;", db, adOpenStatic, adLockReadOnly
でもできるようです。
> Do Until rs.EOF '★2
> ws.Cells(iRow, iColm + 2) = rs("品番")
ここの ws は何を設定しているのでしょうか。
(後の方に wb もあるようですが)
ws.Cells(iRow, iColm + 2) = rs("品番")
↓
app.Cells(iRow, iColm + 2) = rs("品番")
で、できると思います。
アプリケーション直で Cells 参照すると(app.Cells(・・・・ )
アクティブワークブック、アクティブワークシートが対象になったと思います。
この回答への補足
>30246kikuさま
いつもありがとうございます。
>"受注集計クエリ_f"は、実在するクエリではないのですか?
実在するクエリです。
実在するにもかかわらず、この部分で上記のエラーが出るうえ、他の実在するクエリを当てはめてみると正常に動くので、どうしてだろうかと思っての質問でした。
こちらが動かないので、それ以外の部分までデバックが至らない現状です。。
>app.Cells(iRow, iColm + 2) = rs("品番")
>で、できると思います。
こちらは、完全にミスでした。シート指定の定義文が抜けていました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
Accessクエリの抽出条件にフォ...
-
クエリ実行結果0件の場合のフ...
-
AccessでIDを入力したら他の項...
-
ACCESSで、EXCELのような、sumi...
-
ACCESS2000 抽出されたレコー...
-
ACCESS2003のグループ化のエラ...
-
クエリーの結果をフォームに表...
-
ACCESS フォームで抽出したデー...
-
パラメータ入力。
-
ACCESSで、フォームで抽出した...
-
フォームから抽出条件を指定し...
-
ANDとかORとかを書く位置
-
access2003 レポートの表示に...
-
【Access2000】月末の日付を条...
-
access2003 期間抽出後グループ...
-
Access サブフォームでの選択行...
-
エクセルで、抽出したデータだ...
-
Access2000 サブフォームのReco...
-
Access 複数フォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでVBAから選択クエリの抽...
-
AccessでIDを入力したら他の項...
-
クエリ実行結果0件の場合のフ...
-
ACCESSで、EXCELのような、sumi...
-
Accessクエリの抽出条件にフォ...
-
ACCESS2007 マクロ クエリのパ...
-
ACCESS2003のグループ化のエラ...
-
アクセスのフォームに連番を表...
-
ACCESS フォームで抽出したデー...
-
クエリーの結果をフォームに表...
-
VarChar型をINT型に変換するには
-
サブフォームを利用したクエリ...
-
ACCESS クエリのデザインビュ...
-
access クエリでIIF文で抽出条...
-
ACCESSで、フォームで抽出した...
-
アクセス2007 フォームでフィ...
-
Accessのパラメータクエリ作成...
-
Accessでフィルタの実行アクシ...
-
Access2016埋め込みマクロでの...
-
ACCESSのフォームでボタンを押...
おすすめ情報