2017-11-25 8 views
2

私は別のブックからの定義されたシートを結合し、それらを別のブックに保存するマクロを作成しようとしています。各ワークブックには同じ名前のMODELのシートが含まれています。このシートは、このコンボボックスは、以下のコードのようにワークシート名に関連付けられている、コンボボックスを有している:すべてのワークシートが1つのブックで一緒に合わせて変更されたときシート名が変更されたときにコードを動的に変更する方法は?

Sub ComboBox1_Change() 
Application.ScreenUpdating = False 
Select Case Sheets("MODEL").Range("code_plant") 
Case 1 
Sheets("MODEL").Range("price_zero").Copy _ 
Destination:=Sheets("MODEL").Range("price_on_view") 
End Select 
Application.ScreenUpdating = True 
End Sub 

問題が生じます。名前を変更した後に現在の(名前が変更された)シート名を参照する必要があるコンボボックスマクロを修正する必要があります。私は、次の関数を使用しようとしていたが、正しい方法で私のコードにどのようにインクルードされているのか分からない。

Function MySheet() 
Application.Volatile 
MySheet = Application.Caller.Worksheet.CodeName 
End Function 

ありがとうございます!

+0

コードは、コンボボックスを保持しているワークシートにあります。自動的に正しいシートに適用されますが、名前は必要ありません。 – QHarr

+0

ComboBox1.Parent.Nameコンボボックスを含むシートの名前を付ける場合は – QHarr

答えて

2

あなたComboBox1_Changeイベントは、ワークシートのモジュールで宣言されているので、あなたは、シートを参照するために、あなたのコードでMeキーワードを使用する必要があり、代わりにSheets("MODEL")と名前でシートを見つけます。

はこのように、各ソースシートに、あなたのイベントハンドラを変更し

Sub ComboBox1_Change() 
    Application.ScreenUpdating = False 
    Select Case Me.Range("code_plant") 
     Case 1 
      Me.Range("price_zero").Copy _ 
       Destination:=Me.Range("price_on_view") 
    End Select 
    Application.ScreenUpdating = True 
End Sub 
+0

が魅力的に機能します!助けてくれてありがとう –

1

あなたのコンボボックスは、同じシートにあるので、あなたはシート名を指定するか、またはそれを修飾するために何か他のものを使用する必要はありません。範囲はActivesheetComboBox1が存在するにあります)がSheets("MODEL")であるか、またはその新しい名前が何であるかを指します。

Sub ComboBox1_Change() 
    Application.ScreenUpdating = False 
    Select Case Range("code_plant") 
     Case 1: Range("price_zero").Copy Range("price_on_view") 
    End Select 
    Application.ScreenUpdating = True 
End Sub 
+0

通常、 'Range'はActiveSheetを参照しますが、ワークシートモジュールでは、シートのRangeプロパティを呼び出します。私はそれをより明示的にするために 'Me。 'を追加するだけです。 – ThunderFrame

+0

それは私が言いました。 1つは明示的にする必要はありません:) –

関連する問題