• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2016 構文エラー)

Access2016 構文エラー - 解決方法と対策

山田 太郎(@f_a_007)の回答

  • ベストアンサー
回答No.2

2000年以来、Access のコードは書いたことがないが・・・。もっと、簡単なコードを書いたがいいような気がしましたので、ちょっとお節介を。 Private Sub ページヘッダー_Print(Cancel As Integer, PrintCount As Integer) On Error GoTo err_shori   Dim intPreNo  As Integer   Dim intP    As Integer   Dim intPKei  As Integer   Dim strPage  As String   Dim strSQL   As String   Dim strReturns As String      Me.Section(acPageHeader).Visible = (Me.txtCnt <> 1)   ' *********************   ' 頁のカウント   ' *********************   If intPreNo <> 得意先CD Or intP = intPKei Then     intP = 1     strPage = "P. " & intP '明細30行で1頁     Me.txt前回請求額.Visible = True     Me.txt入金額.Visible = True     Me.txt繰越金額.Visible = True     Me.txt税抜.Visible = True     Me.txt消費税.Visible = True     Me.txt税込.Visible = True     Me.txt今回請求額.Visible = True     '請求金額等の取得 Q請求金額一覧より     strSQL = "SELECT ・・・・"     strReturns = DBSelect(strSQL) いちいち、ADODB のコネクションを確立してSQL文を実行して結果を取得する手続きを書くのは面倒。そういうことをすれば、その都度、バグ取りに終われることになるのでは・・・。それを、回避するには、その一連の手続きを関数化しておくこと。 添付図では、[テーブル1]の[ID]=1のレコード情報をDBSelect()で取得しています。同関数は、1レコードの各列の値を”;”で連結して返します。後は、CutStr()で取り出すだけです。  どちらも、2000年に書いた関数ですが、Access2016でも通用すると思います。まあ、通用しなかったら、考え方だけでも 【蛇足】int=1 だけで良いのでは・・・ Public Function DBSelect(ByVal strQuerySQL As String, _              Optional colDelimita As String = ";", _              Optional rowDelimita As String = ";") As String On Error GoTo Err_DBSelect   Dim R      As Integer ' 行インデックス   Dim N      As Integer ' 行総数 - 1   Dim cnn     As ADODB.Connection   Dim rst     As ADODB.Recordset   Dim fld     As ADODB.Field   Dim strList   As String ' 全てのデータを区切子で連結して格納     Set cnn = CurrentProject.Connection   Set rst = New ADODB.Recordset   With rst     .Open strQuerySQL, _        CurrentProject.Connection, _        adOpenStatic, _        adLockReadOnly     If Not .BOF Then       N = .RecordCount - 1       .MoveFirst       For R = 0 To N         For Each fld In .Fields           With fld             strList = strList & .Value & colDelimita           End With         Next fld         strList = Mid(strList, 1, Len(strList) - 1) & rowDelimita         .MoveNext       Next R     Else       strList = ""     End If   End With Exit_DBSelect: On Error Resume Next   rst.Close   Set rst = Nothing   DBSelect = IIf(Len(strList) > 0, Replace(strList & "[END]", rowDelimita & "[END]", ""), "")   Exit Function Err_DBSelect:   MsgBox "SELECT 文の実行時にエラーが発生しました。(DBSelect)" & Chr(13) & Chr(13) & _       "・Err.Description=" & Err.Description & Chr(13) & _       "・SQL Text=" & strQuerySQL, _       vbExclamation, " 関数エラーメッセージ"   Resume Exit_DBSelect End Function Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function 【補足】 rst("最大化表示",m)」にて、構文エラーになるようです。 DBSelect()とコードを比較されたし!

nnori7142
質問者

お礼

有難う御座います。 コードを書き直すのは、面倒でしたので、端折ってました。 確認します。

