
No.2ベストアンサー
- 回答日時:
かなり遠回りな方法になりますが、
まず標準モジュールにシート名を取得するユーザー定義関数を作ります。
Function Sheetname(ByVal Target As Range) As String
Application.Volatile
Sheetname = Target.Parent.Name
End Function
そして、対象とするワークシートのどこかのセルに
=Sheetname(A1)
などと式を入れて、シート名を表示させます。
ツール→オプションで計算方法を自動にしておきます。
こうしておくと、シート名を変更したときにWorksheet_Calculateイベント、Workbook_SheetCalculateイベントが発生しますので、それを拾って処理します。
Private Sub Worksheet_Calculate()
'イベントの発生がシート名の変更によるものかどうかを確認
'必要な処理を行う
End Sub
回答ありがとうございます。
回答のようにしてみたのですが、どうもうまく動きません。
少し質問しますが、よろしければ回答お願いします。
ユーザー定義関数「Sheetname」は動いて、シート名を変更するつど、セルにシート名が表示されるのですが、ワークシートが再計算されているように認識されないようなのです。
なので、
>Private Sub Worksheet_Calculate()
> 'イベントの発生がシート名の変更によるものかどうかを確認
> '必要な処理を行う
>End Sub
が、起動しません。
「'必要な処理を行う」の所にコマンドボタン「マクロの実行」で動くマクロをそのまま記述しているのですが、是がいけないのでしょうか?
No.8
- 回答日時:
こんにちは。
上で似たような質問に下記のように回答しましたので
ここでも同じ回答を載せます。
今回のコードでシート名の変更を捕らえたければ
Calculateイベントではなく、ユーザー定義関数そのものでやったらどうですか。
ユーザー定義関数は、No2.ShtWataさんのを利用しているみたいなのでそのまま利用させてもらいます。
間違いなくする為に、新しいブックで以下のコードをテストしてください。
簡単の為に、"sheet1"だけの変更に対応。
---------------------------------------------
(標準モジュール)
Public OldName As String 'パブリック変数
Function Sheetname(ByVal Target As Range) As String
Application.Volatile
Sheetname = Target.Parent.Name
If OldName = "" Then
OldName = Sheetname
End If
If OldName <> Sheetname Then
MsgBox OldName & "が " & Sheetname & " に変更されました"
OldName = Sheetname
End If
End Function
---------------------------------------------
コードを書いたあと、Sheet1のどこかに、=sheetname(A1) を入れておく
ようは、以前のシート名を保持しておき
ユーザー定義関数が再計算されるとき比較するだけです。
もちろん、Calculateイベントで同様のことをしてもOKですよね。
何回も言うようですが、このサンプルは、シート1つだけに対応です。
全てのシートに対応したい場合は、ちょっと考えてみてください。
以上です。
No.7
- 回答日時:
No.2です。
補足への回答です。(1)書き忘れましたが、Private Sub Worksheet_Calculate()は、標準モジュールのほうではなくて、Sheet1等の対象とするシートのモジュールに記述してください。また、
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
でもよいのですが、この場合はThisWorkbookのモジュールに記述してください。(Shという変数は、再計算が発生したシートを示します)
(2)計算方法が自動になっていることを確認してください。シート名を変更すると表示が変更になるとのことなのでこちらはOKだと思いますが。
丁寧な回答ありがとうございます。
教えていただいたように、標準モジュールにユーザー定義関数を、ThisWorkbookにとりあえず
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox ActiveSheet.Name
End Sub
としてみて、シート名を変更してもメッセージボックスは表示されず、ワークシート内のセルを変更するとメッセージボックスが表示されます。
重ね重ね申し訳ないのですが、気が向きましたら回答お願いします。
No.6
- 回答日時:
No4さんの指摘たしかにそうですね。
質問を少し勘違いしていますたが、No5を少し変更すれば可能だとおもいます。
回答ありがとうございます。
No.5で頂いた回答のようにしてみたのですが、quit123さんのおっしゃるように、一度他のシートをアクティブにした後、目的のシートをアクティブにすると、マクロが走るようなのです。
>No5を少し変更すれば可能
とありますが、どのように変更すればいいのか、よろしければお教え願いますか?
No.5
- 回答日時:
Module1に
↓
Public ShNa(1 To 10)
だけ
ThisBookに
↓
Sub Workbook_Open()
For Each myWB In Workbooks
For i = 1 To myWB.Sheets.Count
ShNa(i) = Worksheets(i).Name
Next i
Next
End Sub
Sub Workbook_SheetActivate(ByVal Sh As Object)
If Worksheets(Sh.Index).Name <> ShNa(Sh.Index) Then
MsgBox "" ’実際はCall文
End If
End Sub
こんな感じでいけると思いますよ。
No.4
- 回答日時:
No.3のWWolfさんへ
シート名の変更はシートがアクティブになった後でしか出来ないのでは?
で、シート名変更後、他のシートをアクティブにし、その後、シート名を変更したシートを再度アクティブにすれば、回答の方法でも出来ると思いますが、それでは質問者の要望とは違いますよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Visual Basic(VBA) エクセルVBA 4 2022/05/14 00:51
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 3つのエクセルをそれぞれのシートのセルに反映させたいときはどうしたらいいでしょうか? 例えば①シート 4 2023/04/25 20:13
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
- Excel(エクセル) エクセルで保存時に全部のシートの最終行をコピーして数値で貼り付けたい 3 2023/08/14 15:49
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
このQ&Aを見た人はこんなQ&Aも見ています
-
特定のシートの削除を禁止したい(ブックの保護でなく)
Excel(エクセル)
-
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
-
4
VBAでブック保護非保護を判定するには?
Excel(エクセル)
-
5
VBA たまに変数がempty値になるエラー
Excel(エクセル)
-
6
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
7
Calculateイベントでセルを指定したい
Word(ワード)
-
8
【VBA】特定シート 名前編集・削除を禁止したい
Excel(エクセル)
-
9
エクセルのグラフのデータ系列の順序をVBAで変更する
Excel(エクセル)
-
10
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
11
シート名を変更してもVBAに影響がないようにしたい
Excel(エクセル)
-
12
VBA Excelのシート名が変更された場合のコピペについて
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのファイルサイズが急...
-
【ExcelVBA】マクロの入ったシ...
-
エクセル、特定のシートにパス...
-
エクセルの複数シートでのリン...
-
エクセルの2つのシートを並び...
-
Accessのテーブルを既存のExcel...
-
ワークシートそのものの色を変...
-
Excelでマクロ設定したが反映さ...
-
エクセルのシー名を二段表示に...
-
特定のシート名のシートのみ除...
-
Wordで差し込み印刷時に表示す...
-
エクセルで複数のシートに画像...
-
アクセスからエクセルのシート...
-
エクセルで、シートの名前を変...
-
エクセルのシート連番の振り直し
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
ハイパーリンクでジャンプした...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルで複数のシートに画像...
-
確定申告用の医療費集計フォー...
-
エクセルのシー名を二段表示に...
-
EXCELの図形(テキストボックス)...
-
エクセル、特定のシートにパス...
-
Wordで差し込み印刷時に表示す...
-
ワークシートそのものの色を変...
-
Accessのテーブルを既存のExcel...
-
EXCELで存在しないシート...
-
エクセルの複数シートでのリン...
-
エクセルのファイルサイズが急...
-
エクセルの2つのシートを並び...
-
エクセルのシート連番の振り直し
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
おすすめ情報