quiero tener/definir un identificador único para cada fila de datos en mi hoja de datos de Excel - de tal manera que lo puedo usar al pasar los datos en adelante y se mantiene la lo mismo cuando las filas se agregan/eliminan arriba.Como llegar/set id único para la celda en Excel mediante VBA
Mis pensamientos son utilizar el atributo ID de Rango (msdn link)
lo tanto, tengo una función definida por el usuario (UDF) que pongo en cada fila que Establece/Obtiene el ID de la siguiente manera:
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
Pero esto falla en la línea mencionada con
"error definido por la aplicación o definido a objetos"
pensé que tal vez es una de esas limitaciones de la UDF, sino también consigo el mismo error si lo intento de código se activa con un botón de la cinta ...
¿Alguna otra sugerencia sobre cómo mantener los identificadores consistentes - tal vez Debería completar las celdas a través de mi botón de cinta, encontrar celdas sin ID y generar/establecer el valor de celda de esas ...
EDIT: Como pensé, tengo la hoja protegida, pero incluso en una celda desbloqueada todavía falla Desproteger la hoja soluciona el problema ... pero he usado "Proteger UserInterFaceOnly: = True", lo que debería permitirme hacer esto. Si permito manualmente "Editar objetos" cuando proteger la hoja también funciona, pero no veo una opción programática para eso - y necesito llamar a la función de protección en Autoopen para activar la función UserInterfaceOnly ...
Supongo que necesito desactivar/activar la protección alrededor de mi configuración de ID, suponiendo que se puede hacer en una UDF ... que parece que no puede, ya que eso no funciona, ni ActiveSheet.unprotect ni ActiveWorkbook.unprotect :(
Gracias de antemano Chris
Su código funciona bien aquí en Excel 2003 y 2007. ¿Su libro no está bloqueado o algo así? – Ant