• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数347
  • ありがとう数4

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

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

VBAもなにも要りません ="〃" としたテキストボックスの上に重複データ非表示としたテキストボックスを重ねておくだけでOKです

共感・感謝の気持ちを伝えよう!

質問者からのお礼

CHRONOS_0さん早速のアドバイス有難うございます。 私の説明が不足していたので申し訳ありません。 Husky2007さんのところに書きましたが、少々難しいのです。 それは、印刷時拡張にした場合各テキストの高さが変わるため、罫線を透明にしておき、VBAで最大の高さに合わせるようにしてあります。 そめため”〃”が表示された箇所の罫線が表示されないことになってしまいます。どうか宜しくお願いいたします。

関連するQ&A

  • Accessのレポートに取り消し線を表示したい

    いつもお世話になっています。 名簿を作成しているのですが、結婚して姓が変わった場合、 上書きせずに新しい姓を別のテキストボックスに入力します。 これをレポートとして出力する際、新しい姓が入力された場合は、 過去の指名のテキストボックスに二重線を引きたいのですが うまくいきません。 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 お力添えをお願いいたします。

  • Access2010 SetFocusが当たらない

    Access2010です。 VBAにて、あるフォームの、デザイン上、「詳細」の中に存在しているテキストボックスにSetFocusでフォーカスを当てようと思ってます。 1 フォームロード時、フォームの「詳細」は非表示(当然、テキストボックスも非表示) 2 ボタンクリック時、フォームの「詳細」を表示し、テキストボックスにフォーカスを当てる という動作をしているのですが、2でテキストボックスにフォーカスがフォーカスが当たりません。どうしたらフォーカスが当たるのでしょうか? 以下、コードです。 Private Sub Form_Open(Cancel As Integer) Me.詳細.Visible = False End Sub Private Sub cmdボタン_Click() Me.詳細.Visible = True 'テキストボックスにフォーカスを当てる Me.txtテキスト.SetFocus 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

その他の回答 (3)

  • 回答No.4
noname#140971
noname#140971

補足:Me.項目名_ダミーは、ラベルを使っています。

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#140971
noname#140971

背景色を利用して見せる・見せないを演出したのが罫線が隠れた不具合の原因。 そこで、ダミーの文字色を白と黒とにすることで同じことを実現する手法に変更。 注意すべきは、ページが変わった時に重複非表示がキャンセルされること。 Private Sub Report_Page()は、そのためです。 もちろん、Me.項目名_ダミーは背後にないと白色表示がウッスラと確認されることに。 Option Compare Database Option Explicit Dim 項目名_Now As String Private Sub Report_Page()   Static Page_Now As Integer   Dim Page_New  As Integer      Page_New = Me.Page   If Page_Now <> Page_New Then     Me.項目名_ダミー.ForeColor = RGB(255, 255, 255)     項目名_Now = Me.項目名   End If End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)   Dim 項目名_New As String      項目名_New = Me.項目名   If 項目名_New = 項目名_Now Then     Me.項目名_ダミー.ForeColor = RGB(0, 0, 0)   Else     項目名_Now = 項目名_New     Me.項目名_ダミー.ForeColor = RGB(255, 255, 255)   End If End Sub 一応、こんな感じで目的が達成されます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

何度もありがとうございます。 色々試しましたが、何度試してもエラーです。レポートの詳細に書こうとしましたが違うようです。私のレベルが未熟であることを思い知らされました。めげずにもう少しジックリ勉強してみようと思います。 お休みのところ有難うございました。

  • 回答No.1
noname#140971
noname#140971

ちょっと、考え過ぎですね。 <Tbale1> ID____項目名 1_____AAA 2_____AAA 3_____BBB 4_____CCC <Report!Table1> ID____項目名 1_____AAA 2_____〃 3_____BBB 4_____CCC と表示されるようにしたいということ。 1、項目名を、背景色を透明でなく普通色で配置します。 2、その項目名の背景に'〃'を配置しておきます。 こうしておけば、重複していなければ、項目名で'〃'は隠されて事実上項目名のみ。 こうしておけば、重複していれば、項目名が非表示になって裏に隠れていた'〃'が表に。 これでOKです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

