2017-06-01 59 views
1

Mein VBA-Code sollte eine Bilanz erstellen Ich habe gerade Excel aus einem PDF eingefügt. Wie bei den meisten Bilanzen gibt es die Beschreibung des Postens (Aktiva/Verbindlichkeiten/etc) und die Werte aus den analysierten Jahren.VBA: Ungültiger Qualifier

Zuerst versuchte ich zu identifizieren, in welcher Position der Text endete. Also habe ich den folgenden Code geschrieben, der mir einen Fehler gibt (Ungültiger Qualifier).

Dim subjectCell As String 
Dim letters As String 
Dim index As Integer 

letters = "qwertyuiopasdfghjklçzxcvbnmQWERTYUIOPASDFGHJKLÇZXCVBNM " 
subjectCell = ActiveCell.Value 

For i = 0 To Len(subjectCell) - 1 

    If (letters.Contains(Mid(subjectCell, i + 1, 1))) Then 
    Else 
    index = i 
Next i 

Cell("A1").Value = index 
+1

'letters.Contains (...)' VBA funktionieren würde in VB.Net aber nicht, welche a sehr unterschiedliche Sache. Mit 'InStr()' würden Sie nach einer Zeichenfolge innerhalb einer anderen suchen. Es ist wahrscheinlich eine effizientere Möglichkeit, dies zu tun, aber es ist unklar, was Ihr ultimatives Ziel ist. –

+2

Sie verpassen auch das 'End If' ...' If ... Else ... End If' –

+0

Thnx für die Antwort. Ich habe versucht, die Contains für die InStr() zu tauschen, aber ich habe immer noch den gleichen Fehler. Mein Hauptziel ist es, die Textbeschreibung und die Anzahl der Ergebnisse in verschiedenen nebeneinander liegenden Zellen zu trennen. Dies würde sich für jede Zeile wiederholen. – XisCafe

Antwort

0
Sub test() 
    Dim subjectCell As String 
    Dim letters As String 
    Dim index As Integer 

    letters = "qwertyuiopasdfghjklçzxcvbnmQWERTYUIOPASDFGHJKLÇZXCVBNM " 
    subjectCell = ActiveCell.Value2 

    For i = 1 To Len(subjectCell) 
     If InStr(1, letters, Mid(subjectCell, i, 1), vbTextCompare) = 0 Then 
      index = i 
      Exit For 
     End If 
    Next i 
    Range("A1").Value2 = index 
End Sub 
+0

Thnx. Ich habe immer noch einen Fehler in Bezug auf die letzte Codezeile. – XisCafe

+0

Was ist der Fehler? – Tom

+0

Kompilierungsfehler: 'Sub' oder 'Function' nicht definiert. – XisCafe

0

Es gibt ein paar Probleme hier

  1. Kein Ende, wenn für Ihre if-Anweisung
  2. Ihre Zelle range sein soll, wenn Sie einen Bereich wie A1 sind definiert, sind Zellen für 1, 1 Typ Referenz
  3. Verwenden von ActiveCell ist schlechte Form, definieren Sie es explizit
  4. Verwenden Range("A1").Value ist besser, aber auch schlechte Form, definieren Sie es vollständig wie workbooks("book1.xlsx").sheets("Sheet1").Range("A1").Value
  5. Sie können den letters.function( Typ in VBA nicht verwenden, ich habe instr (oder in einer Zeichenfolge) dargestellt, um zu zeigen, wie dies zu einem ähnlichen Effekt funktionieren kann.

ich den Code geändert haben, besser zu veranschaulichen, was es vielleicht aussehen sollte:

Sub g() 
    Dim subjectCell As String 
    Dim letters As String 
    Dim index As Integer 

    letters = "qwertyuiopasdfghjklçzxcvbnmQWERTYUIOPASDFGHJKLÇZXCVBNM " 
    'subjectCell = ActiveCell.Value 
    subjectCell = "a" 
    For i = 0 To Len(subjectCell) - 1 

     If InStr(letters, subjectCell) > 0 Then 
      Debug.Print "Found it! It starts at position: " & InStr(letters, subjectCell) 
     Else 
      Debug.Print "No Match" 
      index = i 
     End If 
    Next i 

    Range("A1").Value = index 
End Sub 
+1

Die Verwendung von 'ActiveCell' ist, je nachdem, wie es aufgerufen wird, perfekt. OP könnte dies mit einem Button verknüpfen und in diesem Fall wäre das völlig in Ordnung. – Tom