如何使用VBA设置Excel单元的名称

时间:2010-02-17 12:30:16

标签: excel-vba vba excel

我需要为调用特定用户定义函数的单元格设置唯一名称。 所以我试着在函数中设置一个名称,如下所示

Dim r As Range
set r = Application.Caller

r.Name = "Unique"

但这不起作用。请帮忙

谢谢

4 个答案:

答案 0 :(得分:6)

以下代码将单元格A1设置为名称“MyUniqueName”:

Private Sub NameCell()

Dim rng As Range
Set rng = Range("A1")
rng.Name = "MyUniqueName"

End Sub

这有帮助吗?

修改

我不确定如何以简单的方式,优雅的方式实现您的需求。我确实管理过这个黑客 - 看看这是否有帮助,但你很可能想要扩充我的解决方案。

假设我在VBA中有以下用户定义的函数,我在工作表中引用:

Public Function MyCustomCalc(Input1 As Integer, Input2 As Integer, Input3 As Integer) As Integer

MyCustomCalc = (Input1 + Input2) - Input3

End Function

每次调用此函数时,我都希望为该函数调用的单元格指定一个名称。为此,如果您在VBA项目中转到“ThisWorkbook”并选择“SheetChange”事件,则可以添加以下内容:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Left$(Target.Formula, 13) = "=MyCustomCalc" Then
    Target.Name = "MyUniqueName"
End If
End Sub

简而言之,此代码检查调用范围是否使用用户定义的函数,然后在此实例中为范围指定名称(MyUniqueName)。

正如我所说,上述情况并不好,但它可能会给你一个开始。我找不到将代码嵌入用户定义函数并直接设置范围名称的方法,例如使用Application.Caller.AddressApplication.Caller.Cells(1,1)等。我确信有一种方法,但我担心我在VBA上生锈了...

答案 1 :(得分:0)

我使用了此子项来遍历工作表的第一行,如果第一行中有一个值,则会将该值设置为该单元格的名称。它是基于VBA的,因此有些粗糙和简单,但是可以完成工作!

Private Sub SortForContactsOutlookImport()

    Dim ThisCell As Object
    Dim NextCell As Object
    Dim RangeName As String

    Set ThisCell = ActiveCell
    Set NextCell = ThisCell.Offset(0, 1)

    Do
        If ThisCell.Value <> "" Then
            RangeName = ThisCell.Value
            ActiveWorkbook.Names.Add Name:=RangeName, RefersTo:=ThisCell
            Set ThisCell = NextCell
            Set NextCell = ThisCell.Offset(0, 1)
        End If

    Loop Until ThisCell.Value = "Web Page"

End Sub

答案 2 :(得分:0)

我使用此子程序,没有进行正式的错误处理:

Sub NameAdd()

    Dim rng As Range
    Dim nameString, rangeString, sheetString As String

    On Error Resume Next

    rangeString = "A5:B8"
    nameString = "My_Name"
    sheetString = "Sheet1"

    Set rng = Worksheets(sheetString).Range(rangeString)

    ThisWorkbook.Names.Add name:=nameString, RefersTo:=rng

End Sub

要删除名称:

Sub NameDelete()
    Dim nm As name

    For Each nm In ActiveWorkbook.Names
        If nm.name = "My_Name" Then nm.Delete
   Next

End Sub

答案 3 :(得分:0)

您可以继续进行 Range("A1") = "Unique"