早速回答いただき有難うございます。提案いただいた通り実施してみました。確かに私の目的は達成できました。しかし、罫線の表示に別のVBAを作成しており結果として、”〃”の箇所に罫線が見えなくなってしまいます。 言葉足らずで申し訳ありません。 すべて記載すると以下の内容になっています。ただ、このままですと ”〃”は表示されないままです。 この構文を生かした形でアドバイスをいただければ幸いです。申し訳ありません。どうか宜しくお願いいたします。 --------------------------------------------------- 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.内容 Dim I, J J = 0 For I = 0 To Me.Count - 1 If Me(I).Section = 0 Then If J < Me(I).Height Then J = Me(I).Height End If End If Next I Me.Line (567 * 0, 567 * 0)-(567 * 0, J) Me.Line (567 * 0.721, 567 * 0)-(567 * 0.721, J) Me.Line (567 * 2.739, 567 * 0)-(567 * 2.739, J) Me.Line (567 * 8.914, 567 * 0)-(567 * 8.914, J) Me.Line (567 * 12.522, 567 * 0)-(567 * 12.522, J) Me.Line (567 * 14.169, 567 * 0)-(567 * 14.169, J) Me.Line (567 * 19.038, 567 * 0)-(567 * 19.038, J) Me.Line (567 * 20.23, 567 * 0)-(567 * 20.23, J) Me.Line (567 * 23.309, 567 * 0)-(567 * 23.309, J) Me.Line (567 * 27.967, 567 * 0)-(567 * 27.967, J)   Me.Line (567 * 0, 0)-(567 * 27.967, 0) Me.Line (567 * 0, J)-(567 * 27.967, J) End Sub

