2017-06-01 69 views
1

我的vba代碼應該組織一張我剛剛從PDF上粘貼Excel的資產負債表。因此,像大多數資產負債表一樣,項目(資產/負債/等)的描述以及正在分析的年份的值。VBA:Invalid 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(...)'將在VB.Net工作,但不是VBA這是一個非常不同的事情。 'InStr()'是你如何搜索另一個字符串的方法。這可能是一種更有效的方法,但它不清楚你的最終目標是什麼。 –

+2

你也錯過了'結束如果'......如果...其他...結束如果' –

+0

thnx爲答案。我嘗試交換InStr()的Contains,但我仍然遇到同樣的錯誤。我的主要目標是在不同的並排單元格中分隔文本說明和數字結果。這將重複每一行。 – XisCafe

回答

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。我仍然有關於最後一行代碼的錯誤。 – XisCafe

+0

什麼是錯誤? – Tom

+0

編譯錯誤:未定義'Sub'或'Function'。 – XisCafe

0

有一些問題在這裏

  1. 沒有結束時,如果你的if語句
  2. 你的電池應該是range,如果你定義一個範圍像A1,細胞是1,1類型參考
  3. 使用ActiveCell是不好的形式,明確地定義它
  4. 使用Range("A1").Value更好,但也可憐的形式,完全定義它像workbooks("book1.xlsx").sheets("Sheet1").Range("A1").Value
  5. 你不能使用letters.function(類型的vba,我已經說明了instr(或在字符串),以顯示如何這可以工作到類似的效果。

我已經改變了你的代碼,以更好地說明這也許應該是什麼樣子:

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

像這樣使用'ActiveCell'完全有效,這取決於它如何被調用。 OP可能會鏈接到一個按鈕,在這種情況下,它會很好。 – Tom

相關問題