Je veux avoir/définir un identifiant unique pour chaque ligne de données dans ma feuille de données Excel - de sorte que je puisse l'utiliser lors du passage des données et il reste le même lorsque les lignes sont ajoutées/supprimées au-dessus.Comment obtenir/définir un ID unique pour la cellule dans Excel via VBA
Mes pensées sont à utiliser l'attribut ID de plage (msdn link)
Donc, j'ai une fonction définie par l'utilisateur (UDF) que je place dans chaque ligne qui obtient/définit l'ID comme suit:
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
Mais cela échoue à la ligne mentionnée avec
« erreur définie par l'application ou défini objet »
Je pensais que peut-être son une de ces limites de UDFs, mais je reçois aussi la même erreur si j'essayer à partir du code déclenché à partir d'un bouton de ruban ...
Toutes les autres suggestions sur la façon de garder ids cohérentes - peut-être Je dois peupler les cellules via mon bouton ruban, trouver des cellules sans ID et générer/définir la valeur de la cellule de ces ...
EDIT: Comme Ant pensée, j'ai la feuille protégée, mais même dans une cellule déverrouillée échoue toujours. Déprotéger la feuille résout le problème .... mais j'ai utilisé "Protect UserInterFaceOnly: = True" ce qui devrait me permettre de le faire. Si j'autorise manuellement "Modifier les objets" lorsque je protège la feuille, cela fonctionne également, mais je ne vois pas d'option programmatique pour cela - et je dois appeler la fonction Protéger en AutoOpen pour activer la fonction UserInterfaceOnly ...
Je suppose que je dois activer/désactiver la protection autour de mon paramètre ID - en supposant que cela peut être fait dans un UDF ... ce qui semble ne pas pouvoir, car cela ne fonctionne pas - ni ActiveSheet.unprotect ni ActiveWorkbook.unprotect :(
Merci à l'avance Chris
Votre code fonctionne correctement dans Excel 2003 et 2007. Votre livre n'est pas verrouillé ou quelque chose comme ça? – Ant