2016-06-14 6 views
0

Ich habe derzeit einige Code, der Zellen nicht in der ersten Spalte findet und verschiebt sie. Ich habe ein Problem mit Zellen, die mit "=" beginnen. Können Sie sich an irgendwelche Lösungen erinnern, um dieses Problem zu lösen? Danke im Voraus.VBA: Zellen beginnend mit "=" verursacht Probleme in meinem Move-Makro

Sub Move() 

Dim cel As Range, rng As Range 
Dim wk As Worksheet 

Set wk = ActiveWorkbook.ActiveSheet 
Set rng = wk.UsedRange 

For Each cel In rng 
    If cel.Value <> "" And cel.Column <> 1 Then 
     wk.Cells(cel.Row, 1) = cel.Value 
     cel.Value = "" 
    End If 
Next cel 
End Sub 
+1

Mit "beginnend mit =" meinen Sie die Zellen Formeln haben? Wenn ja, möchtest du die Formeln verschieben oder nur die Werte? –

+0

'Ich stehe vor einem Problem 'ist keine gute Erklärung. Bitte erläutern Sie, mit welchem ​​Problem Sie konfrontiert sind. – GSerg

+0

Sie sind keine Formeln. Grundsätzlich ist es eine importierte SQL-Abfrage, und ich möchte alles in die erste Spalte verschieben, um sie zu analysieren. – Rob

Antwort

2

Entweder jedes Mal in Ihrer Für jede Schleife

If Cstr(cel.Value) <> "" And ... 'you need to do that for every cel.Value occurencies 

oder eine Variable zu Beginn erklären

Dim StringInCell as String 
For Each cel In rng 
StringInCell=Cstr(cel.Value) 
    If StringInCell... 

Sie .Text Eigenschaft versuchen können auch (obwohl ich nicht haben hatte Glück, das jemals zu benutzen, ich lieber CStr).
Dies kann auch funktionieren, wenn die analysierten Daten einen Ausnahmefehler oder etwas wirft:

... 
wk.Cells(cel.Row, 1).NumberFormat = "@" 
wk.Cells(cel.Row, 1) = Cstr(cel.Value) 'related to the option chosen from above 
+0

Ich bekomme einen Kompilierfehler: Erwartet: Bezeichner bei Verwendung der ersten Lösung. Irgendwelche Ideen? – Rob

+0

Überprüfen Sie meine aktualisierte Antwort – Sgdva

+0

Casting "Value" zu "String" tut nichts in diesem Zusammenhang. – GSerg

0

Wenn Sie Zellen haben, die mit =, beginnen aber als Formeln behandelt werden, nicht werden, sondern vielmehr als Text, dann mit Sgdva ‚s alternative Vorschlag:

Sub Move() 

Dim cel As Range, rng As Range 
Dim wk As Worksheet 

Set wk = ActiveWorkbook.ActiveSheet 
Set rng = wk.UsedRange 

For Each cel In rng 
    If cel.Text <> "" And cel.Column <> 1 Then 
     wk.Cells(cel.Row, 1) = cel.Text 
     cel.Value = "" 
    End If 
Next cel 
End Sub 

EDIT # 1:

Diese Version es zur Spalte "de-formularise" eine Zelle sollte bevor:

Sub Move2() 
    Dim cel As Range, rng As Range 
    Dim wk As Worksheet, s As String 

    Set wk = ActiveWorkbook.ActiveSheet 
    Set rng = wk.UsedRange 

    For Each cel In rng 
     s = cel.Text 
     If s <> "" And cel.Column <> 1 Then 
      wk.Cells(cel.Row, 1).Value = s 
      cel.Value = "" 
     End If 
    Next cel 
End Sub 
+0

Wenn es ein Problem mit '=' gibt, muss es beim Setzen des Wertes sein, nicht beim Lesen. Wenn die Zelle Text enthält, der mit '=' beginnt, der nicht als Formel behandelt wird, gibt '.Value' diesen Text unverändert zurück, ohne zu versuchen, ihn auszuwerten, so dass es keinen Sinn macht, '.Text' zu lesen. Wenn dieser Text dann jedoch dem '.Value' einer anderen Zelle zugewiesen wird, wird er als Formel verarbeitet, so dass' wk.Cells (cel.Row, 1) = cel.Text' immer noch Probleme verursachen sollte. – GSerg

+0

@GSerg Siehe, ob sich ** EDIT # 1 ** besser verhält. –

+0

Das ist genau der gleiche Code, der Compiler wandelt Ihren ersten Code in genau diesen Code um. Explizit Erwähnen von "Wert" hilft nicht, Excel wird versuchen, klug zu sein mit dem, was Sie ihm zuweisen. – GSerg

1

dieses

Versuchen
Sub Move() 

    Dim cel As Range, rng As Range 
    Dim wk As Worksheet 

    Set wk = ActiveWorkbook.ActiveSheet 
    Set rng = wk.UsedRange 

    For Each cel In rng 

     If cel.HasFormula Then 
      wk.Cells(cel.Row, 1).Formula = cel.Formula 
      cel.ClearContents 
     Else 
      If cel.Value <> "" And cel.Column <> 1 Then 
       With wk.Cells(cel.Row, 1) 
        .NumberFormat = "@" '<<edit: added formatting 
        .Value = cel.Value 
       End with 
       cel.Value = "" 
      End If 
     End If 
    Next cel 

End Sub 
+0

Ich bekomme einen "anwendungsdefinierten oder objektdefinierten Fehler" mit folgender Hervorhebung. wk.Cells (cel.Row, 1) = cel.Value – Rob

+0

Enthält eine dieser Zellen Fehler? Haben Sie verbundene Zellen? –

+0

@Tim Williams Ihr Code funktioniert gut für mich. Ergebnisse in der Bewegung der letzten Spalte des verwendeten Bereichs zu Spalte A. – skkakkar

Verwandte Themen