2016-05-19 13 views
0
Sub CopyEstabelec() 

    Dim v As String 
    Dim b As String 
    Dim i As Long 

    i = 10 

    For i = 10 To 1619 
     v = Range("A" & i).Value 
     If v = "Estabelecimento:" Then 
      b = Range("B" & i).Value 
      Range("AA" & i).Value = b 
     End If 
    Next i 

End Sub 

Kann mir jemand helfen, den Grund herauszufinden, warum der Code nicht funktioniert? Es meldet, dass die "Typen" nicht kompatibel sind. Was ich versuche ist, den Wert im Bereich ("B" & i) in den Bereich ("AA" & i) zu kopieren, wenn der Bereich ("A" & i) gleich "Estabelecimento:" ist.Debugging für Vba

+0

Erstens, um den Auftrag überspringen 'b' zusammen. Tun Sie einfach: 'Bereich (" AA "& i) .Wert = Bereich (" B "& i) .Wert". Zweitens, gehen Sie durch den Code, indem Sie 'F8' drücken, um Zeile für Zeile zu laufen und genau zu sehen, welche Zeile den Fehler auslöst. – Tim

+0

Sie können dies auch mit einer Formel in Excel tun. '= IF (A1 =" Estabelecimento: ", AA1 = B1," ")' – newguy

Antwort

0

Try this:

Sub CopyEstabelec() 

Dim v As String 
Dim i As Long 

For i = 10 To 1619 
v = TRIM(Range("A" & i).Value) 
    If v = "Estabelecimento:" Then 
    Range("AA" & i) = Range("B" & i) 
    End If 
Next i 

End Sub 
+0

'.text' ist möglicherweise keine gute Wahl, abhängig von den Daten in den Zellen. '.Text' enthält nur die * angezeigten * Daten, nicht den gesamten Inhalt der Zelle. Wenn also die Zelle die Daten "ABCDEFGH I ..." enthält, aber die Zelle nur breit genug ist, um "ABCD" anzuzeigen, dann enthält die '.Text' -Eigenschaft" ABCD ", während die' .Value -Eigenschaft alle Zellen enthält Text. – Tim

0

aus dem Code würde ich nicht sagen, warum es diesen Fehler zu werfen: "Typen" sind nicht kompatibel.

möchten Sie vielleicht einige Informationen hinzufügen und/oder zeigen Sie Daten, die zu diesem Fehler führen.

Ich würde auch vorschlagen, Tim's Ratschlag zu folgen: Schritt durch Code und Abfrage Variablenstatus. meist können Sie in dem Direkt-Fenster eingeben möchten:

?Range("A" & i).Parent.Name, Range("A" & i).Address, Range("A" & i).Value 

?Range("B" & i).Parent.Name, Range("B" & i).Address, Range("B" & i).Value 

zu sehen, wo Sie tatsächlich sind (Arbeitsblatt-Adresse) mit dem, was Wert


während als Beitrag zum Code Bitte beachten Sie folgendes:

Verwenden Sie SpecialCells() Methode von Range Objekt, um nur relevante Zellen durchzuschleifen - in diesem Fall: Zellen mit einem " Konstante“(d.h .: resultierenden nicht von Formeln) Textwert

Option Explicit 

Sub CopyEstabelec() 
    Dim cell As Range 
    For Each cell In Range("A10:A1619").SpecialCells(xlCellTypeConstants, xlTextValues) 
     If cell.Value = "Estabelecimento:" Then cell.Offset(, 26).Value = cell.Offset(, 1).Value 
    Next cell 
End Sub 

oder die gleiche, aber mit einem Formel-Ansatz:

Sub CopyEstabelec() 
    With Range("A10:A1619").SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 26) 
     .FormulaR1C1 = "=IF(RC1=""Estabelecimento:"", RC2,"""")" 
     .Value = .Value '<~~ to keep values instead of formulas 
    End With 
End Sub 
+0

@RafaelFM: Bist du durchgekommen? – user3598756