我需要为调用特定用户定义函数的单元格设置唯一名称。 所以我试着在函数中设置一个名称,如下所示
Dim r As Range
set r = Application.Caller
r.Name = "Unique"
但这不起作用。请帮忙
谢谢
答案 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.Address
或Application.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"