Excel benannten Bereich in einem Arbeitsblatt auflisten und den Wert @ abruf
Wie erhalte ich eine Liste der benannten Bereiche in einem bestimmten Arbeitsblatt, die mit einer bestimmten Zeichenfolge beginnen (z. B. alle benannten Bereiche, die mit total beginnen), und nehme den Wert auf? Ich versuche Zwischensumme und Gesamtsumme der Übernachtungskosten basierend auf dem Datum zu machen. Ich werde jeder Zwischensumme basierend auf der Datumsgruppe einen eindeutigen Namen zuweisen. Anschließend muss eine Schaltfläche angeklickt werden, um die Gesamtsumme anhand des benannten Bereichs zu berechnen, den ich jeder Zwischensumme eindeutig zugewiesen habe.
Below ist der Code, den ich für die Gesamtsumme geschrieben habe:
Sub btnTotal()
Dim Total, LastRowNo As Long
LastRowNo = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
Total = 0
For Each N In ActiveWorkbook.Names
Total = Total + IntFlight.Range(N.Name).Value
Next N
IntFlight.Range("$P" & LastRowNo).Select
Selection.NumberFormat = "$* #,##0.00;$* (#,##0.00);$* ""-""??;@"
With Selection
.Font.Bold = True
End With
ActiveCell.FormulaR1C1 = Total
End Sub
Hinweis: Der IntFlight aus "Total = Total + IntFlight.Range (N.Name) .Value" ist der Name meines Arbeitsblatts.
Das einzige Problem mit dem obigen Code ist, dass alle benannten Bereiche in der Arbeitsmappe vorhanden sind. Ich muss nur herausfinden, ob ein benannter Bereich in einem bestimmten Arbeitsblatt vorhanden ist, der mit einer bestimmten Zeichenfolge und der Zeilennummer beginnt (total26: bedeutet Zwischensumme aus Zeile 26), und dann den zu summierenden Wert als Gesamtsumme erfassen.
Irgendwelche Ideen, wie das geht? Ich habe 2 Tage damit verbracht, die Antwort zu finden.
ielen Dank im Vorau
EDIT 1 (Lösung bereitgestellt von Charles Williams mit Hilfe von belisarius):Das habe ich mit dem Code von Charles Williams gemacht:
Option Explicit
Option Compare Text
Sub btnIntFlightsGrandTotal()
Dim Total, LastRowNo As Long
LastRowNo = FindLastRowNo("International Flights")
Dim oNM As Name
Dim oSht As Worksheet
Dim strStartString As String
strStartString = "IntFlightsTotal"
Set oSht = Worksheets("International Flights")
For Each oNM In ActiveWorkbook.Names
If oNM.Name Like strStartString & "*" Then
If IsNameRefertoSheet(oSht, oNM) Then
Total = Total + Worksheets("International Flights").Range(oNM.Name).Value
End If
End If
Next oNM
IntFlights.Range("$P" & LastRowNo).Select
Selection.NumberFormat = "$* #,##0.00;$* (#,##0.00);$* ""-""??;@"
With Selection
.Font.Bold = True
End With
ActiveCell.FormulaR1C1 = Total
End Sub
Function FindLastRowNo(SheetName As String) As Long
Dim oSheet As Worksheet
Set oSheet = Worksheets(SheetName)
FindLastRowNo = oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count
End Function
ielen Dank für Ihre Hilfe. Jetzt muss ich mir eine eigene Version für dieses Skript ausdenken.