• ベストアンサー

エクセルVBA ワークシート検索について?

エクセルで所定のワークシートにデーターを自動で記入させようと しています。 所定のワークシートが在るか無いか判断して、存在すれば、 VBAは記入動作を開始し、無ければ、VBAを終了させる。 こういった動きを作ろうとしていますが、存在しない場合に VBAを抜ける所が上手く作動しません。書き方に問題があると 思うのですが、どのような書き方がいいのか教えていただけない でしょうか。 コードの方は以下に示します Set ThisYearSheet1 = ActiveWorkbook.Worksheets("本年度基データ") With ThisYearSheet1 myYear = Mid(.Cells(1, 1), 3, 4) myMonth = Mid(.Cells(1, 1), 8, 2) End With mySheetName = CStr(myYear) & CStr(Format(myMonth, "00"))<<<<シートの名前仮取得 myMsg = "「" & mySheetName & "」" & vbCrLf & _ "のシートデーターを更新します。" & vbCrLf & _ "よろしいですか?" myButt = MsgBox(myMsg, vbYesNo) Select Case myButt Case vbYes For Each mySheet In Worksheets<<<<仮取得したシート名を探す If mySheet.Name = mySheetName Then Set ThisYearSheet2=ActiveWorkbook.Worksheets(mySheetName)<<<<仮取得したシート名が存在すれば、オブジェクトとしてセット Exit For Next mySheet Case vbNo Exit Sub End Select If ThisYearSheet2 = Nothing Then<<<エラー箇所(無ければ、VBAを終了させたい) MsgBox "" Exit Sub End If エラー箇所では、nothingの使い方が不正ですと出るのですが、、、 どなたか宜しくお願いいたします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

ループに入る前に初期化(※1)しておき、「=」ではなく「Is」で判定(※2)すれば良いと思います。 Set ThisYearSheet1 = ActiveWorkbook.Worksheets("本年度基データ") Set ThisYearSheet2 = Nothing '※1     ・     ・ If ThisYearSheet2 Is Nothing Then  '※2 '------ 余計な事ですが、あまり必要のない変数の多用はコードを煩雑にするような気がします、、、   myButt = MsgBox(myMsg, vbYesNo)   Select Case myButt        ・   End Select あたりは MsgBoxの返しを変数で受けて Case文で分岐などせずに   If MsgBox(myMsg, vbYesNo) <> vbYes Then Exit Sub で済む内容ですね。

tmgolf
質問者

お礼

ありがとうございます~ うごきました~。 指摘の変数なんですけど、自分も後でコード見直したりすると この変数必要ないとか思ってしまうこと良くあるんですよ。 作るときに上手く整理できていないからなんでしょうね。 まだ、VBA勉強し始めたばかりなので、スマートにコードが かけるよう頑張っていきます。 ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

If ThisYearSheet2 Is Nothing Then としてみてください。

tmgolf
質問者

お礼

ありがとうございます。 動きました。 たすかりました~

すると、全ての回答が全文表示されます。

関連するQ&A