我想爲我的Excel數據表中的每個數據行都定義一個唯一的ID--這樣我可以在向前傳遞數據時使用它,當行被添加/刪除時相同。如何通過VBA在Excel中獲取/設置單元格的唯一ID
我的想法是使用範圍的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
但這未能以與
提到的線「應用程序定義或對象定義的錯誤」
我想也許它的UDF的侷限之一,但我也得到了同樣的錯誤,如果我嘗試從代碼從功能區按鈕觸發...
如何保持一致的IDS沒有其他的建議 - 也許我應該通過我的功能區按鈕填充單元格,找到沒有ID的單元格並生成/設置單元格值...
編輯: 由於Ant認爲,我保護了表格,但即使在未鎖定的單元格中,仍然失敗。取消保護工作表可以解決問題....但我已經使用了「保護UserInterFaceOnly:= True」,這應該允許我這樣做。如果我在保護工作表時手動允許「編輯對象」,它也可以工作,但我沒有看到編程選項 - 我需要在AutoOpen中調用保護功能以啓用UserInterfaceOnly功能...
我想我需要關閉/保護我的ID設置 - 假設可以在UDF中完成......它似乎不能,因爲這不起作用 - 既沒有ActiveSheet.unprotect也沒有ActiveWorkbook.unprotect :(
在此先感謝 克里斯
你的代碼工作正常,在與此在Excel 2003和2007中的書沒有被鎖定或類似的東西? – Ant 2009-06-19 11:28:00