エクセルVBAでアクセスデータベースを抽出して読み込む方法
アクセスで見積の提出情報のデータベースを作成しています。
このデータベースをエクセルのフォームで日付指定し抽出したいと考えております。
データベースの全てを読み込む事には成功したのですが、
いざフォームを作成し日付を入力。
実行したのですが、日付の構文エラーとなってしまいました。
抽出条件を表すSQLステートメントがおかしいのかもしれません。
どこを訂正したらよいのでしょうか?
Private Sub CommandButton1_Click()
Dim rcs As ADODB.Recordset
Dim cnStr As String, sqlStr As String
Dim sday As Date
sday = TextBox1.Text
'一覧のクリア、始点へ移動
Range("A5:N300").Select
Selection.ClearContents
Range("A5").Select
'データベースの保存場所
cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Accexl\見積予定.mdb"
'検索条件
sqlStr = " SELECT * FROM 予定表 WHERE 作成日 = # sday #"
'データベースの読込、コピー、閉じる
Set rcs = New ADODB.Recordset
rcs.Open Source:=sqlStr, ActiveConnection:=cnStr, CursorType:=adOpenStatic
ActiveCell.CopyFromRecordset rcs
rcs.Close
Set rcs = Nothing
Range("C:C,E:E").Select
Selection.NumberFormatLocal = "h:mm;@"
Range("B:B,D:D").Select
Selection.NumberFormatLocal = "m/d;@"
Range("A3").Activate
End Sub
フォームの中にテキストボックス(日付を入力)、コマンドボタン(検索実行)を配置しています。
テキストボックスには日付表示するようにしています。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim ret As Long
ret = 0
If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
With TextBox1
.Text = Replace(.Text, "/", "")
If IsNumeric(.Text) Then
If IsDate(Format(.Text, "0000""/""00""/""00")) Then
.Text = Format(.Text, "0000""/""00""/""00")
Else
ret = 1
End If
Else
ret = 1
End If
If ret = 1 Then
MsgBox "日付指定です"
KeyCode = 0
End If
End With
End If
End Sub
No.1
- 回答日時:
> 作成日 = # sday #
Accessのクエリーの中ではこれでもOKですが、これは方言なので、他の言語から実行するなら、エラーになりますね。
とりあえず動くようにするなら
Dim sday As String 'Date にしない
sday = TextBox1.Text
(中略)
'フォームの日付の文字列をSQL側の関数で日付変換する
sqlStr = " SELECT * FROM 予定表 WHERE 作成日 = cDate('" & strday & "')"
(以下略)
SQLインジェクションを回避する上では、上記の方法ではなくパラメータバインドを使用する方がベターですが、フォーム側で必ず暦日チェックがされているなら、まあOKでしょう。
(久しく書いていないのでADOでの記述を忘れましたw)
早速のご返事ありがとうございます。
作成日 = # sday # は方言
なるほど勉強になります。
今仕事で使っているソフトがDOSなのです。
不便なので新しいソフトを探してはいるのですが、
なかなか難しいです。
そこで、何とか自分で作れないものだろうかと、いろいろなサイトを見て勉強中です。
まずは簡単なものから挑戦しています。
また解らない事があったら教えてください。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「24日の0時」って・・・
-
パソコンで購入したデーターが...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
WEEKDAYが反映されない
-
エクセルで6ヵ月後を自動入力で...
-
エクセルで日付別にシートを分...
-
EXCELで日付を****年上期、****...
-
ACCESSで日付ごとに自動連番(...
-
Excelでヘッダに前日の日付を表...
-
選択クエリで実行結果を非表示...
-
2つの日付の中間の日付 エク...
-
アンドロイドスマホ。カメラに...
-
ACCESSVBAのseekで複数INDEX検...
-
Excel関数 基準日に一番近い指...
-
VBA Access 指定した日付から、...
-
Access DTPickerの初期表示月を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「24日の0時」って・・・
-
パソコンで購入したデーターが...
-
差し込み印刷に当日の日付が入...
-
日付の大小の表現
-
回覧板の日付について質問です...
-
「時間」、「期日」、「日付」...
-
エクセル マクロ 名前を付けて...
-
Excelの関数について質問です。
-
エクセルで6ヵ月後を自動入力で...
-
履歴書の日付間違いで落ちますか。
-
エクセルで日付別にシートを分...
-
差込印刷 縦書きで和暦(漢数...
-
WEEKDAYが反映されない
-
ACCESSで日付ごとに自動連番(...
-
EXCELで日付を****年上期、****...
-
2つの日付の中間の日付 エク...
-
エクセルで日付け表示で、明治...
-
アンドロイドスマホ。カメラに...
-
勤務表をエクセルで作る際、 最...
-
下の画像はアンドロイドタブレ...
おすすめ情報