2016-08-11 2 views
2

Ich versuche, meinen Code auszuführen, aber es gibt mirVBA Kopieren sichtbare Zellen geben nur

Fehler 1004

Obwohl ich vor ähnliche Syntax verwendet habe.

Mein Ziel: Ich möchte sichtbare Zellen nur aus der Spalte kopieren, die "MTD" in seiner ersten Zeile enthält. Sichtbare Zellen, die ich kopieren möchte, befinden sich nur in Zeilen von 75 bis 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") 

Ich habe auch versucht, dies zu verwenden, aber 424 Fehler erschien.

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") 

Jede Hilfe würde geschätzt.

Danke :)

+1

Ich schätze, 1004 Fehler kann auf 'NumCol' zurückzuführen sein. Wenn die Bedingung 'If Workbooks (" xx.xlsx "). Sheets (" Sheet1 "). Zellen (1, i) .Value =" MTD "' ist nie in Ihrer for-Schleife erfüllt, dann wird "NumCol" 0 und In den nächsten Zeilen wird der Code auf die 0. Spalte zeigen und der Fehler kann auftreten. – Siva

+0

Versuchen Sie, den 'MyRange' zu ​​löschen und stattdessen' Columns (NumCol) .SpecialCells (xlCellTypeVisible) .Copy' zu verwenden. Lass mich wissen ob es funktioniert. –

+0

@Siva Ich habe versucht, MsgBox nach der Schleife zu setzen, um zu sehen, ob das das Problem ist, aber es hat das richtige gefunden. – blau

Antwort

1

Versuchen Sie diese Zeile

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") 

mit

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") 

denken zu ändern, die ich, dass gut funktionieren sollte.

+1

Dies funktionierte danke :) – blau

1

Wenn ein Range-Objekt auf einem Arbeitsblatt anders als die ActiveWorksheet existiert dann muss es Referenzen Zelle auch in diesem Arbeitsblatt qualifiziert werden. Diese

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

ist kein vollqualifizierter Referenz:

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

Vorbei an der Cells.Address als Parameter an shoud das Problem zu beheben.

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 
Verwandte Themen