我有一个 Excel 工作簿,其中有代表日期的选项卡以及每个选项卡中的总和。虽然我可以在最后一张表中计算所有这些的总和,但是当添加新的电子表格时,我想要一个公式/宏来获得总命名表中的总和。
注意:- 所有单元格将保持不变(E56)
我不明白你在尝试什么。直到用户在新工作表中放置导致 E56 值的信息之前,我认为将 NewSheet!E56 的值添加到总工作表中没有什么意义。
但是我怀疑你需要使用事件。下面是一些必须放置在ThisWorkbook
工作簿的 Microsoft Excel 对象中的事件例程。这些只是输出到立即窗口,因此您可以看到它们何时被触发。注意:一个用户事件可以触发多个。例如,创建一个新工作表,触发:“为新工作表创建”、“为旧工作表停用”和“为新工作表激活”。
不要忘记包括
Application.EnableEvents = False
Application.EnableEvents = True
围绕这些例程之一中将触发事件的任何语句。
也许您需要使用 SheetDeactivate。当用户离开工作表时,检查 E56 中的值。如果存在,请检查其是否包含在总计表中。玩一玩。做你的用户做的事。添加到这些例程以进一步调查。祝你好运。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Debug.Print "Workbook_SheetActivate " & Sh.Name
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call MsgBox("Workbook_BeforeClose", vbOKOnly)
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Debug.Print "Workbook_SheetChange " & Sh.Name & " " & Source.Address
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Debug.Print "Workbook_SheetDeactivate " & Sh.Name
End Sub
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Debug.Print "Workbook_NewSheet " & Sh.Name
End Sub
Sub Workbook_Open()
Debug.Print "Workbook_Open"
End Sub
响应澄清要求的额外部分
下面的代码为除 TOTAL 之外的所有工作表重新计算单元格 E56 的总计,并在每次打开工作簿和每次用户更改当前工作表时将结果存储在工作表 TOTAL 中。
使用 Excel 很难获得一致的计时,但根据我的实验,您需要 500 到 1,000 个工作表,然后用户才会注意到由于重新计算而导致切换工作表的延迟。
我不确定您是否知道如何安装此代码,所以这里有简要说明。问他们是否太简短。
Alt+F11
。显示 VBA 编辑器。在左侧,您应该会看到 Project Explorer。Ctrl+R
如果没有,请单击。Project Explorer 显示将类似于:.
VBAProject (Xxxxxxxx.xls)
Microsoft Excel Objects
Sheet1 (Xxxxxxxxx)
Sheet10 (Xxxxxxxxx)
Sheet11 (Xxxxxxx)
:
ThisWorkbook
ThisWorkbook
。屏幕右上方变白。祝你好运。
Option Explicit
Sub CalcAndSaveGrandTotal()
Dim InxWksht As Long
Dim TotalGrand As Double
TotalGrand = 0#
For InxWksht = 1 To Worksheets.Count
If Not UCase(Worksheets(InxWksht).Name) = "TOTAL" Then
' This worksheet is not the totals worksheet
If IsNumeric(Worksheets(InxWksht).Range("E56").Value) Then '###
TotalGrand = TotalGrand + Worksheets(InxWksht).Range("E56").Value
End If '###
End If
Next
'Write grand total to worksheet TOTAL
' ##### Change the address of the destination cell as required
Worksheets("TOTAL").Range("D6").Value = TotalGrand
End Sub
Sub Workbook_Open()
' The workbook has just been opened.
Call CalcAndSaveGrandTotal
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
' The user has selected a new worksheet or has created a new worksheet.
Call CalcAndSaveGrandTotal
End Sub
我知道这是编程论坛,但这种特殊的“需求”似乎可以在没有所有管道的情况下解决。
我喜欢旧的隐藏的第一张和最后一张纸把戏。