2016-12-02 17 views
1

次のコードを実行すると 'Subscript Out of Range'というエラーが表示されます。デバッグ私最後の行に私を指します:実行時エラー '9' VBA

Dim SrcBook As Workbook 
Dim TrgBook As Workbook 
Dim SrcSheet As Worksheet 
Dim TrgSheet As Worksheet 
Dim Sheet_Name As String 

Workbooks.Open (CalendarFile) 
Sheet_Name = MonthName(Month(SrcSheet.Cells(SrcRow, "D").Value), False) 
MsgBox ("Sheet_Name Value is: " & Sheet_Name) 
Set TrgSheet = Workbooks(CalendarFile).Worksheets(Sheet_Name) 

私は繰り返しCalendarFileが有効なファイル名であることを確認しました(私はフルパスファイル名を使用しています)。 Sheet_Nameは、そのブックのシートの有効な名前です。 [Workbooks(CalendarFile).Worksheets(11)vs Workbooks(CalendarFile).Worksheets(11月)]を使用してワークシートにアクセスしようとすると、同様のエラーが発生します。 MsgBox呼び出しは、WorkSheets()メソッドに適切なシート名を渡していることを確認します。

最後に、ScrRowが適切に定義されています - このワークブックでは、このコードを使用して、おもちゃ/テストアプリケーションから呼び出されたマクロと同じワークブックを操作できますが、何らかの理由で操作しようとすると失敗します。他の(開いている)ワークブックのワークシートを対象とする。

ご協力いただければ幸いです!ありがとうございました!

+0

Sheet_Nameは文字列ではなく「範囲」でなければなりません。 – Niclas

+0

@ニクラスなぜそれは範囲ですか? MonthNameは文字列を返します。 – Sorceri

答えて

1

CalendarFileが有効なファイル名の場合、それが問題です。 Workbooks()に必要なインデックスは、ファイルパスではなくWorkbook.Nameです。たとえば、CalendarFileC:\Foo\Bar.xlsxの場合、Bar.xlsxを使用する必要があります。上記の説明については

あなたが本当にがちょうどWorkbooks.Open戻り、ちょうどそれを使用することを参照つかむ必要があるので、それは本当に問題ではありません:

Set TrgBook = Workbooks.Open(CalendarFile) 
Sheet_Name = MonthName(Month(SrcSheet.Cells(SrcRow, "D").Value), False) 
MsgBox ("Sheet_Name Value is: " & Sheet_Name) 
Set TrgSheet = TrgBook.Worksheets(Sheet_Name) 
+0

ありがとうございました!私は実際にあなたの投稿を見逃し、エラーを見つけるために私のMsgBox記載事項をさらに微調整した後でこれを発見しました - ワークシートを開くこと自体がエラーで、ワークシートのインデックスを作成していないことがわかりました。それにもかかわらず、私はあなたが私の背中を持ってうれしいです。 – kapowpow

+0

@kapowpow - テイクアウェイは 'Open 'が返す参照を' Workbook'で集めるだけでよいはずです。このような状況では、 'Workbooks()'を使用する必要はありません。 – Comintern

+0

そして、構文の提案をありがとう - 私はそれを実装しました。私は元々その方法を設定していましたが、後で変更しました。なぜなら、私が構築しているマクロは決して機能的ではなかったからで、なぜそれを理解しようとしていたからです。私はそれを元に戻す。 – kapowpow

0

は、少なくとも、解決策を見つけたがこの問題へ:

Workbooks.Open (CalendarFile) 

は、開くファイルのフルパス名が必要ですが、ファイルへのさらなる参照は、ファイル名だけを必要 - と添付されているパスのいずれかを取り出します。つまり、

Workbooks(file_name_without_path.xlsx).Worksheets(Sheet_Name) 

これは非常に迷惑で、修正する必要があります。

+1

「ワークブック」は*オープン*ワークブックのコレクションです。クローズドファイルでは機能しません。開くを使用してアイテムをコレクションに追加します。これはそのまま動作します---修正するものはありません。 – xidgel