【问题标题】:Type mismatch when trying to assign return value to variable (VBA Excel)尝试将返回值分配给变量时类型不匹配(VBA Excel)
【发布时间】:2014-05-22 17:47:45
【问题描述】:

长时间聆听,第一次来电。

我在 Excel 2010 中遇到 VBA 问题。我正在尝试比较用户表单上的各个字段以确定它们是否为空。然后,我将突出显示红色,并将焦点放在列表中的第一个。

为此,我为每种类型创建了可以为空白/未选择的函数。它们都被声明为AS BOOLEAN。我们的想法是执行函数调用以突出显示,使用适当的子函数传递函数调用,并使用突出显示函数中的结果:

function Blah(DoThis01(Me.Object1), DoThis02(Me.Object2), ...) As Boolean

这让我很不高兴;值总是返回错误。所以我创建了三个布尔变量来分配这些函数的值,它开始给我 byRef 错误。在声明每个变量而不是全部在一行之后,解决了 byref,但现在我得到了类型不匹配:

Dim foo As Boolean

foo = DoThis01(Me.Object1)

if Blah(foo, bar, ..)

它不喜欢那条中心线;这就是我遇到错误的地方。

下面是我正在使用的代码 sn-p,以及我试图传递的函数示例。我不明白为什么我的 As Boolean 函数与 As Boolean 变量不兼容。此外,确定字段是否已填写的功能也给我带来了一些问题,没有注册正确的值。谷歌有很多答案,但到目前为止没有一个对我有用。感谢您提供的任何见解。

谢谢,

J

PS 我意识到触发消息时某些逻辑可能有点偏离。没关系,因为无论如何我都没有得到正确的值。如果我能让其余的工作正常,我会清理它。

工作代码:

保存按钮:

Dim emptyRow As Long
Dim isDuplicate As Boolean, nameSelect As Boolean, comboSelect As Boolean, listSelect As Boolean
Dim listLength As Integer
Dim blah As Integer

' check for empty on form
nameSelect = IsSelectedName(Me.SignalNameTxtBox)
comboSelect = IsSelectedCombo(Me.ComboBox1)
listSelect = IsSelectedList(Me.ListBox1)
If HighlightEmpty(nameSelect, comboSelect, listSelect) Then
    blah = MsgBox("Empty fields required!", vbOKOnly)
    Exit Sub
End If

...更多的东西

突出显示空表单对象:

Function HighlightEmpty(nameSelect As Boolean, comboSelect As Boolean, listSelect As Boolean) As Boolean
' Highlight empty fields
If Not nameSelect Then Enter_New_Form.SignalNameTxtBox.BackColor = RGB(255, 0, 0)
If Not comboSelect Then Enter_New_Form.ComboBox1.BackColor = RGB(255, 0, 0)
If Not listSelect Then Enter_New_Form.ListBox1.BackColor = RGB(255, 0, 0)

' Set focus to first empty field on form
If Not nameSelect Then
    Enter_New_Form.SignalNameTxtBox.SetFocus
ElseIf Not comboSelect Then
    Enter_New_Form.ComboBox1.SetFocus
ElseIf Not listSelect Then
    Enter_New_Form.ListBox1.SetFocus
End If

' Return boolean to trigger message
HighlightEmpty = nameSelect Or comboSelect Or Not listSelect
End Function

判断是否为空的函数:

Function IsSelectedList(lst As ListBox) As Boolean
    Dim I As Integer

    For I = 0 To lst.ListCount - 1
        IsSelectedList = lst.Selected(I)
        If IsSelectedList Then Exit Function
    Next I

End Function

Function IsSelectedCombo(cbo As ComboBox) As Boolean
    If cbo.Value = "" Then IsSelectedCombo = False
End Function

Function IsSelectedName(nme As TextBox) As Boolean
    If nme.Value = "" Then IsSelectedName = False
End Function

【问题讨论】:

    标签: excel type-mismatch vba


    【解决方案1】:

    除非另外声明为 true,否则您的函数将始终返回 false。添加这样的 else 语句:

    Function IsSelectedName(nme As TextBox) As Boolean
        If nme.Value = "" Then
            IsSelectedName = False
        Else
            IsSelectedName = True
        End If
    End Function
    

    正如@Timwilliams 指出的那样,您可以将其减少到一行,因为nme.Value = "" 将评估为TrueFalse。但是,您可能会发现,您需要以其他方式测试单元格是否为空,例如 isBlank()isEmpty()。在这种情况下,请使用前面的示例。

    Function IsSelectedName(nme As TextBox) As Boolean
        IsSelectedName = Len(nme.Value) > 0
    End Function
    

    编辑

    要检查值,只需将文本字符串传递给函数而不是文本框对象。试试这个:

    Private Sub CommandButton1_Click()
        MsgBox (IsSelectedName(Me.SignalNameTxtBox.Text))
    End Sub
    
    
    Function IsSelectedName(nme As String) As Boolean
        IsSelectedName = Len(nme) > 0
    End Function
    

    【讨论】:

    • 或:IsSelectedName = Len(nme.Value)>0
    • IsSelectedName = (nme.Value = "") 应该是 IsSelectedName = (nme.Value <> "") 现在它说 IsSelected = True 如果 nme.Value 等于 "" 应该是 IsSelectted = True 如果 nme.Value 不等于 ""
    • 好的,所以我做了一个快速修复,将函数设置为 true,然后通过 IF 语句翻转为 false。这就是我在 Python 或 C 中的做法。在运行时我仍然会遇到类型不匹配。无论它返回什么都不能很好地与我试图放入的布尔变量一起使用。如果我在 HighlightEmpty 的参数中调用函数也是一样的。它要么不是布尔值,要么我没有正确定义其他布尔值。
    • nameSelect = IsSelectedName(Me.SignalNameTxtBox) 如果我注释掉这些行并尝试使用函数返回作为 Highlight Empty 的参数,它会给我带来不匹配的问题。它不想将返回值识别为布尔值。我什至尝试过 CBool​​(stuff),但它给了我一个类型不匹配的问题。
    • 好的,看看我的编辑,尝试传递文本字符串而不是对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多