2016-03-08 60 views
0
Dim mm As String 
Dim lstRow As Integer 
Set ws1 = ast.Sheets("Exit") 
lstRow = ws1.Range("S" & ws1.Rows.Count).End(xlUp).Row 
Dim i As Integer 
For i = 2 To lstRow 
    **If Len(ws1.Range("S" & i).Value) = 6 Then** 
     mm = Left(ws1.Range("s" & i).Value, 3) 
     ws1.Range("T" & i).Value = mm 
     ws1.Range("T" & i).Interior.Color = vbRed 
    End If 
Next 

我打算帶上3列字母的S列值,並將這些字母表帶出紅色的T列。但我在**行中遇到類型不匹配錯誤。 ast是文件名,ws1是工作表名稱。類型不匹配錯誤13在獲取值的長度時

+0

如果您在問題行之前放置了'Debug.Print Len(ws1.Range(「S&i).Value),那麼在立即窗口上會出現什麼? – Smandoli

+0

對我來說根本沒有意義...仍然嘗試將所有「整數」更改爲「長」[爲什麼使用整數而不是長](http://stackoverflow.com/questions/26409117/why- use-integer-instead-of-long/26409520#2640952)...可能有一個無聲的溢出...也嘗試在你的前面有一個Debug.Print ws1.Range(「S」&i).Value' error-line ...如果沒有錯誤,那麼'Len'不會出錯(理論上) –

+0

@Smandoli只是一個提示:在直接窗口中,可以用'?'代替'Debug.Print' :) –

回答

0

嗯,我想這可能與它有關係嗎?

Dim lstRow As Integer 

VS

lstRow = ws1.Range("S" & ws1.Rows.Count).End(xlUp).Row 

是它的範圍或整數?在線調試你的B/C它告訴看它的一種方式,但你用另一種方式

+2

'ws1.Range(「S」&ws1.Rows.Count).End(xlUp).Row'是一個數字值。它返回給定地址的NUMBER行。 ;) –

+0

好抓。我想出於某種原因,它比實際上更明顯:/ –

+0

那麼什麼是正確的代碼呢? – Nitin

0

我沒有足夠的評論聲望。你可以請添加行
Option Explicit
到您的代碼的頂部。

Dim ws1 As Excel.Worksheet
請通過代碼與發生故障的線路斷點和手錶踩
ws1.Range("S" & i).Value
回到這裏,告訴我們的值是什麼聲明WS1。
您也可以嘗試打印
Len(ws1.Range("S" & i).Value)
隨着您的代碼正在運行故障排除。