每当在工作簿中新建一个工作表时,Excel就会新增一行
好吧,我在努力理解Excel能做到什么、不能做到什么。我知道为了让它实现,可能需要写一些有趣的宏代码。我的目标是在一个工作簿中创建一个包含所有产品的汇总工作表(summary),并引用工作簿中其他工作表上按相同格式排列的各个产品。
我知道可以引用另一个工作表的名称,并把这些单元格中的值复制到汇总表中。这些值会动态更新。这部分很简单。不过,是否有办法通过编程的方式添加一行,并让所有被引用的单元格都已填充好。这样,随着我创建新的产品工作表,汇总表就会逐步被填充,而不需要我手动引用后续的每个工作表。我理解可能需要使用一个连续的命名约定,比如在产品工作表上使用序列号,这样我才能有效地引用它们。
我看到一个YouTube视频,里面有个家伙做了一个按钮,可以在表格中创建一行,和之前的行一模一样,但在Excel检测到新建工作表时,是否也能实现这一点,而不是按按钮来完成呢?
解决方案
vb 'Source - https://stackoverflow.com/a/79914203 'Posted by David Amato Mantegari 'Retrieved 2026-03-26, License - CC BY-SA 4.0
我对第一条回答中所写的代码进行了改进。在我的代码版本中,系统会询问用户如何命名新建的工作表(productName)。然后这个名称会出现在主工作表中第 A 列,并带有指向各自 productSheet 的链接。单个产品工作表在单元格 A2 还包含 productName。
更新:
据Darren在评论中的建议,我已经为无效的工作表名称添加了错误处理。
Option Explicit
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim mainSheet As Worksheet
Dim productSheet As Worksheet
Dim nextRow As Long
Dim lastRow As Long
Dim productName As String
Set mainSheet = ThisWorkbook.Sheets("MainSheet")
Set productSheet = ActiveSheet
productName = Application.InputBox("Product name:")
mainSheet.Cells(1, 1).Value = "Product"
lastRow = mainSheet.Cells(mainSheet.Rows.Count, 1).End(xlUp).Row
nextRow = lastRow + 1
mainSheet.Cells(nextRow, 1).Value = productName
With productSheet
On Error GoTo crit
.Name = productName
On Error GoTo 0
.Cells(1, 1).Value = "Product"
.Cells(2, 1).Value = productName
.Hyperlinks.Add Anchor:=mainSheet.Cells(nextRow, 1), _
Address:="", _
SubAddress:="'" & productName & "'!A1", _
TextToDisplay:=Sh.Name
End With
Exit Sub
crit:
MsgBox "Sheet name is invalid"
ThisWorkbook.ActiveSheet.Delete
mainSheet.Cells(lastRow + 1, 1).Clear
End Sub
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。