- ベストアンサー
エクセルVBA 処理の流れを制御したい
お世話になります。 <現状> シート“施設”の任意のセルを右クリックすると、他のシート(シート名“利用券”)に必要情報をコピーして、そのシートを印刷するようにしています。 <質問> 特定の対象者が選択されている場合は、シート“利用券”と同時に、もう一つのシート(シート名“申請書”)も印刷するようにしたいのです。 具体的には、シート“施設”のセルF2に、別シートのマクロにより選択した会員氏名がコピーされています。 その会員氏名が シート“特記事項”の 列B(セルB1はタイトル行ですが)に入力していた会員氏名と同一ならば、 シート“利用券” と シート“申請書” の両方を印刷し、そうでなく、 シート“特記事項” のB列に入力されていない人(こちらが大多数です)がセルF2に入力された場合は、 シート“利用券” のみを印刷したいのです。 参考書は、IFステートメントを使うようなことを示していますが、どうにも、うまくいきません。 すみませんが、教えていただけるでしょうか。 シート“施設”のシートモジュールには、複数のコードがあります。 Private Sub Worksheet_Change(ByVal Target As Range) Private Sub Worksheet_Activate() が最初に有り、印刷を制御しているのは下記のコードです。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim Msg Dim myRange As Range Dim LastClm As Integer (中略) End With Worksheets("利用券").PrintPreview 'テスト用印刷プレビュー End Sub この間に、ifを挟んで、 Worksheets("申請書").PrintPreview を入れればよいのだとは解説書でわかりましたが、どうにもうまくいきません。 どうか、お知恵を拝借させてください。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
いやはや、同じ過ちをしております。 引数、xlValuesの間違い。 以下が正しい、コードです。 '-------------------------------------------------------- Dim FindCell As Range Set FindCell = Sheets("特記事項").Columns("B").Find(Range("F2").Value, , xlValues, xlWhole) If Not FindCell Is Nothing Then Sheets("申請書").PrintPreview End If '---------------------------------------------------------- 以上。
その他の回答 (2)
- onlyrom
- ベストアンサー率59% (228/384)
またまた、こんにちは。 Wendy02さんが登場されてますので出る幕はないのですが、前のがありますので。。。 Worksheets("利用券").PrintPreview 'テスト用印刷プレビュー ●●●●ここに挿入 End Sub 上記●のところに以下をコピペしてみてください。 '------------------------------------------------- Dim FindCell As Range Set FindCell = Sheets("特記事項").Columns("B").Find(Range("F2").Value, , xlValue, xlWhole) If Not FindCell Is Nothing Then Sheets("申請書").PrintPreview End If '------------------------------------------------ ただ質問者は現在「10日で覚えるVBA」を読んでる段階ですから、 なるべく基本的なロジックを覚えるのが先だろうと考えます。 以下がそうです。 '------------------------------------------------- Dim R As Long For R = 2 To Sheets("特記事項").Range("B65536").End(xlUp).Row If Sheets("特記事項").Cells(R, "B").Value = Range("F2").Value Then Sheets("申請書").PrintPreview Exit For End If Next R '----------------------------------------------------- 以上です。
お礼
私のレベルに合わせて2通りも教えていただいて、ありがとうございました。 たずねてばかりで申し訳ありません。 VBA辞典も購入しましたので、よく勉強しようと思います。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私としては、以下のような書き方は、私の本来の趣旨に合わないのですが、このようにすれば、簡単に出来ます。なお、必要に応じて、シート名の特定化をしたほうがよいと思います。 Dim Ret As Variant '変数は、Variant のみ '・ '・ '・ Ret = Application.Match(Range("F2"), Columns(2), 0) If Not IsError(Ret) Then Worksheets("申請書").PrintPreview End If
お礼
いつも、お力添えいただき、ありがとうございます。 >Dim Ret As Variant '変数は、Variant のみ と、いただいたのですが、この部分が良くわかりません。ですが、いつも頼ってばかりでは進歩しませんので、よくよく考えてみたいと思います。 ありがとうございました。
お礼
思い通りに作動しました。 これで、窓口対応において、臨時の者が窓口に出ても、トラブルを減らせると思います。 ありがとうございました。