エクセルで所定のワークシートにデーターを自動で記入させようと
しています。
所定のワークシートが在るか無いか判断して、存在すれば、
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の使い方が不正ですと出るのですが、、、
どなたか宜しくお願いいたします。
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
で済む内容ですね。
ありがとうございます~
うごきました~。
指摘の変数なんですけど、自分も後でコード見直したりすると
この変数必要ないとか思ってしまうこと良くあるんですよ。
作るときに上手く整理できていないからなんでしょうね。
まだ、VBA勉強し始めたばかりなので、スマートにコードが
かけるよう頑張っていきます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VBA】PDF出力に任意のファイ...
-
エクセルでページごとにヘッダ...
-
エクセルで設定していないのに...
-
excel串刺し計算で合計値が表示...
-
エクセルVBAのコードについて ...
-
エクセルで、ハイパーリンクの...
-
MicrosoftのExcelのシートの合...
-
PowerPointの表内のカンマ
-
LINEのこの空白ってどんな意味...
-
エクセル 0:00 の時間をカウン...
-
Excelのテーブル上のセルの保護...
-
EXCELでタイトル行と一番下の行...
-
エクセルで行の一番上にセルに...
-
エクセルで「-3E+06」と...
-
従業員増減対応で当番種類の増...
-
EXCEL 連動したドロップダウン...
-
エクセルでセル内改行の1行目...
-
セル上に表示された見かけ上の...
-
エクセルの計算式でコンマを付...
-
【エクセル】入力規則のプルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VBA】PDF出力に任意のファイ...
-
エクセルのシートごとに連番を...
-
エクセルで設定していないのに...
-
エクセルでページごとにヘッダ...
-
excel串刺し計算で合計値が表示...
-
Excelマクロ パスワードを入力...
-
複数のEXCELシートの印刷順の指定
-
既存ワークシートにピボットテ...
-
エクセルで、ハイパーリンクの...
-
社内SEです。機種、ライセンス...
-
エクセルで個人成績グラフをつ...
-
【VBA】#N/Aを無視して串刺し...
-
Access2010 Excelのエクスポー...
-
エクセルのイベントVBAを複数の...
-
この記号、手短(テミジカ)に日本語...
-
[EXCEL] あるフィールドをキー...
-
エクセル VBAでシートのコピー...
-
Excel 一覧表から特定の数値を...
-
excelのシート番号を取得したい...
-
マクロ記録機能を使ってグラフ...
おすすめ情報