プロが教えるわが家の防犯対策術!

Accessのレポートで、宛名ラベル印刷の印刷開始位置を選択できる
ようにしたく、下記URLの通りにやってみたのですが、エラー表示がでます。

参考URL
http://support.microsoft.com/default.aspx?scid=k …

この通りにやってみると、エラーメッセージ「コンパイルエラー プロシージャ内では無効です」
と表示されてしまいます。
エラーにならないようにするには、どうしたらよいのでしょうか?

記述は下記になります。

Option Compare Database

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Option Explicit
Dim i, k 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

恐れ入りますが、ご教示お願い致します。

このQ&Aに関連する最新のQ&A

印刷 VBA」に関するQ&A: VBA印刷ページ設定

A 回答 (2件)

> Option Compare Database



> Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
> Option Explicit
> Dim i, k As Integer

Option Compare Database
Option Explicit

Private Sub レポートヘッダー_Format(Cancel As Integer, FormatCount As Integer)
Dim i, k As Integer

この回答への補足

ご回答ありがとうございます。
ボックスの表示はされるようになったのですが、
実際に数字を入力してOKをクリックすると、
「コンパイルエラー 変数が定義されていません。」
と表示されるのですが、何処を修正したら良いのでしょうか?
よろしくお願い致します。

補足日時:2007/10/01 17:12
    • good
    • 0

リンク先を、落ち着いて見ましょう。



Option Compare Database
'Option Explicit
Dim i, k As Integer
Private Sub ・・・・
となっています。

プロシージャの中で宣言した変数は
そのプロシージャの中でしか参照できません。
複数のプロシージャで参照するには
モジュールレベルで宣言する必要があります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

QAccessのフォーマット時イベント

宜しくお願いいたします。

Accessを使用していますが、
レポートの詳細セクションの[フォーマット時]
イベントについて教えてください。

この[フォーマット時]というイベントは、具体
的にいうと、どんなイベントのことを指してい
るのでしょうか?

[クリック時]イベントはマウスがクリックされ
たときなのは良く分かりますが、
レポートの詳細セクションがフォーマットされ
るときとはどういう意味なのでしょうか?

教えてください。

Aベストアンサー

通常レポートを印刷(プレビュー)するとき、まず内部でそのイメージを構築します。

このとき、一般的には設定してある紙の印刷可能領域からページヘッダーと、ページフッターを確保します。

その後に詳細部分を繰り返して残りの印刷可能領域に詳細を詰めていきますが、あるところまで行ったときに詳細の途中で印刷可能領域が足りなくなったとします。このときにその一つ前のレコードまででイメージを再フォーマットします。(プロパティーで項目を1ページに収める設定がしてある場合)

このようにフォーマット時は場合により数回繰り返されたりもします。フォーマットイベント内で回数のカウントなどしてみるとよくわかると思います。

また、フォーマットイベントの引数に何回フォーマットを行っているかというのもあったと思います。
必要により1回目のフォーマとの時のみに何か処理をさせるといったことも可能です。(たとえばSUMを使わずに項目の合計を求めるなどと行ったこと)

QAccessでの宛名ラベル出しについて

ホントに初心者です。
Accessでラベルを出す際に、テーブルには何件もデータが入っているのですが、その中のいくつかをピックアップして、なおかつ、一枚の用紙に同じ宛先を複数印刷したい時はどのようにすればよいでしょうか?
分かりやすく教えて頂ければ幸いです。

Aベストアンサー

>一枚の用紙に同じ宛先を複数印刷したい時はどのようにすればよいでしょうか?

モジュールを使った方法とテーブルを使った方法があります。テーブルを使った方が簡単ですが・・。

テーブルを使う方法
連番を保存するテーブルを作ります。連番は1から印刷枚数の最大より多めに順に入力しておく。(例えばテーブル名をT連番としフィールドは連番とします)
別々の枚数が必要ならラベルの元になるテーブルに印刷枚数というフィールドを作りそこに必要な枚数を入力しておきます。
そのテーブルを元にクエリを作りそのクエリにテーブル追加でT連番を追加し連番をクエリのフィールドに追加します。(テーブルとT連番はリレーションを取らないように)連番の抽出条件に<=[印刷枚数]と記述します。
そのクエリを開くと印刷枚数分同じレコードが出来ます。
そのクエリをラベルのレポートのレコードソースにして出力すれば印刷枚数に合わせて同じシールが出力されます。

