VBA属性的基本用法

VBA属性的基本用法,vba,properties,Vba,Properties,我想使用此属性: Public Property Get HasNoData() As Boolean HasNoData = (numberOfColumns < 2 And numberOfRows < 2) End Property Sub test() Dim numberOfColumns As Long Dim numberOfRows As Long numberOfColumns = 5 numberOfRows = 3 If HasNoData T

我想使用此属性:

Public Property Get HasNoData() As Boolean

   HasNoData = (numberOfColumns < 2 And numberOfRows < 2)

End Property

Sub test()

Dim numberOfColumns As Long
Dim numberOfRows As Long

numberOfColumns = 5
numberOfRows = 3

If HasNoData Then
MsgBox True
Else:
MsgBox False

End If

End Sub
公共属性Get HasNoData()为布尔值 HasNoData=(numberOfColumns<2,numberOfRows<2) 端属性 子测试() Dim numberOfColumns尽可能长 模糊的行数等于长的行数 numberOfColumns=5 numberOfRows=3 如果HasNoData那么 MsgBox True 其他: MsgBox错误 如果结束 端接头
每次我得到TRUE,无论条件是否满足。我可能完全弄错了,所以请让我知道。

您的代码目前存在一些问题:

  • 属性只能是类的成员
  • 变量受称为作用域的约束,特别是您的两个变量
    numberOfColumns
    numberOfRows
    仅在
    test()
    Sub的作用域内可用,因此在
    HasNoData()中看不到它们及其值
    属性,除非它们作为参数传递或设置为类的成员
  • VBA
    Msgbox
    采用字符串作为参数,而您提供了布尔值
  • 我认为您真正想要的是将“HasNoData”变成一个接受两个参数的函数,一个用于行,一个用于列。试试这个:

    Public Function HasNoData(NumRows, NumCols) As Boolean
       HasNoData = (NumCols < 2 And NumRows < 2)
    End Function
    
    Sub test()
        If HasNoData(3, 5) Then
            MsgBox "There is data!"
        Else
            MsgBox "There is no data."
        End If
    End Sub
    
    公共函数HasNoData(NumRows,NumCols)作为布尔值
    HasNoData=(NumCols<2,NumRows<2)
    端函数
    子测试()
    如果HasNoData(3,5)那么
    MsgBox“有数据!”
    其他的
    MsgBox“没有数据。”
    如果结束
    端接头
    
    您是否在类模块中使用此选项?
    MsgBox True
    毫无意义。另外,
    Else:
    看起来像脚本标签,而不是
    If..Else..End If
    语句。我怀疑这是否能编译。请看一下。不,我没有。现在我把属性放在一个类模块中,子对象作为一个Excel对象保留,现在它说False。MsgBox True可以是MsgBox“Whatever1”。Else:与Else相同。