Excel Macro VBA: Vérifiez le contenu (presse-papier?) avant de coller
J'ai eu de sérieux problèmes avec le collage des données provenant de diverses sources dans Excel. Excel a tendance à essayer d'être intelligent, et fait toutes sortes de silly le formatage. Nous avons besoin des données sous forme de texte.
Le problème est que nous avons beaucoup d'utilisateurs, et beaucoup d'entre eux ne sont pas très expérimentés avec des ordinateurs, afin de leur demander d'utiliser le clic droit et "Coller Spécial" à chaque fois n'est pas une option.
J'ai trouvé une solution dans l'enregistrement d'une macro qui utilise la "collage Spécial" et "texte", et en remplaçant la combinaison de touches ctrl-v pour utiliser cette fonction. Il semblait fonctionner parfaitement, jusqu'à ce que j'ai marqué une cellule, copié et j'ai essayé de le coller. La macro s'est écrasé.
Donc ce que j'ai besoin est une fonction qui permet de vérifier si je suis en train de coller le texte copié, et ensuite utiliser cette ligne:
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:= _
False
Alors que si je suis coller a marqué cellule, je veux exécuter cette ligne (pour coller juste la valeur):
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Je ne suis pas très expérimenté dans l'écriture de macros VBA pour Excel (et j'espère ne jamais avoir à l'être), donc si quelqu'un a quelques conseils, je lui en serais très reconnaissant.
OriginalL'auteur erikric | 2009-07-10
Vous devez vous connecter pour publier un commentaire.
Pour l'accès au presse-papiers/manipulation, vous aurez envie d'ajouter une référence à Microsoft Forms 2.0 de la bibliothèque dans Project->Références. Vous pouvez ensuite utiliser la
MSForms.DataObject
classe qui a (entre autres) unGetFormat
méthode pour vérifier si le presse-papiers est un type particulier de données.Cette est une très bonne introduction à la gestion du presse-papiers à l'aide de
DataObject
.OriginalL'auteur Gary McGill
OriginalL'auteur Flephal
Avez-vous envisagé de faire les cellules de la cible feuille égale à Texte? Lorsqu'ils sont en Général, Excel ne c'est mieux deviner ce que vous vous attendez à voir.
D'autre part, si vous voulez vraiment mettre en œuvre collage Spécial...
Il n'y a pas de "Coller" de l'événement que vous pouvez attraper - vous devez attraper tous les lieu qu'une pâte pourrait se produire.
Par exemple, vous pouvez capturer les touches CTRL-V pression de touche si vous exécutez le code suivant lorsque le classeur démarre ("Workbook_Open"):
Cela appel de votre fonction au lieu de la Excel fonction "coller". Mettre quelque chose comme cela dans un module:
Je n'ai pas testé, c'est plus une esquisse. Notez que la Sélection pourrait être plus d'une cellule, de sorte que votre "check for marquée de la cellule" doit vérifier l'ensemble de la gamme, d'une certaine façon.
C'est juste la pointe de l'iceberg. Si vous voulez une solution complète, vous devriez vérifier cet article, qui est le trouble obsessionnel-compulsif version d'attraper toutes les Coller des appels:
OriginalL'auteur Joel Goodwin
Ce n'est pas la meilleure solution, mais c'est techniquement œuvres.
Juste essayer les deux.
OriginalL'auteur Andrew