全て同じ枚数ならクエリの抽出条件を変えれば出来ます。
連番の抽出条件に
<=[何枚出力しますか]
と記述します。レポートをプレビューや印刷をする際に[何枚出力しますか]というパラメータダイアログが表示されますのでそこに出力したい枚数を入力すればラベルが入力された数字の枚数出力されます。

モジュールを使う場合
レポートの詳細に非表示のテキストボックスを1つ作ります。例えばそのテキストボックス名をText1としテーブルトの印刷枚数のフィールド名を印刷枚数とした場合。
レポートの詳細のプロパティのフォーマット時のイベントに
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
Dim 指定枚数 As Integer
指定枚数 = Me!印刷枚数
If [Text1] <> 指定枚数 Then
[Text1] = [Text1] + 1
Else
[Text1] = 1
End If
End Sub
同様に印刷時のプロパティに
Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer)
Dim 指定枚数 As Integer
指定枚数 = Me!印刷枚数
If [Text1] <> 指定枚数 Then
[Text1] = [Text1] + 1
Else
[Text1] = 1
End If
End Sub
を記述します。
これで出来ます。

試してみてください。

>その中のいくつかをピックアップして
抽象的すぎますが・・作ったクエリで必要なレコードを抽出できるような抽出条件を作らないとできません。
例えばテーブルにYes/No型のフィールドを追加して出力したいレコードにチェックをしれクエリでそのフィールドに
True
と条件をいれればチェックされているレコードだけ抽出できます。
このように抽出条件を考えてみてください。

>一枚の用紙に同じ宛先を複数印刷したい時はどのようにすればよいでしょうか?

モジュールを使った方法とテーブルを使った方法があります。テーブルを使った方が簡単ですが・・。

テーブルを使う方法
連番を保存するテーブルを作ります。連番は1から印刷枚数の最大より多めに順に入力しておく。(例えばテーブル名をT連番としフィールドは連番とします)
別々の枚数が必要ならラベルの元になるテーブルに印刷枚数というフィールドを作りそこに必要な枚数を入力しておきます。
そのテーブルを元にクエリ...続きを読む

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QVBで使用するAccessのSQL(INSERT文)

VBで使用するAccessのSQL(INSERT文)ですが、
下記のようなSQLはどのようにすれば良いのでしょうか?

テーブル:A
フィールド:B(Text型),C(Yes/No型)
作成したいSQL文:
Textに空白、Yes/NoはTrueを入れ、
既存のフィールド内の一番下に
作成(追加)する。

Aベストアンサー

AccessのJet(MDB)と判断して良いですよね?

もし、Bのフィールドが空文字列の許可が「いいえ」の場合は、
Insert into A (B,C) values (Null, Yes);
と、なります。

テキストで空白とは、Nullや""(空文字列)、または" "ともとれるので言葉が難しいですね。
プログラムを作る時はここらへんの意思統一ができてないとトラブルの元です。

QAccessレポートでテキストボックス内の文字幅の変更

ACCESS2000です。よろしくお願いいたします。
レポートで、金額が表示されているテキストボックスがあります。
その金額の数字を大きくすることはできたのですが、
文字の幅を広げたいのです。一文字一文字間隔を広げたいのです。
できないのでしょうか?その部分だけ倍率をあげたりとか何でもかまいません。

Aベストアンサー

あなたのやりたいことは、テキストボックスの幅を
変えることでも、文字幅を変えることでもなくて
こういうことではありませんか?

http://www.accessclub.jp/bbs3/0017/superbeg7352.html

参考URL:http://www.accessclub.jp/bbs3/0017/superbeg7352.html

Qアクセエスのレコードの更新をVBAでするには?

アクセスで、一覧表のフォームにボタンを取りつけています。レコードの内容を変更したら、ペンの形のマークが現れますね。これは変更中ということですが、そこでボタンを押しても変更は確定されないから、更新確定させたいのです。

それで、DoCmd.Requery を最初の行に入れてみたら、元の一覧表は最初のレコードに飛んでしまう。

元の一覧表の位置を動かさないために、Ctrl+Enter キーを押して更新確定させたような状態をVBAで実現する方法あるのでしょうか?

よろしくお願いします。

Aベストアンサー

No1 です。
今回の場合には
Docmd.RunCommand acCmdSaveRecord の方が良かったですね
文字通りレコードを保存します。
Requery に引きづられてしまいました (^_^;)

Recalc、Refresh、Requery の使い分けは下記が参考にはなりますか?
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q「yes」なら実行させて「no」なら実行させない仕組みをAccessのマクロで作れますか?

