Excel Name.RefersToRange: 如何检查名称对象是否引用范围?

分享于 

3分钟阅读

电脑

  繁體 雙語

问题:

Microsoft文档说明了 RefersToRange:

如果名称对象未引用范围( 例如如果它引用一个常数或者公式),则这里属性将失败。

我正在尝试迭代工作表中所有命名范围。


Private Sub Something()



 Dim namedRanges As names


 Set namedRanges = ActiveSheet.names



 Dim targetSheet As Worksheet


 Set targetSheet = Sheet1


 targetSheet.Cells.Clear



 Dim i As Integer


 For i = 1 To namedRanges.count


 targetSheet.Cells(i, 2).Value = namedRanges(i).Name


 targetSheet.Cells(i, 3).Value = namedRanges(i).RefersToRange.Address


 Next



End Sub



如果任何NamedRange没有引用范围,我的代码将失败。 如何检查名称对象是否引用某个范围,以便代码不会失败?

更新

我找到一个 hack 来做这个,但我更喜欢更清晰的方法。 我检查命名范围的字符串值是否包含一个元符号,间接告诉我如果它包含地址值( 哪个范围将):


For i = 1 To namedRanges.count


 targetSheet.Cells(i, 2).Value = namedRanges(i).Name


 If InStr(namedRanges(i).Value,"$")> 0 Then


 targetSheet.Cells(i, 3).Value = namedRanges(i).RefersToRange.Address


 End If


Next




回答 1:

这样的东西,测试是否有有效的交互在你的范围名称的usedrange的有效的交互。

警告:这确实假设你的usedrange覆盖了你的潜在范围。 我认为这是一个安全的假设

你也不认为你能用你尝试的方式来处理 ActiveSheet.Names


Private Sub Something()


 Dim nmRng As Name


 Dim rng1 As Range


 Dim rng2 As Range


 Set rng1 = Sheets(1).UsedRange


 On Error Resume Next


 For Each nmRng In ActiveWorkbook.Names


 Set rng2 = Nothing


 Set rng2 = Intersect(rng1, Range(nmRng))


 If Not rng2 Is Nothing Then Debug.Print nmRng &"" & nmRng.RefersTo.Address


 Next


 On Error GoTo 0


End Sub




回答 2:

编辑:我改变了错误处理,忽略了不提倡这种方法的常量,但是你可以使用


on error goto"label"



这看起来像


Private Sub Something()



Dim namedRanges As names


Set namedRanges = ActiveSheet.names



Dim targetSheet As Worksheet


Set targetSheet = Sheet1


targetSheet.Cells.Clear



Dim i As Integer



'skip the errors


on error goto skipName


'set start of data range


Row = 2


For i = 1 To namedRanges.count



 targetSheet.Cells(Row, 3).Value = namedRanges(i).RefersToRange.Address


 targetSheet.Cells(Row, 2).Value = namedRanges(i).Name


Row = Row + 1


skipName:


Next



'reinstate normal error trapping


on error goto 0



End Sub



错误处理现在会跳过Referstorange失败时的名称列表。



对象  REF  Excel  Refer  范围  
相关文章