2016-08-03 79 views
0

我不断收到类型不匹配的错误,并试图改变几次类型。我只是试图遍历每个工作表和指定范围,以查看该范围内每个单元格中是否存在该单词。类型不匹配错误通过工作表VBA循环

Sub CheckWord() 


Dim arrVar As Variant 
Dim ws As Worksheet 
Dim strCheck As Range 

Set arrVar = ActiveWorkbook.Worksheets 
'MsgBox (arrVar) 

For Each ws In arrVar 
    If ws.Range("C9:G20").Value = "Word" Then 
    MsgBox (True) 
    End If 
Next ws 

End Sub 
+0

'ws.Range( “C9:G20”)'返回包含阵列的'Variant'。你不能将它与'String'进行比较。 – Comintern

回答

1

当你有一个range具有很多列,它创建了一个阵列的例子。 以阵列考虑像这样:

Sub CheckWord() 


Dim arrVar As Variant 
Dim ws As Worksheet 
Dim strCheck As Range 

Set arrVar = ActiveWorkbook.Worksheets 
'MsgBox (arrVar) 

For Each ws In arrVar 
    For each col in ws.Range("C9:G20").Cells 
     if col.Value = "Word" Then 
     MsgBox (True) 
     end if 
    End If 
Next ws 

End Sub 
+1

您无法迭代这些值,然后在该值上调用.value。您需要删除其中一个 – Brad

+0

良好的呼叫@Brad它是Cells集合,而不是Value属性。 –

1

你不能得到的ws.Range("C9:G20")value,并将它与一个字符串。你已经选择了多个单元格。如果你想返回True当这些单元格之一包含“单词”,或者当它们全部包含“单词”时,你需要遍历它们。

这是如何来回报您的范围是否包含“字”的任何地方至少一次

Function CheckWord() 
    Dim arrVar As Variant 
    Dim ws As Worksheet 

    Set arrVar = ActiveWorkbook.Worksheets 

    For Each ws In arrVar 
     Dim c 
     For Each c In ws.Range("C9:G20").Cells 
      If c = "Word" Then 
       CheckWord = True 
       Exit Function 
      End If 
     Next c 
    Next ws 
End Function 
0
Sub CheckWord() 
    Dim ws As Worksheet 

    For Each ws In ActiveWorkbook.Worksheets 
     If Not ws.Range("C9:G20").Find(What:="Word", LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) Is Nothing Then MsgBox "Found in " & ws.Name 
    Next ws 
End Sub 
+0

@OluO .:你通过了吗? – user3598756

+0

是的,一旦我看到了解释ti,一切都变得有意义了。谢谢! –

+0

欢迎光临。然后标记你采用的答案作为解决方案 – user3598756