其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

Excel VBA 正则表达式 运行时错误:‘5’ 无效的过程调用或参数

GG网络技术分享 2025-03-18 16:15 2


问题描述:

问题遇到的现象和发生背景

请教VBA正则表达式运行中的报错

问题:Excel VBA 运行时错误:‘5’ 无效的过程调用或参数。调试出错误出现在 (Range("AE" & i) = outv(0).SubMatches(0))这一行

发生背景:输入数据是类似于(V02)的文字类型,我想要通过正则表达式取V后面的两位数字,将取出的数字放在另外一列。

问题相关代码,请勿粘贴截图

Sub splitvolt()
Set reg2 = CreateObject("vbscript.regexp")
‘正则表达式,想要取V后面的两位数字
reg2.Pattern = "V[0-9]{2}"
reg2.Global = True
i = 2
Do While Range("A" & i) <> ""
‘数据存在AC列中
vnum = Range("AC" & i).Value
Set outv = reg2.Execute(vnum)
If outv.Count > 0 Then
‘下一行为调试时显示的出错位置
Range("AE" & i) = outv(0).SubMatches(0)
End If
i = i + 1
Loop
Set reg2 = Nothing
Set outv = Nothing
End Sub

运行结果及报错内容

无法产出运行结果
报错内容:运行时错误:‘5’ 无效的过程调用或参数

我想要达到的结果

将正则表达式挑出的两位数字放进AE列中

网友观点:

Sub splitvolt()    Set reg2 = CreateObject("vbscript.regexp")    

'正则表达式,想要取V后面的两位数字

reg2.Pattern = "V([0-9]{2})" reg2.Global = True i = 2 Do While Range("A" & i) <> ""

'数据存在AC列中

vnum = Range("AC" & i).Value Set outv = reg2.Execute(vnum) For Each Item In outv Debug.Print Item.submatches(0) Range("AE" & i) = Item.submatches(0) Next i = i + 1 Loop Set reg2 = Nothing Set outv = NothingEnd Sub

【Excel技巧】- VBA代码提示运行时错误 '1004': 应用程序定义或对象定义错误

其实今天应该开始着手写PowerPoint的相关技巧,但由于技巧较多,还不知道用什么方法给大家展现,所以一直在构思。在构思的过程中看到大大秦川的牛闪闪的日子2群有人在咨询VBA代码的问题,所以就抽空帮其解决了一下。问题如下

我从群文件里下载这位武汉的小伙伴上传的【源文件和代码.zip】文件,打开该压缩包,有两个文档一个是xlsx结尾的,另一个是保存为文本的宏代码。

把文件解压到桌面后,我便双击鼠标打开1234.xlsx文件,然后就顺手把txt里的宏代码拷贝到仅有的一个工作表文件里。具体操作如下动态图:

看着上面的动态图,一切都是那么的自然,殊不知我已经掉到坑里去了。因为按照正常的编写VBA代码来说,不会出现这个问题。我自从大二自学VBA以来到现在,写了那么多VBA代码,也没有遇到过一次这样的问题。所以这个问题的出现的确让我感到困惑,所以我从头开始梳理代码,按F8一条一条的调试,调试方法如下:

当执行到语句Range("B1").Select的时候,错误窗就弹出来了。由于写了那么多VBA代码,所以从这个错误就大概知道是因为没有写完整选中哪一个工作表的B2单元格,所以程序才会报错,为了让程序不报错,我可以进行如下修改:

语句Range("B1").Select修改为Sheets("Sheet1").Range("B1").Select,再进行调试的时候,就不会提示错误了。

可能有的小伙伴就奇怪了,为啥我录制宏的时候不会报错呢?其实我们录制的宏是放在一个模块里面,所以操作整个工作簿的工作表都是没问题的,接下来我会录制一个宏进行讲解。

从上面的动态图可以看出,我录制了一个默认命名为【宏1】的宏,录制的宏会自动放在一个模块里面。如果我们没有在录制宏的过程中选择单元格,默认只会针对目前选中的工作表。但当选中其他的工作表,我们再运行【宏1】,代码也是可以运行的,但所有的操作就是针对选中的工作表,如果希望引用或选择其他单元格里面的内容,代码必须写完全是操作哪一个工作表的单元格

我先选中Sheet4工作表,然后执行【宏1】代码,单元格C2:F9都会被填充为数字1。所以如果我们希望代码能够很好地运行,我们可以把复制的代码放到新建的模块中,再次运行就不会出现上面1004的问题啦。

今天的分享就到这里啦,上海太冷了,写字冻手,进被窝去啦~Written by Steven in 20170119^_^



微信公众号:SaveUTime

SUT学习交流群:615356012

关注公众号,提高效率,节约您的时间!

标签:

提交需求或反馈

Demand feedback