日付を表すタブと各タブの合計が含まれるExcelブックがあります。これらすべての合計を最終シートで取得できますが、新しいスプレッドシートが追加されたときに、数式/マクロで名前付きシートの合計の合計を取得する必要があります。
注:-すべてのセルは同じままです(E56)
あなたが何をしようとしているのかわかりません。ユーザーが新しいシートに情報を配置してE56の値になるまで、シート全体にNewSheet!E56の値を追加しても意味がありません。
ただし、イベントを使用する必要があると思います。ThisWorkbook
以下は、ブックのMicrosoftExcelオブジェクトに配置する必要のあるいくつかのイベントルーチンです。これらはイミディエイトウィンドウに出力されるだけなので、いつ起動されたかを確認できます。注:1つのユーザーイベントに対して複数のイベントを発生させることができます。たとえば、新しいワークシートを作成すると、「新しいシート用に作成」、「古いシート用に非アクティブ化」、「新しいシート用にアクティブ化」がトリガーされます。
含めることを忘れないでください
Application.EnableEvents = False
Application.EnableEvents = True
イベントをトリガーするこれらのルーチンの1つ内のステートメントの周り。
おそらく、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エディタが表示されます。左下にプロジェクトエクスプローラーが表示されます。Ctrl+R
そうでない場合はクリックしてください。プロジェクトエクスプローラの表示は次のようになります。。
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
私はこれがプログラミングフォーラムであることを知っていますが、この特定の「必要性」はすべての配管なしで解決できるようです。
私は古い隠された最初と最後のシートのトリックが好きです。