Ich bin totaler Anfänger für Visual Basic und versuchte, alle Werte einer bestimmten Spalte mit vielen zufälligen leeren Zellen zwischen ihnen zu einem anderen Blatt, in einer anderen Spalte ohne leere Zellen, nacheinander zu setzen . Ich habe den Befehl FormulaR1C1 verwendet, anstatt den Wert zu kopieren (weiß nicht, ob dies der intelligente Ansatz dafür ist).Fehler bei Verwendung von Offset
Beim Debuggen erscheint eine Meldung, dass es gibt und Fehler 424, wenn ich versuche, x1 eine Zeile nach unten, in der zweiten Else zu verschieben.
Der Code ist wie folgt:
Sub Copiar() ' ' Copiar Macro ' Dim x1, y1 As Object Set x1 = Sheets("Hoja1").Cells(1, "C") Set y1 = Sheets("Hoja2").Cells(3, "D") contador = 0 10 If x1 = "" Then x1 = x1.Offset(1, 0) contador = contador + 1 If contador < 20 Then GoTo 10 Else: GoTo 20 End If Else: y1.FormulaR1C1 = x1 x1 = x1.Offset(1, 0) y1 = y1.Offset(1, 0) contador = contador + 1 GoTo 10 End If 20 End Sub
Jede Hilfe würde geschätzt. Vielen Dank!!!
Ihre Variablendeklarationen entsprechen nicht Ihren Erwartungen. Sie können Ihren Fehler möglicherweise besser ermitteln, wenn Sie 'x1' als Typ' Object' (oder besser: 'Range') anstelle eines Typs' Variant' deklarieren, wie Sie ihn haben. (Da Sie keinen Typ für "x1" angeben, wird standardmäßig die Variante und nicht der Typ des letzten Elements in der Zeile verwendet). Sie sollten auch, nach einer guten Übung, zu 'Tools/Optionen' gehen und die Option 'Erzwingen' der Variablendeklaration auswählen. Dies wird "Option Explicit" oben in Ihrem Modul platzieren (und Sie sollten das in jedem Fall hinzufügen). –
FWIW - Ihr ursprüngliches Problem wird wahrscheinlich verursacht durch das Sagen von 'x1 = x1.Offset (1, 0)' (was dem Äquivalent von 'Sei x1 = x1.Offset (1, 0)') entspricht, aber die Objekte müssen gesetzt sein ', nicht' Let', also solltest du 'Set x1 = x1.Offset (1, 0)' sagen. – YowE3K