如何获取以特定字符串开头的特定工作表中存在的命名范围列表(例如所有以总计开头的命名范围)并获取值?我正在尝试根据日期计算住宿费用的小计和总计。我将根据日期组为每个小计分配一个唯一的名称。然后,我有一个按钮,当它完成时需要单击该按钮,以根据我唯一分配给每个小计的命名范围来计算总计。
以下是我为完成总计而编写的代码:
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
注意:“Total = Total + IntFlight.Range(N.Name).Value”中的 IntFlight 是我的工作表的名称。
上面代码的唯一问题是,它会查找工作簿中存在的所有命名范围。我只需要找到一个特定工作表中存在的命名范围,该工作表以给定的字符串和行号开头(total26:表示第 26 行的小计),然后获取要汇总为总计的值。
任何想法如何做到这一点?花了2天时间寻找答案。
提前致谢。
编辑 1(查尔斯·威廉姆斯在 belisarius 的帮助下提供的解决方案):
这就是我对 Charles Williams 的代码所做的:
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
感谢大家的帮助。现在,我需要为这个脚本提供我自己的版本。