excel vba named range properties code example
Example 1: excel vba create named range
Sub CreateNamedRange(ByRef pWorkBook As Workbook, ByVal pWorkSheetName As String, _
ByVal pRangeName As String, ByVal pAddress As String)
Dim rRange As Range
Set rRange = pWorkBook.Sheets(pWorkSheetName).Range(Chr(39) & pWorkSheetName _
& Chr(39) & "!" & pAddress)
If NamedRangeExist(pWorkBook, pRangeName) Then
pWorkBook.Names(pRangeName).Delete
End If
pWorkBook.Names.Add Name:=pRangeName, RefersTo:=rRange
End Sub
Function NamedRangeExist(ByRef pWorkBook As Workbook, pName As String) As Boolean
Dim nName As Name
For Each nName In pWorkBook.Names
If nName.Name = pName Then
NamedRangeExist = True
Exit Function
End If
Next nName
End Function
Sub TestMe()
CreateNamedRange ThisWorkbook, "Sheet1", "MyNewRange", "A1:D10"
MsgBox Range("MyNewRange").Address
End Sub
Example 2: excel vba List of all named ranges
Sub AllNamedRanges()
Dim nRangeName As Name
Dim rNamedRange As Range
Dim sNameDetails As String
Dim iIndiceWS As Long
Dim sNamedList As String
With ThisWorkbook
For iIndiceWS = 1 To .Worksheets.Count
If .Names.Count > 0 Then
For Each nRangeName In .Names
Set rNamedRange = nRangeName.RefersToRange
If Not rNamedRange Is Nothing Then
If .Worksheets(iIndiceWS).Name _
= rNamedRange.Worksheet.Name Then
sNameDetails = nRangeName.Name _
& " [" & rNamedRange.Worksheet.Name _
& "!" & rNamedRange.Address & "]"
sNamedList = sNamedList & sNameDetails & vbCrLf
End If
End If
Next nRangeName
End If
Next iIndiceWS
End With
Debug.Print sTextTemp
End Sub