dポイントプレゼントキャンペーン実施中!

エクセルで所定のワークシートにデーターを自動で記入させようと
しています。
所定のワークシートが在るか無いか判断して、存在すれば、
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の使い方が不正ですと出るのですが、、、
どなたか宜しくお願いいたします。

A 回答 (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

で済む内容ですね。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2007/08/18 12:42

If ThisYearSheet2 Is Nothing Then



としてみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/18 12:35

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