アクセスIfブロックに対応するEnd Ifエラ-

このQ&Aのポイント
  • VBA初心者がアクセスにおいてIfブロックに対応するEnd Ifエラーに遭遇しました。
  • 部数指定に応じて看板を印刷するVBAを入力したところ、コンパイルエラーが発生しました。
  • 質問者はVBAのエラーを自力で修正できないため、助けを求めています。
回答を見る
  • ベストアンサー

アクセスIfブロックに対応するEnd Ifエラ-

こんにちは。 アクセスで各レコードの印刷部数がそれぞれ異なるため、各レコードに入力した(フォームから)部数指定で 看板を印刷するようVBAを入力したところ。。。フォーマット時の方でIfブロックに対する End Ifがありませんとコンパイルエラーが出てEnD Ifが反転しています。 VBA初心者で、このVBA事態もネットで調べてコピペしたもので。。。エラー事態を自力で直せません。。。宜しくお願いいたします。 レポートの詳細にテキストボックスを置き名前-[cut]/可視-[いいえ[/コントロールソース-[=1]/ 集計実行-[グループ全体] 詳細のプロパティ Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If IsNull([cut]) Then [cut] = 1 If [cut] <> 指定枚数 Then Me.NextRecord = False Me.MoveLayout = True Me.PrintSection = True End If End Sub Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If [cut] <> 指定枚数 Then [cut] = [cut] + 1 Else: [cut] = 1 End If End Sub 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

もしかして、こんな事をやりたいのでは? レポート印刷で印刷部数をフォーム上で指定する方法:SampleFile146 http://www.accessclub.jp/samplefile/samplefile_146.htm 勘違いならご容赦。

coco--chanel
質問者

お礼

こんばんは、nicotinismさん。 イメージに近いホームページを探して頂いて有難うございました。 >※イメージ的に http://www.f3.dion.ne.jp/~element/msaccess/AcTipsRptHowToPrintRabelSpecificNumber.html が近いような気もしますけど?ハズレ? 上記のものを試してみたら望み通りにいきました。。。 数年悩んでいた物が解決しすごく感謝しています。 有難うございました。

coco--chanel
質問者

補足

調べて頂き、回答ありがとうございます。 例えば、品物が20台の注文が入った時、ワゴンには10台までしか乗らないため同じ看板を2枚必要です。 注文個数は一つ一つバラバラなので、1レコード1注文入力するとして。。。レコード単位で部数指定したいと思っています。 現在、看板ボタンをクリックするとすべて1部づつとしてのプレビューが出ます。 私が参考にしたホームページは http://support.microsoft.com/kb/404902/ja です。 宜しくお願いします。

その他の回答 (4)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

すみません。『看板』の意味というか概念がぼんやりとしか分かりません。 例えば 品物テーブル 品物ID 品物名 単価 最大入数(ワゴンに詰め込める最大数)  1   パン  100  3  2  ミルク  200  2 出庫テーブル 品物ID 品物名 数 出庫日  1   パン  4 2013/6/4  2  ミルク  4 2013/6/4 みたいなもの(かなり簡略化してますが)があったとして最終的にレポートで どのようになったら良いのでしょう? (深読みしすぎ?) 元のデータと出力レポートの例を示してもらえませんか。 ※イメージ的に http://www.f3.dion.ne.jp/~element/msaccess/AcTipsRptHowToPrintRabelSpecificNumber.html が近いような気もしますけど?ハズレ? とりあえず Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If FormatCount < 指定枚数 Then Me.NextRecord = False Me.MoveLayout = True Me.PrintSection = True End If End Sub をお試しを。 (詳細_Printの方は無効(コメントアウト)しておいて)

coco--chanel
質問者

お礼

補足へ入力出来なかったのでお礼の所へ入力します。 間違えました。 引当IDと引当先で1対多のリレーションでした。 すいません。

coco--chanel
質問者

補足

回答ありがとうございます。紹介していただいたホームページも試してみます。 説明不足ですいません。 受注ID 出庫日 品名 個数 看板表示個数 単価 部数(看板) 引当先 1    6/5  パン  5   5      100   1 2    6/8  ミルク 20  10/20   200   2 引当客ID 引当客先 1     田中 2     鈴木 があり引当客IDと受注IDで1対多でリレーションしてあります。 看板形態は、出庫日 品名 看板表示個数 引当先が1枚に載っています。 現在では、1レコード1部づつですが、部数指定したいと思っています。 回答下さったものを試してみましたが、マクロ実行エラーが出てしまいました。 宜しくお願いいたします。

  • okgoripon
  • ベストアンサー率44% (1141/2550)
回答No.3

If IsNull([cut]) Then [cut] = 1 上記の2行を2行に分けず If IsNull([cut]) Then [cut] = 1 と書けば動くのでは?

  • chie65535
  • ベストアンサー率43% (8514/19356)
回答No.2

「◇」は「同じ番号の◆」に対応します。 ◇1⇒Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) ◇2⇒If IsNull([cut]) Then ◇3⇒If [cut] <> 指定枚数 Then ◆3⇒End If ◆1⇒End Sub あれ?「◇2」に対応する「同じ番号の◆2」がありませんよ?

回答No.1

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) の中では、Ifが2つあるのにEnd Ifが1つしかないからエラーになっています。 End If1つで2つのIfが終了するわけではありませんよ。

