【问题标题】:VBA Object variable or With block variable not set - RegEx loopVBA 对象变量或未设置块变量 - RegEx 循环
【发布时间】:2021-03-06 10:27:58
【问题描述】:

我被困住了 - 我觉得我已经检查了很多次,但我需要一双新的眼睛来看待这个:

Sub shopNumConvert()

    Call settings

    Dim SearchString As String
    Dim ReplaceString As String
    Dim InputString As String
    Dim ShopRange As Range
    'Dim RegEx As New RegExp
    Dim RegEx As RegExp
        
    SearchString = "[^a-z]{2}"
    ReplaceString = "0\\1"
    Set ShopRange = DataWs.Range("G2:G10")
    Set RegEx = New RegExp

    For Each cell In ShopRange
    
        If SearchString <> "" Then
            InputString = cell.Value

            With RegEx
                .Global = True             
                .IgnoreCase = False         
                .MultiLine = True          
                .Pattern = SearchString     
            End With
        
            If RegEx.Test(InputString) Then                                     
                ShopRange.Value = (RegEx.Replace(InputString, ReplaceString))
            End If
        
        End If
    
    Next
    
    Set RegEx = Nothing

End Sub

为什么我会收到错误消息Object variable or With block variable not set

在 settings() 中,我已经定义了“DataWs”是哪个工作表

非常感谢您的帮助!

【问题讨论】:

  • 可以添加settings()的代码吗?听起来像是范围问题。
  • 错误发生在哪一行?为了安全起见,我会在For each... 行之后添加If Not cell Is Nothing Then ...。显然,底部有一个结束 End If
  • ShopRange 是多个单元格,而替换正则表达式返回单个字符串,所以我怀疑您使用的是 ShopRange 而不是(错误选择的名称)单元格。此外,指示代码行是一种好习惯这是产生错误。
  • @freeflow - cell 是一个非常好的名字,对吧? cellCells 之间没有混淆吗?看来DataWs 是这里的罪魁祸首。
  • Cell 作为 Excel 中的变量名,其中包含关键字单元格,这是一种不好的做法,因为它会引入过多的认知负担。 myCell 会好很多,而且不会过多的额外输入。

标签: vba loops foreach


【解决方案1】:

感谢您的 cmets(以及良好的实践建议 - 不经常使用 VBA,所以我在旅途中学习)!

问题确实出在DataWs 上,我不得不更改settings() 中的某些内容 - 现在发布的代码运行时不会引发错误 - 但是我会看看你的一些 cmets,看看如何将它们合并为改进代码。

最好, 珍妮

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多