【发布时间】:2025-12-22 13:05:08
【问题描述】:
尝试执行以下代码时,我收到 VBA 错误:类型不匹配。任何人都知道原因(和解决方案?:-))
我将数据类型从 Long 更改为 LongLong 以便能够处理更大的数字。在此之前,代码(摘录)运行良好。
Private Declare PtrSafe Function GetDC Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Private Declare PtrSafe Function GetDeviceCaps Lib "gdi32" (ByVal hDC As LongPtr, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function ReleaseDC Lib "user32" (ByVal hwnd As LongPtr, ByVal hDC As LongPtr) As Long
Public Sub TestScreenResolution()
Debug.Print ScreenResolution
End Sub
Private Function ScreenResolution() As Double
Dim hDC As Long
hDC = GetDC(0)
ScreenResolution = GetDeviceCaps(hDC, 88)
ReleaseDC 0, hDC
End Function
Public Sub TestMySub()
Call MySub(999999999)
End Sub
Private Sub MySub(ByVal x As LongLong)
Dim y As LongLong
Dim Max As LongLong
Dim Min As LongLong
Max = x * x
Min = (x - 1) * (x - 1)
Dim Arr() As Boolean 'Default Boolean type is False
ReDim Arr(Min To Max) ''<<< "Type Mismatch" compile error
For y = Max To Min Step -2
Arr(y) = True
Next y
End Sub
当然这段代码什么都没有,只是为了测试这段代码。
【问题讨论】:
-
哪里出错了?
-
@Comintern 但无论如何它都应该很高兴地转换,不是吗?
-
@Comintern 它确实。被删除的答案是在某些事情上,它是
ReDim声明失败,突出显示Max作为类型不匹配的原因......在编译时 -
@M.Doerner
TypeName(999999999)打印Long... 如果它是一个单元格的值,那将是一个Double。 -
你需要这么大的数组干什么?如果我们知道为什么,也许我们可以提供替代方案。数组不能用
LongLong标注尺寸 - 给定x和y名称和TestScreenResolution方法,看起来您正在尝试制作一个扁平的“列表”,否则它会是一个 2D大批?为什么二维数组不能工作?