coco--chanel
質問者

補足

みなさん有難うございます。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Dim 指定枚数 As Integer 指定枚数 = Forms![フォーム名]![部数指定フィールド名] If IsNull([cut]) Then [cut] = 1 Else If [cut] <> 指定枚数 Then Me.NextRecord = False Me.MoveLayout = True Me.PrintSection = True End If End Sub としてみました。すると。。。今度はIf [cut] <> 指定枚数 Then の<>がエラーで反転してしまいました。 この部分を [cut] = [cut] <> 指定枚数 Then と改造しましたが。。。ドツボにハマったようです。 素人で申し訳ありません、よろしくお願いします。

関連するQ&A

  • 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」が表示され、変数がかわってないようです。 いったいどこがダメなのでしょうか? 確か以前できたはずなのに…(><)

  • 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のラベル指定箇所印字について

    Window 7 Access2013 いつも、お教えいただき、誠にありがとうございます。お手数ですが、今ひとつお教えいただきたいと思います。 ラベル印刷で、開始位置を指定して印字する方法を検索して利用させていただいておりますが、 1枚のラベルを作成して指定したラベルに印字しようとして ・プレビューすると指定した印字位置にありますが ・実際印字すると 1枚目に印字されてしまいます コードは、引用させていただいた Option Explicit Dim i, k As Integer Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer) i = 0 k = InputBox _ ("ラベル印刷の開始位置を入力してください") End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) If i < k - 1 Then Me.MoveLayout = True Me.NextRecord = False Me.PrintSection = False i = i + 1 End If End Sub としています。 何卒、よろしくお願いいたします。

  • 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 レポートの詳細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に複数の条件を設定することができるのでしょうか。 お力添えをお願いいたします。

  • Accessのレポートで開くと「読み取り専用なので…」と出る。

    今まで通常通り表示できていたレポートを、詳細のところを白/グレーのストライプにしようと思い、以下のコードを追加しました。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Count = Count + 1 If Count Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12632256 End If End Sub すると 実行時エラー'2135' このプロパティは読み取り専用であるため、設定できません。 と出てしまいました。 どこがダメなのでしょうか?

  • アクセス レポート バックカラーの変更方法

    現在レポートで1行ごとにバックカラーを変えて印刷しておりますが、それをチェックボックスにチェックがはいった行だけをカラーにするよう変更したいと考えておりますが、よくわかりません。現在のコードをコピーしました。お手数ですがご指導願います。 Option Compare Database Dim bline As Integer Private Sub Report_Open(Cancel As Integer) End Sub Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) bline = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) bline = bline + 1 If bline Mod 2 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12663225 End If End Sub

  • アクセスの印刷VBAを教えて下さい

    アクセス初心者です。 バージョンは2002を使っています。 ネットで探して詳しく分からないままプログラムしています。 フォームで印刷のコマンドボタンを作ってそのボタンをクリックすると表示されてる 1ページのみ印刷したいのですが全てのレコードが印刷されてしまいます。 どうすればいいのか教えて下さい。 下記が今現在のVBAです。 Private Sub 印刷_Click() Dim varCopies As Variant varCopies = InputBox("部数を数字で入力してください", "印刷部数の指定") If Len(varCopies) = 0 Then Exit Sub End If If IsNumeric(varCopies) = False Then MsgBox "部数は数字で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub ElseIf CLng(varCopies) = 0 Then MsgBox "部数は0以上で入力してください", vbOKOnly + vbCritical, "入力エラー" Exit Sub End If If MsgBox("印刷しますか?" & vbCrLf & "部数=" & varCopies _ , vbYesNo + vbInformation, "印刷の確認") = vbYes Then DoCmd.OpenForm "伝票", acPreview, , , acFormReadOnly DoCmd.PrintOut acPrintAll, , , , CLng(varCopies) DoCmd.Close acForm, "伝票" End If 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 if文の記述方法

    検索フォームを作成しました。 入力項目は「氏名」「カナ」で入力チェックをおこなっております。 (未入力)メッセージを表示「未入力です」 (入力有)結果一覧のフォームを表示 未入力チェックは正常に処理されておりメッセージが表示されます。 項目に値を入力した場合フォームが起動しません。 if文から外した場合は正常に実行されます。 この条件の場合if文でどのように記述したらよいのでしょうか。 宜しくお願いします。 Private Sub 検索_Click() Dim mct As Control Dim flg As Boolean flg = False For Each mct In Me.Controls  If mct.ControlType = acTextBox Then   If mct.Tag = "Check" Then    If Not IsNull(mct) Then     flg = True     Exit Sub    End If   End If  End If Next mct If flg = True Then  Dim str As String  str = "[氏名] Like ""*" & Me!氏名 & "*"" And [カナ] Like ""*" & Me!カナ & "*"""  DoCmd.OpenForm "結果一覧", , , str Else  MsgBox ("未入力です") End If End Sub