これは私の最初の投稿です。問題を提示するための私のアプローチに関するフィードバックをお寄せください。VBA:別のシートのRangeを参照できません
(最終的に)あるシート(「サンドボックス」)から別のシート(「マスター」)までの範囲をコピーすると思われるサブを構築しています。手順は次のとおり
- マッチングマスター行を見つけるか、または新しいエンド行として追加するかどうかを決定する、サンドボックスの行を選択行
- ループを識別するマスター に
- コピー値のみ選択した各サンドボックス行から適切なマスター行へ
このエラーは、PasteSpecial関数の範囲を設定する際に表示されます。その行は一貫して、メッセージを "オブジェクト '_Global' の1004(メソッド 'range' に失敗しました" 与え
ここでは、コードです:。
Sub UpdateMaster()
Dim currentSelection As Range
Set currentSelection = Selection
Dim sheetSB As Worksheet
Set sheetSB = ThisWorkbook.Sheets("Sandbox")
Dim sheetMaster As Worksheet
Set sheetMaster = ThisWorkbook.Sheets("Master")
Dim lastTargetRow As Integer
lastTargetRow = sheetMaster.Range("IDRange").End(xlDown).Row + 1
Dim startingTargetColumn As Integer
startingTargetColumn = sheetMaster.Range("IDRange").Column
Dim thisID As String
Dim thisStatus As String
For Each thisrow In currentSelection.Rows
' Capture the current ID value
thisID = Cells(thisrow.Row, Range("IDRange").Column).Value
' Capture the current Status value
thisStatus = Cells(thisrow.Row, Range("NewRange").Column).Value
' If the row has no ID...
If thisID = "" Then
' ...do nothing
' If the row is flagged as new...
ElseIf thisStatus = "New" Then
'...identify the first blank row, and set all data columns to be copied
Range(Cells(thisrow.Row, Range("IDRange").Column), Cells(thisrow.Row, Range("LastSandboxColumn")).Column).Copy _
Destination:=sheetMaster.Range(lastTargetRow, startingTargetColumn)
' Increment the next available last row by 1
lastTargetRow = lastTargetRow + 1
Else
' Otherwise, find the corresponding row and set the non-ID columns to be copied
Dim sourceColumn1 As Integer, sourceColumn2 As Integer
Dim targetRow As Integer, targetColumn As Integer
Dim matchRow As Integer
sourceColumn1 = Range("IDRange").Column + 1
sourceColumn2 = Range("LastSandboxColumn").Column
targetRow = Application.WorksheetFunction.Match(thisID, sheetMaster.Range("IDRange"), 0)
targetColumn = startingTargetColumn + 1
Range(Cells(thisrow.Row, sourceColumn1), Cells(thisrow.Row, sourceColumn2)).Copy
Range(sheetMaster.Cells(targetRow, targetColumn)).PasteSpecial xlPasteValues
End If
Next
End Sub
エラーが最後の行に起こっている:
Range(sheetMaster.Cells(targetRow, targetColumn)).PasteSpecial xlPasteValues
不可解、次のように動作しているようです:
Range(Cells(thisrow.Row, sourceColumn1), Cells(thisrow.Row, sourceColumn2)).Copy _
Destination:=Range(sheetMaster.Cells(targetRow, targetColumn))
残念ながら、私は唯一の値が欲しいですs;式と書式設定を引き継ぐことで、シート内の他の振る舞いが乱れることになります。
私は多くのバリエーションを試しましたが、基本的には、Cells()を使用すると、マスターを参照する範囲を作成できません。
ご迷惑をおかけして申し訳ございません。
'sheetMaster.Cells(targetRow、targetColumnの).PasteSpecial xlPasteValues'応答のための –