我有一个Excel工作簿,其中我有标签,表示每个标签中的日期和总和。虽然我可以在最终工作表中获取所有这些的总和,但是当添加新的电子表格时,我想要一个公式/宏来获得总命名工作表中的总和。
注意: - 所有单元格保持不变(E56)
答案 0 :(得分:0)
我不明白你在尝试什么。在用户在新工作表中放置导致E56值的信息之前,我认为将NewSheet!E56的值添加到总工作表中没什么意义。
但我怀疑你需要使用事件。下面是一些必须放在工作簿的Microsoft Excel对象ThisWorkbook
中的事件例程。这些只是输出到立即窗口,以便您可以看到它们何时被触发。注意:可以为一个用户事件触发几个。例如,创建一个新工作表,触发:“为新工作表创建”,“为旧工作表取消激活”和“为新工作表激活”。
不要忘记包含
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
答案 1 :(得分:0)
我知道这是编程论坛,但是如果没有所有的管道,这个特殊的“需要”似乎是可以解决的。
我喜欢旧的隐藏的FIRST和LAST表格。