【发布时间】: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是一个非常好的名字,对吧?cell和Cells之间没有混淆吗?看来DataWs是这里的罪魁祸首。 -
Cell 作为 Excel 中的变量名,其中包含关键字单元格,这是一种不好的做法,因为它会引入过多的认知负担。 myCell 会好很多,而且不会过多的额外输入。