J'essaie de valider les types de données de toutes les cellules dans une plage sélectionnée par l'utilisateur sont les mêmes, en utilisant une fonction VBA. Je le code suivant (simplifié), qui fonctionne pour la plupart:Vérification des types de données dans une plage
Dim vTempRange As Variant
Dim vCell As Variant
vTempRange = DataRange.Value
For Each vCell In vTempRange
If Len(vCell) > 0 Then
'Use TypeName(vCell)
'Complete validation here
End If
Next vCell
Parfois, un utilisateur peut sélectionner une colonne de pourcentages, parfois une colonne de valeurs décimales, et parfois une valeur de temps (non associée à une rendez-vous amoureux). VBA semble voir tous les trois comme Double
, ce qui n'est techniquement pas incorrect. Le problème est que le format de la sélection sera utilisé comme partie de la sortie finale, donc 12:00:00
devrait s'afficher comme tel, et non 0.50
, ce qui est actuellement le cas.
Je regardai en utilisant quelque chose comme ceci en conjonction:
Dim vCell As Variant
For Each vCell In DataRange
If Len(vCell) > 0 Then
'Use vCell.NumberFormat
'Complete validation here
End If
Next vCell
Mais le NumberFormat
est pas conforme. par exemple, un utilisateur peut avoir un pourcentage listé comme 0%
par rapport à 0.000%
ou une durée h:m:s
par rapport à hh:mm:ss
, donc je considère qu'il est difficile de capturer correctement cette valeur.
Existe-t-il un moyen de déterminer avec précision sans intervention de l'utilisateur lorsqu'une heure est sélectionnée par rapport à l'un des autres types? La détermination d'une valeur en pourcentage par rapport à une valeur décimale 0<x<1
serait également utile, mais pas obligatoire. J'ai d'autres options à ma disposition, comme ignorer le formatage dans la sortie finale (vraiment pas souhaitable) ou demander explicitement à l'utilisateur d'identifier le type (mais ce n'est ni aussi propre ni automatique que je le voudrais).
Avez-vous envisagé d'utiliser des expressions régulières analyser le texte de la cellule, puis forcer un format spécifique basé sur le résultat? –
@RossMcConeghy Je n'avais pas; Je pense qu'il devrait y avoir une solution plus simple avec VBA. – Gaffi