テンプレートシートを初めて実行するときに新しいシートにコピーするExcelドキュメントがあります。このテンプレートに続くシートは、新しく作成されたシートに追加されます。
コードのこのセクションのタイトルでエラーが発生しています:
_If Worksheets("User Configuration").Cells(9, 15).Value = 1 Then
Worksheets("Cable Cards Template").Range("A1:J33").Copy
With Worksheets("Cable Cards")
**.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues**
.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlFormats
End With
Worksheets("Cable Cards Template").Shapes("Picture 1").Copy
Worksheets("Cable Cards").Paste Cells(RangeStartRow, RangeStartColumn)
Call Sheets.FormatCableCardRows
End If
_
基本的にIf
ステートメントがtrue(セル= 1)の場合、特定のシートの範囲をコピーして、値と書式設定にPasteSpecial
を使用して指定された範囲で新しいシートに貼り付けます。 。それに続いて、「新しく作成された」シートの画像がテンプレートの左上のセルにコピーされ、サブルーチンが呼び出されて新しいシートの行をフォーマットします。
With Worksheets("Cable Cards")
ステートメントの後の最初の_.Range
_呼び出しでエラーが発生しています。 With
ステートメントを使用せずに、特殊貼り付けなどの代わりに値を直接コピーしようとしました。奇妙なことは、新しいシートが作成されたときに、これが最初に実行されることです。
_If (RangeStartRow = 1) Then
Worksheets.Add().Name = "Cable Cards" ' Create new sheet with given name only on first cable card
Columns(1).ColumnWidth = 9.43
Columns(6).ColumnWidth = 11
Columns(10).ColumnWidth = 9
Call FormatForA5Printing("Cable Cards", 71)
End If
_
しかし、2回目には、_Run Time Error 1004 'Application Defined or Object Defined Error'
_で完全に失敗します。私はどんな助けにも感謝します。
セルオブジェクトは完全修飾されていません。 cellsオブジェクトの前にDOT
を追加する必要があります。例えば
With Worksheets("Cable Cards")
.Range(.Cells(RangeStartRow, RangeStartColumn), _
.Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
同様に、すべてのCellsオブジェクトを完全に修飾します。
ソリューション#1:あなたの声明
_.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
_
適切なRange
を参照していません。代わりに、
_.Range(.Cells(RangeStartRow, RangeStartColumn), .Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
_
します(他の場合も同様です)。
ソリューション#2:セルを使用する前にWorksheets("Cable Cards")
をアクティブにします。
説明:Cells(RangeStartRow, RangeStartColumn)
(eg)はRange
を提供し、そのwouldは大丈夫です。このようにCells
がよく使用されるのはなぜですか。ただし、特定のオブジェクトには適用されないため、ActiveSheet
に適用されます。したがって、コードは.Range(rng1, rng2)
を使用しようとします。ここで_.Range
_は1つのWorksheet
オブジェクトのメソッドであり、_rng1
_と_rng2
_は異なるWorksheet
にあります。
これを明確にするためにできるチェックは2つあります。
Sub
を実行する前にWorksheets("Cable Cards")
をアクティブにすると、動作し始めます(これで、Range
sへの整形式の参照ができました)。投稿したコードの場合、_.Activate
_の直後に_With...
_を追加することが実際に解決策となりますが、別のRange
でWorksheet
を参照するときにコード内のどこかで同様の問題が発生する可能性があります。
Worksheets("Cable Cards")
以外のシートを使用して、エラーをスローする行にブレークポイントを設定し、Sub
を開始し、実行が中断したときにイミディエイトウィンドウに書き込みます。
Debug.Print Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
Debug.Print .Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
異なる結果を確認してください。
結論:指定されたオブジェクト(Cells
、Range
など)なしでWorksheet
またはRange
を使用することは、特にSheet
がアクティブであるかどうかがわからない限り、複数のSheet
で作業する場合は危険です。
「=」で始まる値を割り当てると、式の評価が開始され、私の場合、上記のエラー#1004が発生します。スペースを前に付けることは私にとって切符でした。