以前にも似たようなご質問をしましたが、回答して頂いた内容が私では解らなかったので再度させて頂きます。
“クエリ”を実行させる前に『「本当に実行しますか?」とメッセージを表示させて、「yes」なら実行させて「no」なら実行させない』という仕組みを「マクロ」で作れないのでしょうか?

私が作成した方法は
マクロの
1行目
「アクション」のとこで「メッセージボックス」を選択し、アクションの引数「メッセージ」の箇所に「本当に実行しますか?」と入力。
2行目
「アクション」のとこで「クエリを開く」を選択し、アクションの引数「クエリ名」の箇所に「●●クエリ(任意のクエリ)」と入力。
そして保存します。

そのマクロを実行させても「本当に実行しますか?」のメッセージが出て、「OK」のボタンしか表示されないんです。
(当たり前なのかもしれませんが…)
そしてその「OK」をESCキーで回避してもクエリが実行されてしまいます。
(当たり前なのかもしれませんが…)

上記の知識しかありません。どなたか柔らかくご説明して頂けないでしょうか?よろしくお願い致します。

以前にも似たようなご質問をしましたが、回答して頂いた内容が私では解らなかったので再度させて頂きます。
“クエリ”を実行させる前に『「本当に実行しますか?」とメッセージを表示させて、「yes」なら実行させて「no」なら実行させない』という仕組みを「マクロ」で作れないのでしょうか?

私が作成した方法は
マクロの
1行目
「アクション」のとこで「メッセージボックス」を選択し、アクションの引数「メッセージ」の箇所に「本当に実行しますか?」と入力。
2行目
「アクション」のとこで「クエリ...続きを読む

Aベストアンサー

自分はマクロをほとんど使わないので、VBA風になりますが・・・

条件付のマクロにする([表示]→[条件])

1行目
条件:MsgBox("本当に実行しますか?",4)<>6
アクション:全マクロの中止

2行目以降 Yes の場合の処理

こんな感じで出来ると思います。


4 とか 6 とかは、VBAの定数です。
VBA内では vbYes 等の名前で参照しますが、マクロ中では使えないと思いますので、直接数字を書きます。

幾つか定数を書いておきます。
(VBAのヘルプの MsgBoxを調べれば詳しく書いてます。)

1 vbOKCancel [OK] ボタンと [キャンセル] ボタンを表示します。
4 vbYesNo   [はい] ボタンと [いいえ] ボタンを表示します。

アイコンを表示するなら、上記の数字+下記の数字

16 vbCritical   警告メッセージ アイコンを表示します。
32 vbQuestion   問い合わせメッセージ アイコンを表示します。
48 vbExclamation 注意メッセージ アイコンを表示します。
64 vbInformation 情報メッセージ アイコンを表示します。

例:注意アイコン付き Yes/No :4 + 48 = 52
  MsgBox(""本当に実行しますか?",52)<>6 となります。

戻り値の定数

1 vbOK
2 vbCancel
6 vbYes
7 vbNo

6 は Yes です。
<>6 でYesでなければ、中止・・・となります。

自分はマクロをほとんど使わないので、VBA風になりますが・・・

条件付のマクロにする([表示]→[条件])

1行目
条件:MsgBox("本当に実行しますか?",4)<>6
アクション:全マクロの中止

2行目以降 Yes の場合の処理

こんな感じで出来ると思います。


4 とか 6 とかは、VBAの定数です。
VBA内では vbYes 等の名前で参照しますが、マクロ中では使えないと思いますので、直接数字を書きます。

幾つか定数を書いておきます。
(VBAのヘルプの MsgBoxを調べれば詳しく書いてます。)

1 vbO...続きを読む

QAccessのレポート機能で空白になる2ページ目を印刷したくない

Accessでウィザードを使用してレポートを作成したんですが、
初めは2ページだったのを、手動で1ページにまとめました。
印刷プレビューすると、「セクションの幅がページ幅より広く、
はみ出す部分に印刷される項目がないため、ページが白紙に
なります」とメッセージが出て、2ページ目が真っ白です。
1ページで印刷したいのですが、どうすればよいでしょうか?

Aベストアンサー

>余白を「0(ゼロ)」にしてみましたが、ダメでした。
>ウィザードを使用してレポートを作成するのが、ダメなのでしょうか。

印刷するサイズにコントロールが収まっていないようですので
デザインビューで一番右と下にあるコントロールをそれぞれ少し左と上に
移動させ、プレビュー画面で確認してみてください


人気Q&Aランキング