2016-07-08 21 views
1

Mein Programm ist in dieser Zeile mit einem "Type Mismatch" -Fehler. Ich versuche, eine Reihe von Zellen auf ein neues Blatt zu kopieren. Ich habe die Abmessungen der alten und neuen Bereiche überprüft und sie sind gleich, das ist also nicht das Problem.Typ Mismatch: Excel VBA

CSht.Range(CSht.Cells(2, 1), CSht.Cells(LstRow2, LstCol2)).Copy Destination:=Sheets(WS_New).Range(WS_New.Cells(1, 1), WS_New.Cells(LstRow2 - 1, LstCol2)) 
+0

http://stackoverflow.com/questions/12527725/how-to-create-a-range-from-2-range-in-vba –

Antwort

3

Probieren Sie es wie

With csht 
    .Range(.Cells(2, 1), .Cells(LstRow2, LstCol2)).Copy _ 
     Destination:=WS_New.Range(WS_New.Cells(1, 1), WS_New.Cells(LstRow2 - 1, LstCol2)) 
End With 

Im Ziel, Sie beide Sheets(WS_New).Range hatte und WS_New.Cells. Es ist das eine oder andere; Entweder WS_New ist der Name des Arbeitsblatts als Zeichenfolge oder das Arbeitsblatt als ein Objekt, kein Mashup der Methoden.

BTW, Sie brauchen wirklich nur die obere linke Zelle für eine Paste. Das könnte genauso gut gewesen,

With csht 
    .Range(.Cells(2, 1), .Cells(LstRow2, LstCol2)).Copy _ 
     Destination:=WS_New.Cells(1, 1) 
End With 
+0

Arbeitete wie ein Charme. Vielen Dank. Also, wenn WS_New in() ist, bezieht es sich darauf als String und WS_New.Cells ist das Objekt? – Liz

+0

Ja, wenn Sie 'WS_New = Worksheets (" Sheet1 ") festlegen, verwenden Sie den ersten wie' WS_NewCells'. Wenn Sie 'Dim WS_New als String: WS_New =" Sheet1 "' dann verwenden Sie den zweiten wie 'Sheets (WS_New) .Range'. – Jeeped

+0

'Sheets()' ist eine Referenz auf eine Sammlung aller Arbeitsblätter in 'ActiveWorkbook', so dass die Zahl oder der Name in der' WS_New' -Variablen einen davon auswählen soll.Verwenden Sie "Option Explicit" oben im Codemodul, um diese Art von Fehlern zu minimieren. –

1

auf einen Bereich von 2 Ranges zu machen: How to create a range from 2 ranges in VBA

CSht.Range(CSht.Cells(2, 1).address & ":" & CSht.Cells(LstRow2, LstCol2).address).Copy Destination:=Sheets(WS_New).Range(WS_New.Cells(1, 1).address & ":" & WS_New.Cells(LstRow2 - 1, LstCol2).address) 

Beachten Sie, dass Sheets (WS_New) funktioniert nur, wenn Sie eine Zeichenfolge namens WS_New haben. Ich denke, dass Sie Sheets ("WS_New") verwenden möchten, wenn WS_New der Name des Blattes ist.

Wenn Sie WS_New.Cells verwenden, verwenden Sie diesmal den Codenamen des Blattes.

Akzeptable Beispiele für ein Blatt namens WS_New Codenamen wsNewSheet.

Sheets("WS_New").Range("A1") 
Sheets("WS_New").Cells(1,1) 
wsNewSheet.Range("A1") 
wsNewSheet.Cells(1,1) 

enter image description here

In dem obigen Beispiel "Shell" ist der Name des Arbeitsblatts und "f_Shell" ist sein Codename.

1

Versuchen:

Destination:=Sheets(WS_New).Range(WS_New.Cells(1, 1).address, WS_New.Cells(LstRow2 - 1, LstCol2).address) 

Sie erhalten die „Typenkonflikt“, weil Excel die Adresse für Bereiche verwendet, nicht die Zeilen/Spalten-Format. Also, wenn Sie geben in

Destination:=Sheets(WS_New).Range(WS_New.Cells(1, 1), _ 
WS_New.Cells(LstRow2 - 1, LstCol2)) 

Excel erwartet, um zu sehen:

Destination:=Range("A1:B1") format 

durch die Notation von

Ändern
Destination:=Sheets(WS_new).range(Ws_new.Cells(1,1), Ws_new.cells. (lstRow2-1, lstCol2) 

zu

Destination:=Sheets(WS_New).Range(WS_New.Cells(1, 1).Address, _ 
WS_New.Cells(LstRow2 - 1, LstCol2).address) 

Sie Excel wird das Senden das Format, das erwartet wird. Die .address greift auf das ("A1: B1") Format zu, für das excel gilt.

+0

"Während dieser Codeblock die Frage beantworten könnte, wäre es am besten, wenn Sie eine kleine Erklärung dafür liefern könnten, warum dies der Fall ist." – RHA

Verwandte Themen