関連するQ&A

  • 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

  • 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)条件に応じて、テキストボックスを表示・非表示設定

    (ACCESS)条件に応じて、テキストボックスを表示・非表示設定 フォーム上のテキストボックスAを条件に応じて表示・非表示にさせたいです。 条件は、サブフォームのテキストボックスBに「支払」を言う文字があれば、 テキストボックスAが表示され、なければ非表示にする方法が探しています。 わからないなりに調べて、多分以下の文章になると思いますが、「?」の条件式がうまくいきません Private Sub AA_GotFocus() If  ????? Then Me!テキストボックスA.Visible = False Else Me!テキストボックスA.Visible = True End If End Sub どなたか教えてください。 宜しくお願い致します。

  • access レポートで罫線を最後まで出力する方法

    accessのbvaの本を参照してレコードがない場合でも最後まで罫線を出力する方法を試しているのですが、インクリメントがうまくいっていないのかいつまでも改ページを続けてしまいます。 どなたか解決する方法を教えてください。 Option Compare Database Option Explicit '次の3つの変数はdeclarationセクションで宣言します '現在印刷中のレコード番号を表す変数 Private pintRecord As Integer 'レコードソースの全レコード数を表す変数 Private pintRecordMAX As Integer '1ページ当たりに印刷するレコード数の定数 Private Const cintRecperPage As Integer = 15 Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) '現在印刷中のレコード番号を初期化します pintRecord = 0 'レコードソースの全レコード数を取得します pintRecordMAX = DCount("*", "T_出荷明細", "出荷No=reports![R_出荷証明書3 test]![出荷No]") '"*"にすることでクエリ内のレコード数をカウント。Null値フィールドを含むレコードも対象。 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) '各テキストボックスの可視/非可視のフラグ Dim blnVisible As Boolean '現在印刷中のレコード番号をインクリメントします pintRecord = pintRecord + 1 If (pintRecord Mod cintRecperPage) > 0 Then '1ページ内の途中のレコードを印刷している場合 '改ページしないようにします Me!bpage.Visible = False '印刷するレコードの位置によって、各テキストボックスの可視/非可視の 'フラグと、次レコードへ進めるかどうかの設定を行います If pintRecord < pintRecordMAX Then blnVisible = True Me.NextRecord = True ElseIf pintRecord = pintRecordMAX Then blnVisible = True Me.NextRecord = False Else blnVisible = False Me.NextRecord = False End If Else '1ページ内の最後のレコードになったとき If pintRecord <= pintRecordMAX Then 'まだ印刷するレコードが残っているときはその行を印刷後、改ページします blnVisible = True Me!bpage.Visible = True Else '印刷するレコードがもうないときはその内容は印刷しません blnVisible = False End If End If 'フィールドと連結したテキストボックスの可視/非可視を設定します Me![品番].Visible = blnVisible Me![品名].Visible = blnVisible 'Me![寸法使用].Visible= blnvisible Me![数量].Visible = blnVisible Me![備考].Visible = blnVisible End Sub

  • Access VBA ラベル印刷開始位置の指定でエラー表示される

    Accessのレポートで、宛名ラベル印刷の印刷開始位置を選択できる ようにしたく、下記URLの通りにやってみたのですが、エラー表示がでます。 参考URL http://support.microsoft.com/default.aspx?scid=kb%3bja%3b879856 この通りにやってみると、エラーメッセージ「コンパイルエラー プロシージャ内では無効です」 と表示されてしまいます。 エラーにならないようにするには、どうしたらよいのでしょうか? 記述は下記になります。 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 恐れ入りますが、ご教示お願い致します。

  • マウスが触れるとテキストを表示し離れる非表示にする

    アクセスです。 フォームにラベルを設置して、 そのラベルにマウスが触れたらテキストボックスを表示させたいのです。 フォームのオープンイベントは Private Sub Form_Open(Cancel As Integer) Me.テキスト2.Visible = False End Sub になっています。 ラベルのマウスボタン解放時イベントで Private Sub ラベル0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にして、ラベルをクリックするとテキストボックスが表示されます。 マウスボタン移動時イベントで Private Sub ラベル0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にすると、理想通りラベルからマウスが触れたらテキストボックスが表示されます。 ここまではいいのですが マウスのカーソルが離れたら またテキストボックスを非表示にしたいのですがどうすればいいですか?

  • エクセル2000VBAでオブジェクトの指定

    エクセル2000VBAでオブジェクトの指定 ワークシート上にボタン、チェックボックス、コンボボックス等のコントロールがあります。(OLEオブジェクトではありません、フォームのオブジェクトです。) そして、それらのすべてが表示されているわけではなく、中にはVisible=False で非表示にされているものもあります。 またフォーム以外にもワードアート、ピクチャー等のオブジェクトも配置されています。 このうち、現在表示されているボタン、チェックボックス、コンボボックス等のコントロールだけを非表示にし、その後再度表示させたいのです。(最初から非表示のものは表示させない) 一応、以下のようなVBAコードで目的は達成されます。 Sub TEST01()   Dim ob As Object   Dim buf As Boolean, myAry As Variant   With ActiveSheet        Application.ScreenUpdating = False '画面更新停止     For Each ob In .DrawingObjects 'Shapesではダメ       If ob.Visible = True Then '可視なら         Select Case TypeName(ob) '以下に該当すれば選択           Case "Button": ob.Select (False)           Case "CheckBox": ob.Select (False)           Case "DropDown": ob.Select (False)           Case "Spinner": ob.Select (False)         End Select       End If     Next ob          If TypeName(Selection) <> "Range" Then '対象があれば       buf = True       Set myAry = Selection       .Range("A1").Select       myAry.Visible = False '非表示に     End If     Application.ScreenUpdating = True '画面更新停止解除          If buf Then       MsgBox "非表示にしました。"       myAry.Visible = True '表示       MsgBox "再度表示しました。"       Set varAry = Nothing     Else       MsgBox "非表示にする対象はありません。"     End If        End With End Sub 質問は2つですが、どちらかへの回答でもかまいません。 1.上記コードでは対象のオブジェクトをSelectしてから Set myAry = Selection で変数を定義しましたが、いちいちSelectしなくともよい方法を知りたいのです。 多分、対象のオブジェクトを配列に取り込めばいいのでしょうが、やり方がわかりません。 2.上記コードではいちいち Case "Button" Case "CheckBox" などと、コントロールの種類を列記していますが、これを列記しないでもコントロールだと識別する方法はないのでしょうか? お知恵をお貸しください。

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

  • エクセル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

  • VBA チェックした項目以外を非表示

    現在下記のようなコードがあります。 C列に項目が入力されており そのC列に入力されている項目と同じ文字が ユーザーフォームのチェックボックスのキャプションになっています。 今回やりたいのはチェックボックスにチェックした項目以外を 非表示にしたいというものですが 現状は、1つだけのチェックなら正常に機能します。 2つ以上チェックしてしまうとオブジェクト名が大きい方が優先されて しまい1つだけの項目しか表示されません。 どのようにコードを書き換えればよろしいでしょうか? Private Sub CommandButton1_Click() Dim i As Integer Dim d As Date Dim y As Date Dim myMSG As String Dim myFlg As Boolean Dim rng As Range Dim rng2 As Range myFlg = False For i = 1 To 14 If Me.Controls("CheckBox" & i).Value = True Then myMSG = Me.Controls("CheckBox" & i).Caption myFlg = True End If Next i If myFlg = False Then GoTo Label1 End If Set rng2 = Range("C:C").Find(what:=myMSG, lookat:=xlWhole) If rng2 Is Nothing Then MsgBox Me.ComboBox1 & "日に" & myMSG & "は使用していません。", vbInformation Exit Sub Else For x = 2 To Range("C65536").End(xlUp).Row If Range("C" & x).Value <> myMSG Then Rows(x & ":" & x).EntireRow.Hidden = True End If Next x End If End Sub