【问题标题】:VBA Compile Error Type Mismatch - Looping with Sheet FunctionVBA 编译错误类型不匹配 - 使用工作表函数循环
【发布时间】:2021-02-21 23:54:30
【问题描述】:

目标:遍历包含文本行的列,如果根据工作表函数 Search() 条件匹配,则将值输出到另一个工作表。

问题:“搜索”功能不匹配错误。第一行数据的 Search() 函数返回 #VALUE。

已尝试:在包含“X=”匹配的目标单元格上,我能够输出所需的值。

Sub practice()

Dim coordinate As Variant
Dim myData As Range
Dim count As Integer

count = 2

Set myData = Worksheets("DATA").Range("A:A")

For Each coordinate In myData

'end loop at blank cell
    If coordinate = "" Then
        Exit For
            End If
            
If Application.WorksheetFunction.IfError(Application.Search("X=", coordinate, 1), "") <> "" Then

    Sheets("COORDINATES").Range("A" & count) = Application.WorksheetFunction.Mid(coordinate, Application.Search("X=", coordinate, 1) + 2, Application.Search("Y=", coordinate, 1) - Application.Search("X=", coordinate, 1) - 2)
    Sheets("COORDINATES").Range("B" & count) = Applicatoin.WorksheetFunction.Mid(coordinate, Application.Search("Y=", coordinate, 1) + 2, Application.Search("Z=", coordinate, 1) - Application.Search("Y=", coordinate, 1) - 2)
    
count = count + 1

End If

Next coordinate

End Sub

编辑:添加 IfError 和空白可解析 if 语句。

现在所需的 mid(search()) 组合返回运行时 438 错误“对象不支持此属性或方法”。

【问题讨论】:

  • 为搜索结果设置一个变量并检查是否有错误
  • @Kevin 解决了 if 语句,而不是 mid(search()) 是问题。

标签: excel vba loops type-mismatch


【解决方案1】:

Mid() 不需要 WorksheetFunction.Application

Sub practice()

Dim coordinate As Variant
Dim myData As Range
Dim count As Integer

count = 2

Set myData = Worksheets("DATA").Range("A:A")

For Each coordinate In myData

'end loop at blank cell
    If coordinate = "" Then
        Exit For
            End If
            
If Application.WorksheetFunction.IfError(Application.Search("X=", coordinate, 1), "") <> "" Then 'Using IfError(Search(),"") resolved the #VALUE issue.

'Syntax Mid() does not require WorksheetFunction.Application
    Sheets("COORDINATES").Range("A" & count) = Mid(coordinate, Application.Search("X=", coordinate, 1) + 2, Application.Search("Y=", coordinate, 1) - Application.Search("X=", coordinate, 1) - 2)
    Sheets("COORDINATES").Range("B" & count) = Mid(coordinate, Application.Search("Y=", coordinate, 1) + 2, Application.Search("Z=", coordinate, 1) - Application.Search("Y=", coordinate, 1) - 2)
   

count = count + 1

End If

Next coordinate

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    相关资源
    最近更新 更多