2014-11-08 154 views
0

我有一個遍歷每一行的For循環,我需要從D列中爲循環中要使用的每一行提取值。類型不匹配錯誤#13

我想通過使用計數器的值作爲行號來使用以下內容來拉取值。

X = Worksheets("Test").Cells(4, Counter).Value 

我不斷遇到Type mismatch error #13

+0

的d列和行號計數器是細胞(計數器,d) – 2014-11-09 19:20:44

回答

2

這是兩個情景我能想到的,當你將得到這個錯誤

A已經定義X爲特定的數據類型,但是被分配不同的鍵入它。例如。您已將X定義爲Long,但該單元格包含String。假設您的手機號碼是A1,它有excelSU。複製錯誤看到這個例子

Sub Sample() 
    Dim x As Long 
    x = ThisWorkbook.Sheets("Sheet1").Range("A1").Value 
End Sub 

同樣,你可以宣佈一個特定類型的Counter而利用不同的。例如

Sub Sample() 
    Dim counter As Excel.Application 

    For counter = 1 To 20 
     x = ThisWorkbook.Sheets("Sheet1").Range("A" & counter).Value 
    Next 
End Sub 

B讓我們再次採取細胞A1的例子。您的單元格有一個公式錯誤,如#N/A#DIV/0!或其他一些錯誤。複製錯誤使用相同的代碼上面,你會用計數器的值作爲行號

BTW得到Type Mismatch Error

編輯

Counter是沒有被用作而是用作Column。語法是Cells(Row,Column)

0

您可能會將字符串拖入整數數組或類似的東西。

至於你的for循環: I just answered someone's question on a somewhat similar problems.

我建議去了我給他的全功能的代碼示例。

即因爲:

  1. 您正在使用硬編碼值(4rth列)。您最終會遇到維護問題。添加一列的用戶很容易搞砸你的代碼。

  2. 你的代碼不會爲自己說話。如果用正確命名的變量替換硬編碼值,它們將會。

注:這可能是在處理器上更多的消費,由於交叉點的數目。如果您想出超過10,000行的表格,您可以隨時調整策略。

檢查鏈路和答案,但同時這裏也是我要如何處理表/ ListObjects做短版:

dim listO as ListObject 
set listO = Worksheets("Test").ListObjects(1) 

dim listC as ListColumn 
set listC = ListO.ListColumns("ColumnTitle") 

dim listR as ListRow 
dim anArrayX() as Variant 
ReDim anArrayX (1 to listO.ListRows.Count) 
dim intersectedRange as Range 
for i = 1 to listO.ListRows.count 
    set rowRange = ListO.ListRows(i).Range 
    set intersectedRange = Application.Intersect(rowRange, listC.Range) 
    anArrayX(i) = intersectedRange.Value 
    Debug.Print anArrayX(i) 
next i