【问题标题】:VBA Excel - Error when trying to create range using a functionVBA Excel - 尝试使用函数创建范围时出错
【发布时间】: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"))

标签: vba excel


【解决方案1】:

在你的函数中使用

Set RngMk = Range(str)

这应该可以解决您的问题。

仍然“设置”g_0 = rngmk(.....)

【讨论】:

  • 做到了!谢谢@Kyle,也谢谢大家建议在我的表情前加Set
  • 不客气。我从来没有意识到一个函数实际上可以返回一个对象,所以谢谢!