【发布时间】: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