• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vbaレポート名の指定が間違っている!。)

VBAレポート名指定の間違いと処理エラーについて

DexMachinaの回答

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> この文のReports!stdocname!直線103.Visible = True書き方がおかしいようです。 「stdocname」はString型の変数だと思いますので、最も単純には上記の式は Reports(stdocname)!直線103.Visible = True になります。 ただ、ご質問のコードでは、これに該当するものがかなりの数ありますので、 オブジェクト型の変数の宣言を追加したり、Withを使用した方がよいかと 思います。 【現状(一部のみ抜粋)】 '*** 下消処理 SetLowerLine: Reports!stdocname!直線103.Visible = True Reports!stdocname!直線104.Visible = True Reports!stdocname!直線105.Visible = True Reports!stdocname!直線106.Visible = True Reports!stdocname!直線107.Visible = True 【上記を正しい構文に書換】 '*** 下消処理 SetLowerLine: Reports(stdocname)!直線103.Visible = True Reports(stdocname)!直線104.Visible = True Reports(stdocname)!直線105.Visible = True Reports(stdocname)!直線106.Visible = True Reports(stdocname)!直線107.Visible = True 【オブジェクト型の変数を使用した書換】 '以下は「Dim stdocname As String」を宣言しているのと同じ辺りに追加 '(レポートオブジェクト型の変数の宣言) Dim objRep As Report '以下は「stdocname」にレポート名を代入した後に追加 Set objRep = Reports(stdocname) '*** 下消処理 SetLowerLine: objRep!直線103.Visible = True objRep!直線104.Visible = True objRep!直線105.Visible = True objRep!直線106.Visible = True objRep!直線107.Visible = True '以下はこのコードを記述しているSubの終わる直前に追加(メモリの解放) Set objRep = Nothing 【さらにWithを使用した書換】 '*** 下消処理(上の「【オブジェクト型の変数を使用】」 の下消処理を差替) '(上記の「Dim objRep As Report」等の行はこちらでも必要。あくまで「下消 ' 処理」のみを差替になります) SetLowerLine: '※「With ○○ ~ End With」の間に書かれたコードでは、「!」や「.」で始まる   ものは、「○○!~」「○○.~」と指定されたのと同じ動作になります。 With objRep   !直線103.Visible = True   !直線104.Visible = True   !直線105.Visible = True   !直線106.Visible = True   !直線107.Visible = True End With ・・・以上です。 なお「上消時の月消処理」のところで > Reports!stdocname!("直線A" & "ii").Visible = True という記述がありますが、これも以下のような修正が必要です: 【正】 Reports(stdocname).Controls("直線A" & "ii").Visible = True

ttgk
質問者

お礼

ありがとうございます。 以下修正してみます。

ttgk
質問者

補足

'2451'から明細#errorとなります。 ご指摘頂いた箇所を修正してみたところ、上記のようになりました。 Private Sub 印刷_Click() On Error GoTo Err_印刷_Click '*** 変数の宣言 Dim stdocname As String Dim objrep As Report : : : '*** 上段・下段使用と対象月から使用レポートを判定 Select Case joge & tuki Case "上段" & "1" stdocname = "レポート01上" Case "上段" & "2" stdocname = "レポート02上" : : : End Select '*** stdocname(判定で指定されたレポート)を仮に開く DoCmd.OpenReport stdocname, acViewPreview Set objrep = Reports(stdocname) '*** 消線の種類で印刷処理選択/消無は通常印刷 ---> 消線と月消を判定 If Forms!メイン画面![リストDELSEN] = "下消" Then GoTo SetLowerLine End If If Forms!メイン画面![リストDELSEN] = "上消" Then GoTo SetUpperLine End If GoTo Insatumae '*** 下消処理 SetLowerLine: With objrep !直線103.Visible = True !直線104.Visible = True !直線105.Visible = True !直線106.Visible = True !直線107.Visible = True End With '*** 下消時の月消処理(00は処理しない) Format ("00") ii = Forms!メイン画面![テキストDELTUKI] If ii = "00" Then Else Reports(stdocname).Controls("直線A" & "ii").Visible = True Reports(stdocname).Controls("直線B" & "ii").Visible = True Reports(stdocname).Controls("直線C" & "ii").Visible = True End If GoTo Insatumae : : : '*** 上消時の月消処理(00は処理しない) Format ("00") ii = Forms!メイン画面![テキストDELTUKI] If ii = "00" Then Else Reports(stdocname).Controls("直線A" & "ii").Visible = True Reports(stdocname).Controls("直線B" & "ii").Visible = True Reports(stdocname).Controls("直線C" & "ii").Visible = True End If GoTo Insatumae '*** 印刷前処理 Insatumae: '*** stdocname(判定で指定されたレポート)を最大プレビューで開く DoCmd.OpenReport stdocname, acViewPreview DoCmd.Maximize

