我想在VBA中创建一个指向我自己的数据类型的指针,然后使用像myDataType.vbString这样的东西,但我是以错误的方式做的。我找不到解决办法,有谁知道我做错了什么?
Type myDataType
exampleString As String
exampleInteger As Integer
End Type
Dim exampleType As myDataType
exampleType.exampleString = "Example"
exampleType.exampleInteger = 0
Dim examplePointer As LongPtr
examplePointer = VarPtr(exampleType)
' This is what I want to (or something like it)
' But it gives an error on the dot exampleString
If examplePointer.exampleString = "Example" Then
' Do something
Else: 'Do something else
End If
答案 0 :(得分:0)
在VBA中,LongPtr数据类型实际上不是指针,而是表示变量的内存地址的实用程序,以便调用需要此类指针的外部 API(DLL)。
因此,在VBA中,您无法显式取消引用指针 a la C或C ++。但是,指针存在隐式,类似于Java:当您声明对象变量时,您正在明确地声明指针。例如:
Dim sh as Excel.Worksheet '<~~ sh is a pointer, so far null because the object is not created yet.
Set sh = Application.Worksheets.Add '<~~ sh now points to the newly created worksheet object.
您也可以创建自己的 Class ,但它必须位于自己的具有名称的类模块中。例如,您可以创建一个名为MyDataType
' Class module MydataType
Public exampleString As String
Public exampleInteger As Integer
你可以在另一个模块中实现它
Dim exampleType As myDataType '<~~ null pointer declared
Set exampleType = new myDataType '<~~ now pointer is valid
exampleType.exampleString = "Example"
exampleType.exampleInteger = 0
同样,LongPtr数据类型只是调用外部API的实用程序,而不是真正的VBA数据类型。我希望这有助于澄清这一概念。