VBAは、このライン上に吹いている:
Set x = ThisWorkbook.Sheets("SelectedFiles").Range("B" & C)
C
の値が0で、0は有効な行番号ではありませんので - B0
ではありません有効範囲アドレス。だから、C = 1
で始めることができ、それはこのエラー修正でしょう。
Integer
(16ビット)の代わりにLong
整数(32ビット)を使用することを強くお勧めします(必要な行に関係なく)。 Integer
の最大値は32,767であり、ワークシートはそれよりも多くの行を持つことができます。
x
はVariant
として宣言されています。これは文字通りあなたがそれを作ることができる/何でもできることを意味します。
あなたはこれを行う場合:
x = ThisWorkbook.Sheets("SelectedFiles").Range("B" & C)
その後x
がRange
呼び出しによって参照セルの値が含まれます。
あなたはこれをしなかったしかし:
Set x = ThisWorkbook.Sheets("SelectedFiles").Range("B" & C)
これはx
はそれをセルの値を割り当てるので、代わりに、オブジェクト参照を含めるべきであるとVBAを指示し、あなたはセル自体を取得しています。
は、その後、あなたは次の操作を行います。これはコンパイルした場合
Option Explicit
が指定されていないため
Worlbooks.Open("x").Sheets(Sheet2).Range("A1:U1000").Copy
は、それだけです。 Worlbooks
はどこにも存在しない、それはタイプミスだ - しかし、Option Explicit
が指定されていないため、VBAは、あなたがそれらを宣言せずに変数を使用することができ、かつので喜んWorlbooks
をコンパイルして、時間を実行するための決議を延期...その時点別でエラーが表示されます。
これは、それを修正します:そのループの反復ごとに、あなたは(おそらく存在しない)"x"
という名前のブックを開くしよう:
Workbooks.Open("x").Sheets(Sheet2).Range("A1:U1000").Copy
それはループ内の...除き。"x"
がThisWorkbook.Sheets("SelectedFiles").Range("B" & C)
に含まれるファイル名であることを意味している場合、x
はString
変数として宣言しなければならない、とあなたはこのようにそれを参照します:
Dim source As Workbook
Set source = Workbooks.Open(x)
そして、あなたはとてもループ外のを行うだろうループが繰り返されるたびに同じブックを開こうとはしません。すでに開いているブックを開くとIIRCはもう1つのランタイムエラーをスローします。
各繰り返しで別のブック/ファイルを使用する必要がある場合は、各繰り返しでそのブックを閉じる必要があります。それ以外の場合は、12個のブックが開かれます。
だから、あなたはあなたと仕事をしたいワークブックオブジェクトへの参照を保持:あなた先本と同じ For C = 1 To 11
x = ThisWorkbook.Sheets("SelectedFiles").Range("B" & C).Value
Set source = Worlbooks.Open(x)
source.Sheets(Sheet2).Range("A1:U1000").Copy
'...
source.Close
Next
:
Set Z = Workbooks.Open("D:\PTP\MASTERDATA\SPACCHETTAMENTO FILE\TEMPLATE.Template.xlsx")
あなたは11回、同じファイルを開いています一度閉じることはできません。そして、あなたは、前の反復の仕事のたびに上書きし、11回を保存...その先ブック...
Z.Sheets("SPLIT TAB").Range("A1:U1000").PasteSpecial
にソース帳から貼り付けます。
ので、多くの深刻な問題のは、そのコードにあります。要約:
- 各モジュールの先頭に
Option Explicit
を指定します。
- 可能な限り、すべての変数を明示的な特定の型で宣言します。
- 自分で解決してください。
デバッガの使用方法を学びます。 F9は、実行を停止するブレークポイントを設定します。その時点から、一度にあなたのコード一つの命令を実行するためにF8を使用することができる上、あなたは現在の実行コンテキストに出力何に即時ペイン(はCtrl + G)を使用することができます。 ローカル toolwindowを使用して、現在のスコープがアクセスできるすべてのものを視覚化します。
'Z'はすでにワークブックで、ワークブックのラッパーを必要としない: –
だから、:' Z.SaveAsファイル名:[ツアー]を取るために時間がかかるしてください= "PROVA.xlsx" ' –
;) – R3uK