【问题标题】:I'm getting an 'object required' error when calling a vba function调用 vba 函数时出现“需要对象”错误
【发布时间】:2021-04-18 12:59:22
【问题描述】:

我在调用 vba 函数时收到 424“需要对象”。函数参数需要一个范围来将工作表选项卡的名称更改为与单元格值相同。

代码如下:

Dim new_wb As Workbook
Dim act_wb As Workbook
Dim stu_name As Object
Dim lastRow As Long
Dim currCol As Long
Dim nameRange As Range
Set act_wb = ActiveWorkbook
currCol = ActiveCell.Column
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set nameRange = Worksheets(1).Range("A4")


'begin vba code
ActiveWorkbook.Sheets(1).copy
Worksheet_Change (nameRange) 'error occurs here.  

这是被调用函数的函数签名:

Private Sub Worksheet_Change(ByVal Target As Range)

如果我删除 nameRange 的“Set”关键字,我会收到以下错误

【问题讨论】:

  • Worksheet_Change (nameRange) 更改为 Worksheet_Change nameRange 这将解决错误但为什么要这样调用工作表事件?
  • What's your suggestion for calling a worksheet event like this? 放入相关工作表代码模块,等待事件自动执行:D。我认为您需要阅读有关工作表事件及其用途的信息。
  • 好的,谢谢。这就是为什么我在这里......学习。
  • @brohjoe 以您的一般情况为例,想一想您是否在第一个工作表上有一个包含 10 个命名列标题(无论如何)的表格,并且每个都对应于另一个包含详细数据的工作表那个类别。如果您愿意,您可以使用Worksheet_Change 事件来检测用户何时编辑了其中一个单元格的内容以自动更新其相应工作表的名称。
  • 其实我并不需要'Worksheet_Change'函数,只是一个普通函数。

标签: excel vba


【解决方案1】:

正如对您的 OP 的评论所说,Worksheet_Change 不是您定义的独立过程,而是您声明提供功能以响应 Worksheet 类在幕后引发 Change 事件的事件处理程序.如果您想根据单元格值更改工作表选项卡中显示的名称,只需从该单元格中提取字符串并将其分配给工作表对象的相应属性:

Dim wsName As String
wsName = Worksheets(1).Range("A4").Value

Dim wS As Worksheet
Set wS = ActiveWorkbook.Sheets(1).Copy
wS.Name = wsName

我很困惑为什么工作表和单元格引用总是相同的,但如果需要,您应该能够从那里进行调整。编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多