2016-11-11 12 views
2

これは私の最初の投稿です。問題を提示するための私のアプローチに関するフィードバックをお寄せください。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()を使用すると、マスターを参照する範囲を作成できません。

ご迷惑をおかけして申し訳ございません。

+0

'sheetMaster.Cells(targetRow、targetColumnの).PasteSpecial xlPasteValues'応答のための –

答えて

0

ちょうど行います

Range(sheetMaster.Cells(targetRow, targetColumn).PasteSpecial) xlPasteValues 

また、この問題のために、注意してください:

sheetMasterが実行時にActiveSheetない場合

sheetMaster.Cells(targetRow, targetColumn).PasteSpecial xlPasteValues 

エラーは、これで発生する可能性があります

残念ながら、私は値だけを必要とします。式と書式設定を引き継ぐことで、シート内の他の振る舞いが乱れることになります。

あなたは範囲の.Value配列として取得し、いずれかCopyまたはPaste/PasteSpecialメソッドを呼び出すことなく、他のシートに直接書き込むことができます。以下の答えは、1つのブックから別のブックへのコピー/貼り付けのいくつかの方法を示していますが、シート間の転送のために簡単に変更できます。

Copy from one workbook and paste into another

+0

感謝を試してみてください。わたしは "sheetMaster.Range(...")を試しましたが、それを拒否しました。別のシートのRangeで動作させたい場合、どうすればいいでしょうか? –

+0

もう1つ考えてみました。それは "Range(sm.Cells(x、y)、sm。セル(x、y) "は動作します(実際には、セル参照の重複した開始/終了セットを使用します)。 –

関連する問題