Excel 指向VBA中自己的数据类型的指针

Excel 指向VBA中自己的数据类型的指针,excel,pointers,types,vba,Excel,Pointers,Types,Vba,我想在VBA中创建一个指向我自己的数据类型的指针,然后使用myDataType.vbString之类的东西,但是我用了错误的方法。我找不到解决办法,有人知道我做错了什么吗 Type myDataType exampleString As String exampleInteger As Integer End Type Dim exampleType As myDataType exampleType.exampleString = "Example" exampleType.

我想在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

在VBA中,LongPtr数据类型实际上不是指针,而是表示变量的内存地址的实用程序,以便调用需要此类指针的外部API(DLL)

因此,在VBA中,不能明确地引用LaC或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.
您可以将其实例化到另一个模块中

Dim exampleType As myDataType '<~~ null pointer declared
Set exampleType = new myDataType '<~~ now pointer is valid
exampleType.exampleString = "Example"
exampleType.exampleInteger = 0

Dim exampleType As myDataType'在VBA中,LongPtr数据类型实际上不是指针,而是表示变量的内存地址的实用程序,以便调用需要此类指针的外部API(DLL)

因此,在VBA中,不能明确地引用LaC或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.
您可以将其实例化到另一个模块中

Dim exampleType As myDataType '<~~ null pointer declared
Set exampleType = new myDataType '<~~ now pointer is valid
exampleType.exampleString = "Example"
exampleType.exampleInteger = 0

Dim exampleType As myDataType'为什么要这样做?(据我所知,在VBA中是不可能的)我正在制作一个游戏(有两名玩家)。有时我想指的是胜利者,有时指的是球员1。我想如果我可以说examplePointer=VarPtr(Player1)或者examplePointer=VarPtr(Player2),那就很容易了,所以examplePointer也指的是获胜者。因此,当我必须对Player1做一些事情时,我可以说Player1.Name,例如,或者当我必须对获胜者做一些事情时,我可以说winner.Name。那么,为什么你不能使用另一个
myDataType
变量,并将你想要的现有变量分配给它呢?因为你必须赢得3场比赛才能赢得一场比赛。当我说Winner.GamesWon+1时,它只会改变Winner变量中的GamesWon,而不是Player1变量(如果Player1赢了一场游戏)。我已经找到了一种不用指针的方法,但是如果我能用指针的话,那就更容易了。我想,下面是你的答案。你为什么要这样做?(据我所知,在VBA中是不可能的)我正在制作一个游戏(有两名玩家)。有时我想指的是胜利者,有时指的是球员1。我想如果我可以说examplePointer=VarPtr(Player1)或者examplePointer=VarPtr(Player2),那就很容易了,所以examplePointer也指的是获胜者。因此,当我必须对Player1做一些事情时,我可以说Player1.Name,例如,或者当我必须对获胜者做一些事情时,我可以说winner.Name。那么,为什么你不能使用另一个
myDataType
变量,并将你想要的现有变量分配给它呢?因为你必须赢得3场比赛才能赢得一场比赛。当我说Winner.GamesWon+1时,它只会改变Winner变量中的GamesWon,而不是Player1变量(如果Player1赢了一场游戏)。我已经找到了一种不用指针的方法,但是如果我能用指针的话,那就更容易了。我想下面是你的答案。