2016-08-11 5 views
2

を発行します。VBAコピー可視セルのみが、私は私のコードを実行しようとしているが、私は前に似た構文を使用しているが、それは私に</p> <blockquote> <p>エラー1004</p> </blockquote> <p>を与える

マイゴール:目に見えるセルは、最初の行に「MTD」が含まれている列からコピーします。コピーしたい可視セルは、75から139までの行だけです。

'searching for column with "MTD" in it 
Dim NumCol As Integer 
Dim Column As Integer 

Column = Workbooks("xx.xlsx").Sheets("Sheet1").UsedRange.Columns.Count 
For i = 1 To Column 
    If Workbooks("xx.xlsx").Sheets("Sheet1").Cells(1, i).Value = "MTD" Then NumCol= i 
Next i 

'copying visible cells only from Column with MTD and only in rows from 75 to 139 
Dim MyRange As Range 

'Line below is the debugged line 
Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Cells(75, NumCol), Cells(139, NumCol)) 
MyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks ("xy.xlsx").Sheets("Sheet2").Range("A2") 

これも使用しようとしましたが、424エラーが表示されました。

Dim MyRange As Range 

Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Workbooks("xx.xlsx").Sheets("Sheet1").Cells(75, NumCol), Workbooks("xx.xlsx").Sheets("Sheet1").Cells(139, NumCol)) 

'This time it debugged this row (error 424) 
MyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks("xy.xlsx").Sheets("Sheet2").Range("A2") 

助けてください。

ありがとうございました:)

+1

おそらく、1004エラーは 'NumCol'に起因する可能性があります。シート( "Sheet1")。セル(1、i).Value = "MTD" 'がforループで決して満たされない場合、' NumCol'は0になります。次の行では、コードが0列目を指しているため、エラーが発生する可能性があります。 – Siva

+0

'MyRange'を削除して、' Columns(NumCol).SpecialCells(xlCellTypeVisible).Copy'を使用してみてください。それが動作するかどうか私に教えてください。 –

+0

@シヴァ私はMsgBoxをループの後に置いて、それが問題かどうかを調べようとしましたが、それは正しいものを見つけました。 – blau

答えて

1

私はそれが正常に動作すべきだと思う。このラインに

Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Cells(75, NumCol), Cells(139, NumCol)).SpecialCells(xlCellTypeVisible) 
MyRange.Copy Destination:=Workbooks ("xy.xlsx").Sheets("Sheet2").Range("A2") 

Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Cells(75, NumCol), Cells(139, NumCol)) 
MyRange.SpecialCells(xlCellTypeVisible).Copy Destination:=Workbooks ("xy.xlsx").Sheets("Sheet2").Range("A2") 

を変更してください。

+1

これはありがとうございました:) – blau

1

RangeオブジェクトがActiveWorksheet以外のワークシート上に存在する場合、それはセル参照もそのワークシートに修飾する必要があります。

Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Cells(75, NumCol), Cells(139, NumCol))

問題を解決shoudするためのパラメータとして​​を渡す:

Sheet1.Range(Sheet1.Cells(1,1),Sheet1.Cells(1,10))

これは、完全修飾参照ではありません。

Set MyRange = Workbooks("xx.xlsx").Sheets("Sheet1").Range(Cells(75, NumCol).Address, Cells(139, NumCol).Address)

Sub Example() 
    Dim NumCol As Integer 
    Dim Column As Integer 

    With Workbooks("xx.xlsx").Sheets("Sheet1") 
     On Error Resume Next 
     NumCol = WorksheetFunction.Match("MTD", Rows(1), 0) 
     If Err.Number <> 0 Then 
      MsgBox "Unable to locate MTD", vbCritical 
     End If 
     On Error GoTo 0 
     'copying visible cells only from Column with MTD and only in rows from 75 to 139 
     Dim MyRange As Range 

     On Error Resume Next 
     Set MyRange = .Sheets("Sheet1").Range(.Cells(75, NumCol), .Cells(139, NumCol)).SpecialCells(xlCellTypeVisible) 
     If Err.Number <> 0 Then 
      MsgBox "No cells were found", vbCritical 
     End If 
     On Error GoTo 0 

     If Not MyRange Is Nothing Then 

      MyRange.Copy Destination:=Workbooks("xy.xlsx").Sheets("Sheet2").Range("A2") 

     End If 
    End With 
End Sub 
関連する問題

 関連する問題