gpt4 book ai didi

vba - Excel VBA 中的 ByRef 参数类型不匹配

转载 作者:行者123 更新时间:2023-12-01 17:05:54 47 4
gpt4 key购买 nike

我正在使用 VBA。我编写了一个用户定义函数,它接受一个字符串,对其进行处理并返回一个干净的字符串。我不确定它出了什么问题。我无法调用它并要求它处理我的字符串并返回它。我认为我定义或返回它的方式存在错误。

Public Function ProcessString(input_string As String) As String
' The temp string used throughout the function
Dim temp_string As String

For i = 1 To Len(input_string)
temp_string = Mid(input_string, i, 1)
If temp_string Like "[A-Z, a-z, 0-9, :, -]" Then
return_string = return_string & temp_string
End If
Next i
return_string = Mid(return_string, 1, (Len(return_string) - 1))
ProcessString = return_string & ", "
End Function

我这样使用这个函数

Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)

姓氏是一个字符串变量,通常看起来像这样 Lastname*****,我试图删除它后面的所有星星。让它返回不带星号的Lastname

当我尝试运行此程序时,我收到编译错误:ByRef arugment type Mismatch。我使用的是 Windows XP 和 Office 2003。

编辑:我添加了代码的基本结构,我有大约 20 行类似的代码。对我需要的每个字段做同样的事情。

Private Sub CommandButton2_Click()
' In my original production code I have a chain of these
' Like this Dim last_name, first_name, street, apt, city, state, zip As String
Dim last_name As String

' I get the last name from a fixed position of my file. Because I am
' processing it from another source which I copied and pasted into excel
last_name = Mid(Range("A4").Value, 20, 13)

' Insert the data into the corresponding fields in the database worksheet
Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)

最佳答案

我怀疑您没有在调用方中正确设置 last_name

使用语句Worksheets(data_sheet).Range("C2").Value = ProcessString(last_name)

只有当last_name是一个字符串时,这才有效,即

Dim last_name as String

出现在调用者的某个地方。

原因是 VBA 默认情况下通过引用传递变量,这意味着调用者和被调用者之间的数据类型必须完全匹配。

两个修复:

1) 强制 ByVal -- 更改函数以传递变量 ByVal:
Public Function ProcessString(ByVal input_string As String) As String,或

2) Dim varname -- 在使用之前将 Dim last_name As String 放入调用者中。

(1) 之所以有效,是因为对于 ByVal,在传递给函数时会获取 input_string 的副本,这会将其强制转换为正确的数据类型。由于函数无法修改调用者中的变量,因此它还可以提高程序稳定性。

关于vba - Excel VBA 中的 ByRef 参数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16611547/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com