【发布时间】:2025-11-29 01:00:01
【问题描述】:
我不确定我编写的这段代码的问题出在哪里。我有以下公开声明和功能:
Public g_0 As Range
Public Enum RngType
A = 1
H = 2
X = 3
End Enum
Function RngMk(csTable As String, csType As RngType, Optional csHeaderName As Variant = "")
Dim str As String
Select Case csType
Case RngType.A
If csHeaderName = "" Then
str = csTable & "[#All]"
Else:
str = csTable & "[[#All],[" & csHeaderName & "]]"
End If
Case RngType.H
If csHeaderName = "" Then
str = csTable & "[#Headers]"
Else:
str = csTable & "[[#Headers],[" & csHeaderName & "]]"
End If
Case RngType.X
If csHeaderName = "" Then
str = csTable
Else:
str = csTable & Chr(91) & csHeaderName & Chr(93)
End If
End Select
RngMk = Range(str)
End Function
上面的代码应该在给定的表 ListObject 内建立任何范围。但是,当我将以下内容添加到 Sub 中时
g_0 = RngMk("Table1", A, "Name")
g_0.Select
我收到错误“91 - 对象变量或未设置块变量”。我不确定我错过了什么......
【问题讨论】:
-
分配范围时,需要使用
Set关键字,所以该行应该是Set g_0 = RngMk("Table1", A, "Name") -
我添加了
Set,它确实摆脱了Run-time error '91',但是现在我收到了一个新错误:Run-time error '424': Object required -
您的变量
A是否设置为您的函数所需的RngType对象? -
你是说我应该在
Public Enum RngType之后添加一个对象类型,例如Public Enum RngType As Long -
我相信这个函数实际上是返回一个连接的字符串。问题似乎在以后
g_0 = RngMk("Table1", A, "Name")应该更像Set g_0 = Range(RngMk("Table1", A, "Name"))。