• ベストアンサー

エクセル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  を入れればよいのだとは解説書でわかりましたが、どうにもうまくいきません。  どうか、お知恵を拝借させてください。  よろしくお願いいたします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.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 '---------------------------------------------------------- 以上。

saitama090
質問者

お礼

思い通りに作動しました。 これで、窓口対応において、臨時の者が窓口に出ても、トラブルを減らせると思います。 ありがとうございました。

その他の回答 (2)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

またまた、こんにちは。 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 '----------------------------------------------------- 以上です。  

saitama090
質問者

お礼

私のレベルに合わせて2通りも教えていただいて、ありがとうございました。 たずねてばかりで申し訳ありません。 VBA辞典も購入しましたので、よく勉強しようと思います。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 私としては、以下のような書き方は、私の本来の趣旨に合わないのですが、このようにすれば、簡単に出来ます。なお、必要に応じて、シート名の特定化をしたほうがよいと思います。 Dim Ret As Variant '変数は、Variant のみ '・ '・ '・ Ret = Application.Match(Range("F2"), Columns(2), 0) If Not IsError(Ret) Then   Worksheets("申請書").PrintPreview End If

saitama090
質問者

お礼

いつも、お力添えいただき、ありがとうございます。 >Dim Ret As Variant '変数は、Variant のみ と、いただいたのですが、この部分が良くわかりません。ですが、いつも頼ってばかりでは進歩しませんので、よくよく考えてみたいと思います。 ありがとうございました。

関連するQ&A

専門家に質問してみよう