2番目の段落についてはわかりません。私の理解は、入力ワークシート上のセルB3を監視し、それが変更されたら、ワークシートReportのPageSetupのRightHeaderを調整して、入力ワークシート上のセルB18の内容を反映させることです。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("B3")) Is Nothing Then
ThisWorkbook.Worksheets("Report").PageSetup.RightHeader = "&28" & Me.Range("B18").Text
End If
End Sub
を...そして、あなたのWorksheet_SelectionChange
プロシージャを削除します。それが正しいなら、あなたは入力ワークシートの後ろに以下のコードを置くことができます。
考え方は、入力ワークシートの変更を監視し、そのB3セルに関係するものを処理することです。
理想的には、上のセルに名前を付けると、入力ワークシート上の行と列を追加または削除してもコードは引き続き機能します。 Define and use names in formulasを参照してください。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("MyMonitoredValue")) Is Nothing Then
ThisWorkbook.Worksheets("Report").PageSetup.RightHeader = "&28" & Me.Range("MyPageSetupValue").Text
End If
End Sub
...そして、あなたは心配することなく、入力ワークシートのレイアウトを再編成することができます:あなたはMyPageSetupValue
としてMyMonitoredValue
としてInputs!B3
とInputs!B18
を定義した場合、上記のコードはなるだろう。
最後に、Excelのようにタブ名でワークシートを参照するのではなく、VBAエディタの[プロパティ]ウィンドウのワークシートの[名前]ボックスにあるCodeNameを使用して、プロジェクトエクスプローラを表示するにはCtrl + Rキーを押し、Microsoft Excelオブジェクトノードの下にあるワークシートをクリックしてから、F4キーを押して[プロパティ]ウィンドウを表示します)。この値は変更できます。私は通常それをshtReportに変更します。しかし、コードの別のバージョンは、次のようになります。入力ワークシートの両方の報告書ワークシートのタブ名の変更、および再編成を耐えることができる
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Me.Range("MyMonitoredValue")) Is Nothing Then
shtReport.PageSetup.RightHeader = "&28" & Me.Range("MyPageSetupValue").Text
End If
End Sub
...。
ありがとう、これがすべて解決しました! – user8863469