関連するQ&A

  • ACCESS  日付が変わった場所で改ページしたい

    Win 7 Access2013 大変、お世話になっています。よろしくお願いしたいと思います。 日程表で、詳細に「日付」「場所」「時間」「内容」などのフィールドがありA5の用紙に印字しています。1枚の用紙に収まらない場合、2枚目に順次印字されています。 この2枚目に移る時、「日付」が変わった時点で改ページをしたいのです。「日付」は日が変わった時だけ入力しています。 色々、調べてみて、グループ化もしてみましたがうまく出来ませんでした。「グループ化」の中で、印字の時の「グループ全体」という項目が Access2013では見当たりませんでした。 何卒、ご教示方よろしくお願いいたします。 【備考】 モジュールには、ここでご教示いただいた下記のような「線」の記述をしています。 Option Compare Database Option Explicit Dim HI As String Dim TI As String Dim NAIYO As String Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer) HI = """" TI = """" NAIYO = """" End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If HI <> Me.行程_日付 Then Me.直線51.Visible = True HI = Me.行程_日付 Else Me.直線51.Visible = False End If If TI <> Me.テキスト44 Then Me.直線53.Visible = True TI = Me.テキスト44 Else Me.直線53.Visible = False End If If NAIYO <> Me.内容 Then Me.直線55.Visible = True NAIYO = Me.内容 Else Me.直線55.Visible = False End If End Sub Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) Me.ScaleMode = 1 Me.ForeColor = 0 Me.DrawStyle = 0 Me.DrawWidth = 4 Me.Line (1.51 * 567, 0)-(1.51 * 567, 14400) Me.Line (6.8 * 567, 0)-(6.8 * 567, 14400) Me.Line (8.3 * 567, 0)-(8.3 * 567, 14440) End Sub

  • Access 97 VBAについて

    Access VBAについて教えてください。 初心者ですが、レポートに表示されるテキストボックスの”項目名”と”内容”プロパティーに重複データ非表示にしています。そして、非表示となった部分に”〃”を表示するため別のテキストボックス、”隠しオブジェクト1”及び”隠しオブジェクト2”を配置しています。???にどんな記述が必要かわかりません。”項目名”だけであれば問題なく表示されるのですが”内容”についても同様に処理したいのです。 どうぞ宜しくお願いいたします。 Option Compare Database Option Explicit '値を保持するために外側に変数を定義します。 Dim varA As Variant --------------------------------------------------- Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)   If Me.項目名 = varA Then    Me.隠しオブジェクト1.Visible = True Else Me.隠しオブジェクト1.Visible = False End If varA = Me.項目名 ???? If Me.内容 = varA Then Me.隠しオブジェクト2.Visible = True Else Me.隠しオブジェクト2.Visible = False End If varA = Me.内容 End Sub

  • Accessのレポートでデータがなくても罫線だけ表示させたい

    Win2000,Access2000を使用しています。 Microsoftのホームページで「[AC97] レコードがない場合も用紙の最後まで罫線を出力する方法」を応用して以下のVBを作成しました。 ですが、9行目までデータを入力すると9行目と10行目の両方の行に9行目のデータが表示されます。 8行目まででしたら、9、10行目は空白で罫線(直線)が表示されます。 どなたか解決法をご存知でしたらお教え下さい。 Option Compare Database  Dim A As Integer '-------今何行目なのかをカウントする為の変数  Dim B As Integer '-------今回印刷する予定のレコード件数を入れて                  おく変数 ---------------------------------------------------- Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)   A = 0   B = DCount("ID", "Q05商品リスト")   Me!改ページ3.Visible = False End Sub ---------------------------------------------------- Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)  A = A + 1  If A Mod 10 = 0 Then    Me!改ページ3.Visible = True  Else    Me!改ページ3.Visible = False    If A < B Then      Me.NextRecord = True      Me!商品名.Visible = True      Me!メーカー名.Visible = True    ElseIf A = B Then      Me.NextRecord = False      Me!商品名.Visible = True      Me!メーカー名.Visible = True    Else      Me.NextRecord = False      Me!商品名.Visible = False      Me!メーカー名.Visible = False    End If   End If End Sub

  • このVBAの構文は正しいのでしょうか?。

    このVBAの構文は正しいのでしょうか?。 以前ご教授頂いたものを修正してみたのですが。 どなたか分かる方ご教授願います。 Option Explicit Dim rpt As Report Dim stdocname As String Dim delt As String  :  :  : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click Dim Repo As Report Dim m As String Dim i As Integer  :  :  : Set Repo = Reports(stdocname) m = Format(delt, "00") If delt = "0" Then Else For i = 1 To 12 Step 1 If delt = i Then Repo.Controls("直線A" & m).Visible = True Repo.Controls("直線B" & m).Visible = True Repo.Controls("直線C" & m).Visible = True End If Next End If

  • Access レポートの詳細Formatに複数の式

    いつもお世話になっています。 レポートの詳細に結婚して姓が変更になった場合、旧姓に取り消し線を引く という式を作成しました。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If 新姓 <> "" Then Me.取り消し線1.Visible = True Me.取り消し線2.Visible = True Else Me.取り消し線1.Visible = False Me.取り消し線2.Visible = False End If End Sub 今回は、住所も変更になって新住所が入力されたら、旧住所に取り消し線を引きたいと 思います。 ただし、変更にならない場合もあるので、別のIF文になります。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If 新住所 <> "" Then Me.取り消し線3.Visible = True Me.取り消し線4.Visible = True Else Me.取り消し線3.Visible = False Me.取り消し線4.Visible = False End If End Sub レポートの詳細_Formatに複数の条件を設定することができるのでしょうか。 お力添えをお願いいたします。

  • 行数を固定して納品書を作成したが、いらない部分がでる

    こんばんは、提出時間がせまっているので、 あせって、質問しました。 今、アクセスにて納品書のレポートの作成中です。 Q_売上テーブルとQ_売上明細テーブルをつかって、 レポートを作成し、5行に固定したかったので、 下記のようなVBAを記述しました。 行は、固定されましたが、 なぜか1行しかない時などに、 商品区分だけが2行目3行目に1行目の内容をコピーして はいってくるのです。 どこがおかしいのかわからず、苦戦中です。 ご教授、よろしくお願いいたします。 Option Compare Database Dim AAA As Integer Dim BBB As Integer Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) AAA = 0 BBB = DCount("伝票番号", "Q_売上明細テーブル", "伝票番号='" & Me!伝票番号 & "'") End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) AAA = AAA + 1 Me!テキスト54 = AAA If AAA Mod 5 = 0 Then If AAA < BBB Then Me!改ページ55.Visible = True Me.Section(3).Visible = True ElseIf AAA = BBB Then Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True Else Me!テキスト54.Visible = False Me!商品区分.Visible = False Me!商品名.Visible = False Me!数量.Visible = False Me!単価.Visible = False Me!金額.Visible = False End If Else Me!改ページ55.Visible = False Me.Section(3).Visible = False If AAA < BBB Then Me.NextRecord = True Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True ElseIf AAA = BBB Then Me.NextRecord = False Me!テキスト54.Visible = True Me!商品区分.Visible = True Me!商品名.Visible = True Me!数量.Visible = True Me!単価.Visible = True Me!金額.Visible = True Else Me.NextRecord = False Me!テキスト54.Visible = False Me!商品区分.Visible = True Me!商品名.Visible = False Me!数量.Visible = False Me!単価.Visible = False Me!金額.Visible = False End If End If End Sub

  • アクセスの標準モジュールを教えてください

    アクセス初心者です。イベントプロシージャで以下のようなVBAを作りました。(動作しました。) これを複数のレポートで使いたいので,標準モジュールで作りたいのですが,うまくできません。 下のVBAを標準モジュールで書くとどう書くのか教えてください。また,もしcallで呼び出すときの注意点等もあれば教えてください。 下のVBAでしたいことは,「加点減点*○」というイメージを「tbox_加点」というテキストボックスの値に応じて可視にするというものです。 アクセスは2007を使っています。よろしくお願いします。 Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) Dim kt As Long Dim st As Long Me.加点減点_10○.Visible = False Me.加点減点_5○.Visible = False Me.加点減点0○.Visible = False Me.加点減点5○.Visible = False Me.加点減点10○.Visible = False kt = Me.tbox_加点 Select Case kt Case -10 Me.加点減点_10○.Visible = True Case -5 Me.加点減点_5○.Visible = True Case 0 Me.加点減点0○.Visible = True Case 5 Me.加点減点5○.Visible = True Case 10 Me.加点減点10○.Visible = True End Select End Sub

  • Accessレポートで1行おきに色を変える

    Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) FontCount = FontCount + 1 If FontCount Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 16777164 End If End Sub としてみました。 ですが何らかわりなく… 試しに Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) FontCount = FontCount + 1 If FontCount Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 16777164 End If MsgBox FontCount End Sub としてみたところずーっと「1」が表示され、変数がかわってないようです。 いったいどこがダメなのでしょうか? 確か以前できたはずなのに…(><)

  • Access2010 「型が一致しません。」エラー

    お世話になっております。 テキストファイルからデータを取り込んで、テーブルにあるデータと同じデータのみを表示させるプログラムがあります。 コードが「001」のように整数の場合は問題ないのですが、「A001」のように英数のデータの場合は、このエラーが出てしまいます。 「実行時エラー13 型が一致しません。」 デバッグをクリックすると、下記の部分が黄色に反転します。 「If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then」 テキストファイルのデータがテーブルにない場合はエラーが出ませんので、一致したデータがある場合のみエラーが出ます。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub Form_Load() Dim dbs As Database Dim rst As Recordset Dim strImportDir As String Dim strFile As String Dim lngFileNum As Long Dim strData As String Dim avarFldData As Variant Dim iintLoop As Integer DoCmd.Hourglass True strImportDir = Application.CurrentProject.Path & "\" strFile = strImportDir & "File.TXT" Set dbs = CurrentDb GoSub ReadFile Me.Requery DoCmd.Hourglass False Exit Sub ReadFile: Set rst = dbs.OpenRecordset("履歴", dbOpenDynaset, dbAppendOnly) lngFileNum = FreeFile() Open strFile For Input As #lngFileNum Do Until EOF(lngFileNum) Line Input #lngFileNum, strData avarFldData = Split(strData, ",", , vbTextCompare) For iintLoop = 0 To UBound(avarFldData) avarFldData(iintLoop) = Trim$(avarFldData(iintLoop)) Next iintLoop If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then With rst .AddNew !コード = avarFldData(0) .Update End With End If ' End If Loop Close #lngFileNum rst.Close Kill strFile Return End Sub

  • Access2003 レポートの合計の出し方

    お世話になっております。 Access2003のレポートで下記のようなコードで価格の合計を求めようとしています。 1ページですとこれで合計は表示されるのですが、レポートが2ページ以降になると最終ページの合計が表示されます。 最終ページの最後にすべての合計を出したいと思っています。 ご教授いただければ幸いです。よろしくお願いいたします。 Option Compare Database Dim a As Variant Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer) a = 0 End Sub Private Sub グループヘッダー3_Print(Cancel As Integer, PrintCount As Integer) a = a + Me.価格 End Sub Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me.合計 = a End Sub