関連するQ&A

  • '2465'指定した式で参照している'直線Aii'フィールドが見つかり

    '2465'指定した式で参照している'直線Aii'フィールドが見つかりません。 入力されたテキストDELTUKIをiiにセットして直線Aii~Ciiに反映させたいです。 DELTUKIには0~12までのどれかがセットされて、00の場合には未可視、それ以外は 該当月の直線Aii~Ciiを可視化させたいです。 ですが、上記エラーが発生します。 どなたかご指南頂きたくよろしくお願い致します。 ※.メイン画面の画像添付参照願います。 ※.vba vb6 winXP SetLowerLine: With objrep !直線103.Visible = True !直線104.Visible = True !直線105.Visible = True !直線106.Visible = True !直線107.Visible = True End With 'Reports(stdocname)!直線103.Visible = True 'Reports(stdocname)!直線104.Visible = True 'Reports(stdocname)!直線105.Visible = True 'Reports(stdocname)!直線106.Visible = True 'Reports(stdocname)!直線107.Visible = True Format ("00") ii = Forms!メイン画面![テキストDELTUKI] If ii = "00" Then Else objrep.Controls("直線A" & "ii").Visible = True objrep.Controls("直線B" & "ii").Visible = True objrep.Controls("直線C" & "ii").Visible = True End If

  • この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

  • 下記コードはどう動くと思われますか。

    下記コードはどう動くと思われますか。 WinXP VBA(VB6.0)です。 下記のコードを実行した時、どう動くと思われますか?。 ご教授下さい。 よろしくお願い致します。 ii = Format(Forms!メイン画面![テキストZZZ], "00") If ii = "00" Then Else objrep.Controls("直線A" & ii).Visible = True objrep.Controls("直線B" & ii).Visible = True objrep.Controls("直線C" & ii).Visible = True End If

  • 「Select Case」より短く組み方法はあるでしょうか?。

    「Select Case」より短く組み方法はあるでしょうか?。 VB初心者です。 印刷したいレポートが24種類あり、各レポートには1月~12月のどれかが印刷されます。 また月が印刷済の用紙を再使用する場合もあり、印刷済の月に消線をする処理があります。 下記が印刷済の月に消線をする処理(一部抜粋)ですが、あまりに大きくなる為、これより 短く組む方法はあるでしょうか?。 なにかヒントになるような事でも構いません。 どなたかご教授願います。 よろしくお願い致します。 stdocname:レポート名 delt:印刷済の月 Select Case stdocname & delt Case "レポート01上" & "1" Reports!レポート01上!直線A01.Visible = True Reports!レポート01上!直線B01.Visible = True Reports!レポート01上!直線C01.Visible = True Case "レポート01上" & "2" Reports!レポート01上!直線A02.Visible = True Reports!レポート01上!直線B02.Visible = True Reports!レポート01上!直線C02.Visible = True : : : Case "レポート01上" & "11" Reports!レポート01上!直線A11.Visible = True Reports!レポート01上!直線B11.Visible = True Reports!レポート01上!直線C11.Visible = True Case "レポート01上" & "12" Reports!レポート01上!直線A12.Visible = True Reports!レポート01上!直線B12.Visible = True Reports!レポート01上!直線C12.Visible = True : : : Case "レポート12下" & "1" Reports!レポート12下!直線A01.Visible = True Reports!レポート12下!直線B01.Visible = True Reports!レポート12下!直線C01.Visible = True Case "レポート12下" & "2" Reports!レポート12下!直線A02.Visible = True Reports!レポート12下!直線B02.Visible = True Reports!レポート12下!直線C02.Visible = True : : : Case "レポート12下" & "11" Reports!レポート12下!直線A11.Visible = True Reports!レポート12下!直線B11.Visible = True Reports!レポート12下!直線C11.Visible = True Case "レポート12下" & "12" Reports!レポート12下!直線A12.Visible = True Reports!レポート12下!直線B12.Visible = True Reports!レポート12下!直線C12.Visible = True End Select

  • 変数にフォームからの入力値は入るのですが。

    変数にフォームからの入力値は入るのですが。 VBA初心者です。下記コードを書きました。 フォームからの入力値をレポート印刷しようとしています。 MSGBOXで内容を参照したところ、変数の内容は入っています。 入っているのですが、レポート上、項目が#Errorになってしまいます。 どこが悪いのでしょうか?。 お分かりになる方でおみえならご教授下さい。 Option Explicit '共通変数の宣言 Dim stdocname As String Dim repo As Report Dim delt As String Dim kmsg As String        :        :        : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click '*** 変数の宣言 Dim tuki As String Dim mais As Integer Dim denp As Integer Dim busu As Integer Dim joge As String Dim kmsg As String '*** 変数に入力値をセット mais = 0 delt = Forms!メイン画面![リストDELTUKI] joge = Forms!メイン画面![リストJYOGEDAN] tuki = Forms!メイン画面![リストTUKI] denp = Forms!メイン画面![テキストSBAN] busu = Forms!メイン画面![テキストEBAN] '*** 消し月と印刷月重複不可チェック If delt = tuki Then GoTo Err_印刷月_Click End If '*** 上段・下段使用と対象月から使用レポートを判定 Select Case joge & tuki Case "上段" & "1" stdocname = "レポート01上" Case "上段" & "2" stdocname = "レポート02上" Case "上段" & "3" stdocname = "レポート03上"        :        :        : Case "下段" & "10" stdocname = "レポート10下" Case "下段" & "11" stdocname = "レポート11下" Case "下段" & "12" stdocname = "レポート12下" Case Else stdocname = "レポート原稿" End Select kmsg = MsgBox(joge & tuki & stdocname)

  • 変数にフォームからの入力値が入らない。

    変数にフォームからの入力値が入らない。 VBA初心者です。下記コードを書きました。 フォームからの入力値をレポート印刷しようとしています。 MSGBOXで内容を参照したところ、JOGEしか入っていませんでした。 どこが悪いのでしょうか?。 お分かりになる方でおみえならご教授下さい。 Option Explicit '共通変数の宣言 Dim stdocname As String Dim repo As Report Dim delt As String Dim kmsg As String        :        :        : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click '*** 変数の宣言 Dim tuki As String Dim mais As Integer Dim denp As Integer Dim busu As Integer Dim joge As String Dim kmsg As String '*** 変数に入力値をセット mais = 0 delt = Forms!メイン画面![リストDELTUKI] joge = Forms!メイン画面![リストJYOGEDAN] tuki = Forms!メイン画面![リストTUKI] denp = Forms!メイン画面![テキストSBAN] busu = Forms!メイン画面![テキストEBAN] '*** 消し月と印刷月重複不可チェック If delt = tuki Then GoTo Err_印刷月_Click End If '*** 上段・下段使用と対象月から使用レポートを判定 Select Case joge & tuki Case "上段" & "1" stdocname = "レポート01上" Case "上段" & "2" stdocname = "レポート02上" Case "上段" & "3" stdocname = "レポート03上"        :        :        : Case "下段" & "10" stdocname = "レポート10下" Case "下段" & "11" stdocname = "レポート11下" Case "下段" & "12" stdocname = "レポート12下" Case Else stdocname = "レポート原稿" End Select kmsg = MsgBox(joge, tuki, stdocname)

  • エクセルVBAでShapesまたはDrawingObjects

    シート上のフォームなどを表示/非表示するためtest04を書きましたが、「実行時エラー438 オブジェクトはこのプロパティまたはメッソッドをサポートしていません」となります。 しかし、Test05のように同じことをForNextで回せばうまくいきます。 また、Test06のようにShapesをDrawingObjectsに書き換えただけでもうまくいきます。 では、Test04がエラーになるのはなぜでしょうか? Sub test04() With ActiveSheet.Shapes If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub Sub test05() For Each sp In ActiveSheet.Shapes If sp.Visible = False Then sp.Visible = True Else sp.Visible = False End If Next End Sub Sub test06() With ActiveSheet.DrawingObjects If .Visible = False Then .Visible = True Else .Visible = False End If End With End Sub

  • 「変数にフォームからの入力値は入るのですが2。」

    「変数にフォームからの入力値は入るのですが2。」 VBA初心者です。 以前のご回答ありがとうございます。 (1).画面を開き、条件を設定する。     →初期値設定ぐらいしかやっていません。 (2).レポートをデザインビューにし、レコードソースの所でクエリビルダを起動。 (3).クエリビルダでデータシートビューを開く     →クエリビルダまで行けるのですが、データシートビューを開くがありません。 (4).データシートビューに#Errorの欄があるようなら、クエリの     該当部分がオカシイので、クエリのSQLを提示してください。      (クエリビルダで、SQLビューを開くと表示される)     データシートビューが正常に表示されている場合は問題の     テキストボックスのコントロールソースを提示してください。     →データベースのクエリを見てもクエリは無いようです。      データシートビューは(レポート?)#Errorで表示されています。 ※.他の方が作られたものを修正している為、いまいち把握できていません。 Private Sub 印刷_Click() On Error GoTo Err_印刷_Click '*** 変数の宣言 Dim tuki As String Dim mais As Integer Dim denp As Integer Dim busu As Integer Dim joge As String Dim kmsg As String '*** 変数に入力値をセット mais = 0 delt = Forms!メイン画面![リストDELTUKI] joge = Forms!メイン画面![リストJYOGEDAN] tuki = Forms!メイン画面![リストTUKI] denp = Forms!メイン画面![テキストSBAN] busu = Forms!メイン画面![テキストEBAN] '*** 消し月と印刷月重複不可チェック If delt = tuki Then GoTo Err_印刷月_Click End If '*** 上段・下段使用と対象月から使用レポートを判定 Dim 月 As Long 月 = Val(tuki) If (joge = "上段" Or joge = "下段") & (月 >= 1 & 月 <= 12) Then stdocname = "レポート" & Format(月, "00") & Left(joge, 1) Else stdocname = "レポート原稿" End If kmsg = MsgBox(joge & tuki & stdocname) '*** stdocname(判定で指定されたレポート)を仮に開く DoCmd.OpenReport stdocname, acViewPreview '*** レポートのセット Set repo = Reports(stdocname) 上記、「型が一致しません」となってしまいました。 お分かりになる方でおみえならご教授下さい。

  • Excel VBAにて2つの処理を同時実行可能?

    是非お力をお貸し下さい。 よろしくお願いします。 Windows XP Excel2003 (VB6.0) メイン処理が非常に時間がかかるため、フォームを表示させ 文字(Label)を点滅させて「動いている(ハングアップしていない)」ことを 使用者に伝えようとしています。 --- Form1内のコード(メイン) --- Sub Main() Form2.Show vbModeless [ ~メイン処理~ ] End Sub --- Form2内のコード --- Sub UserForm_Initialize() Call Blink End Sub --- 標準モジュール内のコード --- Sub Blink() If Form2.Label1.Visible = True Then Form2.Label1.Visible = False Else Form2.Label1.Visible = True End If Form2.Repaint DoEvents Application.OnTime Now + TimeValue("00:00:01"), "Blink" End Sub これを実行すると、メイン処理が終了した後にForm2内の文字が 点滅します。 実現したいのは「使用者が動いていることを(ハングアップしていない ことを)確認出来る」という点です。 どうぞ よろしくお願いします。

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

    VBAの正しい構文なのでしょうか?。 以下の構文は正しいのでしょうか?。 Option Explicit Dim stdocname As String Dim repo As Report      :      :      : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click      : Set repo = Reports(stdocname)