名为range的VBA检索为工作表名称和单元格地址

时间:2016-05-24 20:39:05

标签: vba excel-vba excel

我有一个例程,可以为估算和实际工作表添加新的客户范围以及验证,公式和保护。我将命名范围添加到某些单元格中,因为它们在公式中的整个工作表中使用。

命名范围的代码部分如下(它可以工作,范围在名称管理器中正确命名)

执行名称范围的函数声明为

Function InitializeAddedRange(rangeToFormat As Range, _
    custName As String, currentSheet As Worksheet)

并按以下方式调用

 Call InitializeAddedRange(startCell, customerName, sourceWorksheet)

所以在下面的片段中,rangeToFormat是startCell

Set rangeToFormat = rangeToFormat.Offset(0, 1)
If currentSheet.Name = "Actual Quarterly Sales" Then
    rangeToFormat.Name = Replace(custName, " ", "") & "ActualBasePrice"
    rangeToFormat.Offset(0, 1).Name = Replace(custName, " ", "") & "ActualIsCurrent"
ElseIf currentSheet.Name = "Quarterly Sales Projections" Then
    rangeToFormat.Name = Replace(custName, " ", "") & "BasePrice"
    rangeToFormat.Offset(0, 1).Name = Replace(custName, " ", "") & "IsCurrent"
End If

在同一子程序中调用的函数中,但在上面的代码之后, 我试图在众多公式中检索范围的名称。 (startCell.Name)

Set tempRange = Range(startCell.Offset(1, 3), startCell.Offset(1, 14))
For Each cCell In tempRange
    With cCell
        .Value = 0
        .NumberFormat = "$#,##0"
        .FormulaR1C1 = "=DrumGallons*" & startCell.Name & "*R[-1]C"
        .Locked = True
    End With
Next cCell

问题是startCell.Name返回工作表名称和单元格地址,即 SalesEstimates $ B $ 12 ,而不是应该 customernameBasePrice 的命名范围。我做了很多VBA工作,我记不起遇到过这个问题。是否发生这种情况是因为子程序还没有完成,并且在函数尝试访问它之前,命名范围实际上还没有在excel中发生变化?我不认为可以这样,但我尝试过很多无效的事情。

2 个答案:

答案 0 :(得分:0)

无法对其进行测试,所以我只想回忆一下。尝试使用

Name(startCell)

获取附加到范围参考

的名称

答案 1 :(得分:0)

我认为您需要解决名称对象

rng.Name.Name