À l'aide de VBA autre programme de contrôle entièrement
Je suis actuellement en train de travailler sur la simplification d'un processus à l'œuvre. Il implique une Châtillon IFD Compteur de Force qui utilise une connexion série pour transmettre les données. Les données sont envoyées à la Chattillon programme en tant que texte et peuvent être enregistrées uniquement comme une .dat fichier. Je vais essayer de mettre en place un classeur Excel qui peut juste ouvrir automatiquement le programme et les différentes commandes de placer les informations directement dans Excel. Les Commandes supposerait des changements dans les parts, mise à zéro du capteur, et de la transmission.
J'ai fait un peu de regarder autour et a constaté que la fonction de Coque vous permet d'accéder à l'ouverture du fichier, et devrait aider à vous permettent de contrôler, mais je n'ai pas trouvé un moyen d'appeler et de manipuler le programme via Excel. Si quelqu'un peut aider avec ce problème, ce serait grandement apprécié.
Merci d'avance!
Nate
Chatillon Programme, essentiellement des boutons à cliquer avec une souris
J'ai remarqué que le sendkeys avant. Il serait agréable de les utiliser pour les données d'appel, mais comment pourrais-je le lien dire "Entrer" à transmettre?
De recherche les fonctions de l'API
FindWindow
& FindwindowEx
ils devraient vous aider à démarrer sur la façon de naviguer à travers un processus ouvert et de leurs sous windows. SendMessage
peut parfois être utilisé pour cliquez ou entrez des choses, mais pas toujours. Au pire, vous pouvez soit l'onglet sur le bouton et entrez ou placer le curseur et cliquez sur.OriginalL'auteur ncs4180 | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
Excel et VBA peut contrôler des applications externes si ils ont une interface COM - c'est-à-dire, si vous pouvez déclarer la demande comme un objet, créer une instance de l'objet, et de voir ses méthodes et attributs.
Si vous pouvez éventuellement obtenir de un COM wrapper pour votre programme, le faire de cette façon.
Si vous ne pouvez pas... Vous n'en profitez pas de le faire à l'aide de flux e/S et un objet Shell Windows, parce que la ligne de commande DOS interfaces ne sont pas particulièrement sympathiques que d'une Interface Utilisateur, et ils sont feuilletés de breakdance dans une pâtisserie d'usine lorsque vous essayez de les utiliser comme une API en VBA.
Tout d'abord, vous avez besoin du "WshShell' objet exposé par Windows Script Host Object Model. Vous pouvez déclarer et instancier par une liaison tardive comme indiqué:
Mais la bonne méthode (qui vous donnera Intellisense baisse de valeur des propriétés et méthodes) est d'utiliser les " Outils:Références...' boîte de dialogue pour créer une référence à la bibliothèque parent, qui se trouve généralement au C:\Windows\System32\wshom.ocx
Vous pouvez déclarer l'objet Shell:
De l'exécution d'un exécutable de ligne de commande et la lecture de flux e/S en VBA
:
C'est un exemple qui ouvre une fenêtre de commande et exécute une ligne de commande exécutable, de la nourrir un commutateur de ligne de commande '-s' et un paramètre entourée de guillemets.
Noter que l'exécutable, je suis en cours d'exécution n'est PAS "regsvr32.exe" - mon objet shell est en cours d'exécution cmd.exe et qui est la source et de puits de l'I/O ruisseaux.
Vous pouvez, bien sûr, l'exécution de votre application directement. Cela pourrait fonctionner. Mais il est très commun pour le flux de sortie pour verrouiller ou "bloquer" votre appel de fonction et de ses VBA fil lorsque vous appelez .La sortie standard StdOut.ReadLine ou .La sortie standard StdOut.ReadAll - vous avez été averti.
Partager et d'en Profiter. Et, comme toujours, attention pour les sauts de ligne insérés par votre navigateur (ou par StackOverflow la zone de texte de l'interface) dans les exemples de code source.
OriginalL'auteur Nigel Heffernan