プロが教えるわが家の防犯対策術!

シートモジュールで操作していた消去マクロについて
シートが増えてきたこともあり、標準モジュールに移行させようと考えています。

クリックしたボタンがあるアクティブシートのindexを使い、Select caseにて分岐させて
いるのですが、その際に表示されるメッセージについても、使い分けをしたいと
考えています。

例えば
シート2なら、「名前シートのデータを一括消去します」
シート4なら、「利用シートのデータを一括消去します」のようになります。

Sub cell_cr2()

Dim w As Long
Dim msg As String
Dim ms2 As String
Dim ms4 As String

w = ActiveSheet.Index

msg = ms & w

ms2 = "名前シートのデータを一括消去します。よろしいですか?"
ms4 = "利用シートのデータを一括消去します。よろしいですか?"


If MsgBox(msg, vbOKCancel) = vbOK Then

Select Case w

と続くのですが、Msgboxに代入したmsgが上記のms2やms4に置き換わらず、
文字としてのms2,ms4となってしまいます。
MsgBox("ms" & w, vbOKCancel) としても、同様です。

どのように修正すればよろしいでしょうか?

A 回答 (4件)

シート名をそのまま使えるのでしたら、「ActiveSheet.Name」を、


そうでないなら、「ActiveSheet.Index」をもとに配列からメッセージの文字列を取得するのがスマートだと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
こちらの方法が一番スマートかもしれませんね。
使わせていただきます。

お礼日時:2023/07/30 07:20

No.3です。

前回回答で

msg = Worksheets(w).Name & "のデータを一括消去します。よろしいですか?"

というコードを投稿しましたが、丁寧さを欠いていました。

ご質問者の表現をそのまま用いるなら

msg = Worksheets(w).Name & "シートのデータを一括消去します。よろしいですか?"

とすることになります。

但し、シート名に「○○シート」と入っていると、「○○シートシートのデータを・・・」となりますので注意が必要です。
    • good
    • 0

No.2さんのご指摘のとおり、Nameブロバティを使ってシート名を取得する方法が使えるなら、そちらがスマートだと思います。



Sub cell_cr2()

Dim w As Long
Dim msg As String

w = ActiveSheet.Index
msg = Worksheets(w).Name & "のデータを一括消去します。よろしいですか?"

If MsgBox(msg, vbOKCancel) = vbOK Then
Select Case w
'・・・・・・
End Select
End if
End Sub


で足りるのでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
構文の提示も助かりました。
No.2様が先にヒントを下さったので、そちらをベストアンサーと
させていただきます。

お礼日時:2023/07/30 07:21

以下のようにしてください。


XXXXシートは、シート2、シート4以外のケースです。
--------------------------------------
Sub cell_cr2()

Dim w As Long
Dim msg As String
Dim ms2 As String
Dim ms4 As String

w = ActiveSheet.Index

If w = 2 Then
msg = "名前シートのデータを一括消去します。よろしいですか?"
ElseIf w = 4 Then
msg = "利用シートのデータを一括消去します。よろしいですか?"
Else
msg = "XXXXシートのデータを一括消去します。よろしいですか?"
End If


If MsgBox(msg, vbOKCancel) = vbOK Then

End If
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
やはり分岐の分岐の方法になりますかね。
もう少しシンプルに考えたかったのですが…。

お礼日時:2023/07/30 07:19

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