VBA·编译错误:ByRef参数类型不符

阅文时长| 0.34分钟字数统计| 550.4字符
主要内容| 1、引言&背景 2、分析&解决原理 3、声明与参考资料
『VBA·编译错误:ByRef参数类型不符』
编写人| SCscHero 编写时间| 2021/8/19 AM12:3
文章类型| 系列完成度| 已完成
座右铭每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景   完成度:100%

a) 应对问题

博主在Word VBA中今天写代码的时候,发现报了个编译的错误,如下图。检查了一下参数应该是正确的。

b) 应对场景

  1. 博主是调用了一个有参函数,报的如图的错误,有参函数接收的是一个String类型的参数。
  2. 在调用有参Function或Sub的时候。

c) 解决方法

通过第二章节的理解,在调用有参Function或Sub之前,再使用Dim关键字声明一个临时变量接收,使用此临时变量传参即可

二、分析&解决原理   完成度:100%

a) Dim的使用理解

在Google了一下后,博主发现问题出在调用有参的Function或者Sub的时候,传入的参数一定是需要使用Dim关键字声明类型的。先说下Dim声明关键字类型的一个坑。以下为三种声明多变量的常用写法。

'写法1:多行分别声明变量
Dim strV1 As String
Dim strV2 As String
Dim strV3 As String

'写法2:单行声明变量,单独声明类型
Dim strV1 As String,strV2 As String,strV3 As String

'【有隐患】写法3:单行声明变量,只声明一个类型
Dim strV1,strV2,strV3 As String

此三种写法,前两种是等价的。但第三种,实际上strV1,strV2没有被声明变量。

b) 误区

开始学习VBA的时候,对VBA中一些非对象的数据类型,可以直接声明,可以省略Dim声明。写法也习惯了,没意识到这个错误。但即使是非对象数据类型String,在调用之前也是需要声明的

三、声明与参考资料   完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
非常抱歉,我犯了错误。以下是修改后的代码,现在它应该不会引发ByRef参数类型不匹配的错误了。 ``` Sub CustomizeNumbersColor() Dim doc As Document Dim rng As Range Dim num As Variant Set doc = ActiveDocument Set rng = doc.Content For Each num In Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") rng.Find.ClearFormatting rng.Find.Replacement.ClearFormatting With rng.Find .Text = num .Replacement.Text = num .Replacement.Font.Color = GetNumberColor(num) .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue, Format:=True End With Next num rng.Find.ClearFormatting rng.Find.Replacement.ClearFormatting With rng.Find .Text = "[0-9]{1}" .MatchWildcards = True Do While .Execute(Forward:=True) = True rng.MoveStartUntil Cset:="0123456789" rng.MoveEndUntil Cset:="0123456789", Count:=1 rng.Font.Color = rng.Next(wdCharacter).Font.Color Loop End With End Sub Function GetNumberColor(ByRef num As String) As Long Select Case num Case "1" GetNumberColor = RGB(255, 0, 0) Case "2" GetNumberColor = RGB(255, 165, 0) Case "3" GetNumberColor = RGB(255, 255, 0) Case "4" GetNumberColor = RGB(0, 255, 0) Case "5" GetNumberColor = RGB(139, 69, 19) Case "6" GetNumberColor = RGB(0, 255, 255) Case "7" GetNumberColor = RGB(0, 0, 255) Case "8" GetNumberColor = RGB(128, 0, 128) Case "9" GetNumberColor = RGB(255, 192, 203) Case "0" GetNumberColor = RGB(0, 0, 0) End Select End Function ``` 我已经将所有参数传递给函数都改为了ByRef类型,这样就可以正确地传递参数了。同时,我还将Find.Execute()方法中的“Wrap”参数更改为“wdFindContinue”,以便在整个文档中查找所有匹配项。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值