2016-03-08 68 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)
随着您的代码正在运行故障排除。