Tôi muốn có/xác định id duy nhất cho mỗi hàng dữ liệu trong bảng dữ liệu Excel của mình - để tôi có thể sử dụng nó khi truyền dữ liệu trở đi và nó vẫn là giống nhau khi các hàng được thêm vào/xóa trên nó.Cách nhận/đặt id duy nhất cho ô trong Excel qua VBA
những suy nghĩ của tôi là sử dụng thuộc tính ID của Phạm vi (msdn link)
Vì vậy, tôi có một người dùng được xác định chức năng (UDF) mà tôi đặt trong mỗi hàng mà được/bộ ID như sau:
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
Nhưng điều này không thành công ở dòng nhắc đến với
"ứng dụng xác định hoặc đối tượng được xác định lỗi"
Tôi nghĩ có lẽ đó là một trong những hạn chế của UDF, nhưng tôi cũng gặp lỗi tương tự nếu tôi thử mã đó từ mã được kích hoạt từ nút ruy-băng ...
Bất kỳ đề xuất nào khác về cách giữ id nhất quán - có lẽ Tôi nên cư trú các tế bào thông qua nút ribbon của tôi, tìm các tế bào không có ID và tạo/thiết lập giá trị di động của những người ...
EDIT: Như Ant nghĩ rằng, tôi có tấm bảo vệ, nhưng ngay cả trong một tế bào mở khóa nó vẫn không thành công. Unprotecting tờ sửa chữa vấn đề .... nhưng tôi đã sử dụng "Bảo vệ UserInterFaceOnly: = True" mà nên cho phép tôi làm điều này. Nếu tôi tự cho phép "Chỉnh sửa đối tượng" khi tôi bảo vệ trang tính thì nó cũng hoạt động, nhưng tôi không thấy tùy chọn có lập trình cho điều đó - và tôi cần gọi hàm Protect trong AutoOpen để bật tính năng UserInterfaceOnly ...
Tôi đoán tôi cần phải tắt/bật bảo vệ xung quanh cài đặt ID của tôi - giả sử rằng có thể được thực hiện trong UDF ... mà có vẻ như nó không thể, vì điều đó không hoạt động - không ActiveSheet.unprotect hoặc ActiveWorkbook.unprotect :(
Cảm ơn trước Chris
Mã của bạn hoạt động tốt ở đây trong cả Excel 2003 và 2007. Sách của bạn không bị khóa hoặc giống như vậy? – Ant