【发布时间】: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'函数,只是一个普通函数。