Chr*_*ton 5 excel vba excel-vba
我希望为Excel数据表中的每个数据行设置/定义一个唯一的ID - 这样我可以在向前传递数据时使用它,并且当在其上面添加/删除行时它保持不变.
我的想法是使用Range的ID属性(msdn link)
所以,我有一个用户定义的函数(UDF),我放在每一行获取/设置ID,如下所示:
Dim gNextUniqueId As Integer
Public Function rbGetId(ticker As String)
On Error GoTo rbGetId_Error
Dim currCell As Range
'tried using Application.Caller direct, but gives same error
Set currCell = Range(Application.Caller.Address)
If currCell.id = "" Then
gNextUniqueId = gNextUniqueId + 1
'this line fails no matter what value I set it to.
currCell.id = Str(gNextUniqueId)
End If
rbGetId = ticker & currCell.id
Exit Function
rbGetId_Error:
rbGetId = "!ERROR:" & Err.Description
End Function
Run Code Online (Sandbox Code Playgroud)
但这在提到的那条线路上失败了
"应用程序定义的或对象定义的错误"
我想也许它是UDF的那些限制之一,但如果我从带状按钮触发的代码中尝试它,我也会得到同样的错误...
关于如何保持一致id的任何其他建议 - 也许我应该通过我的功能区按钮填充单元格,找到没有ID的单元格并生成/设置那些单元格的值...
编辑:正如Ant想的那样,我保护了表单,但即使在未锁定的单元格中,它仍然会失败.取消保护工作表修复了问题....但我使用了"保护UserInterFaceOnly:= True"这应该允许我这样做.如果我在保护工作表时手动允许"编辑对象"它也可以工作,但我没有看到编程选项 - 我需要调用AutoOpen中的Protect功能来启用UserInterfaceOnly功能...
我想我需要在我的ID设置周围关闭/开启保护 - 假设可以在UDF中完成...它似乎不能,因为它不起作用 - 既不是ActiveSheet.unprotect也不是ActiveWorkbook.unprotect :(
提前致谢.克里斯