
Edmund Richardson
0
2136
258
Lige når jeg tænkte, at jeg var færdig med min seneste batch af VBA-tip og -tricks Sådan sendes e-mails fra et Excel-regneark ved hjælp af VBA-scripts Sådan sendes e-mails fra et Excel-regneark ved hjælp af VBA-scripts Vores kodeskabelon hjælper dig med at opsætte automatiserede e-mails fra i Excel ved hjælp af Collaboration Data Objects (CDO) og VBA-scripts. , Opdagede jeg endnu en virkelig rigtig cool teknik, som enhver kan bruge til let at videregive information mellem to applikationer, der bruger VBA som back-end scripting sprog.
Det, der er fantastisk ved VBA, er, at det giver dig så mange funktioner og værktøjer 3 måder at åbne applikationer & Windows maksimeret med VB-script [Windows] 3 måder til at åbne applikationer & Windows maksimeret med VB-script [Windows] Hvis der er en ting jeg elsker at gøre, det er at skrive VB-scripts. Uanset om det er en Windows Script-fil eller et VBA-script i et program, giver scripting muligheden for at tilføje funktionalitet til applikationer ... der normalt er en del af VB-applikationer, omend i en noget udvandet version.
En af de mest frustrerende dele af at arbejde med VBA inden for specifikke applikationer er, at det ikke altid er nemt at få to applikationer til “tale” til hinanden. Dette skyldes, at alle de variabler, du bruger, kun er tilgængelige inden for selve applikationsomfanget, ikke fra andre steder på computeren.
Med det sagt, der er måder at videregive information Sådan integreres Excel-data i et Word-dokument Sådan integreres Excel-data i et Word-dokument I løbet af din arbejdsuge er der sandsynligvis mange gange, at du finder dig selv ved at kopiere og indsætte oplysninger fra Excel i Word, eller på den anden måde rundt om. Sådan producerer folk ofte skriftlige rapporter ... mellem VBA-baserede applikationer som Word eller Excel. I mange tilfælde, selv i et professionelt miljø, tager programmører sig til kommunikation mellem applikationer med datafiler. Dette kan fungere, men det introducerer et element af potentiel manipulation eller fejl - som sletning eller ændring af disse filer - for at ødelægge værkerne.
En anden fremgangsmåde, du kan prøve for meget hurtige transaktioner af information mellem applikationer, er at videregive data til udklipsholderen og derefter læse disse oplysninger fra det andet program.
Videregivelse af oplysninger ved hjælp af udklipsholderen
I dette eksempel vil jeg vise dig, hvordan du passerer tre stykker tekstinformation - værdier i 3 tekstfelter - direkte til et Excel-regneark, som Word-makroen starter.
Startopsætningen vises nedenfor. Det er et Word-dokument, hvor jeg skiftede til designtilstand og oprettede 3 etiketter og 3 tekstfelter for brugeren at indtaste oplysninger. Klik på “Indsend” knappen starter dataoverførselskoden.
Dobbeltklik på den nye knap, du har oprettet i designtilstand for at komme ind i skærmbilledet VB Editor. Den første ting, du vil gøre, er at tilføje den henvisning, der giver dig adgang til systemklippebordet. Klik på Værktøjer - Referencer.
Rul ned på listen over referencer, og vælg “Microsoft Forms 2.0-objektbibliotek”. Når du klikker på Okay, har din VB-redigeringssession nu adgang til de metoder, der giver dig mulighed for at læse eller skrive fra udklipsholderen.
Det er præcis, hvad vi skal gøre nu. I funktionen til “Indsend” -knappen, jeg har indtastet følgende kode.
Dim strClipText som DataObject Dim strInputText som streng Dim errCode Som heltal Indstil strClipText = New DataObject strInputText = ThisDocument.txtBox1.Value & "," & ThisDocument.txtBox2.Value & "," & ThisDocument.txtTipClextextext PutInClipboard 'Set objWB = objExcel.Workbooks.Open ("c: /temp/MyExcelFile.xlsm") errCode = Shell ("C: \ Program Files (x86) \ Microsoft Office \ Office12 \ excel.exe c: / temp / MyExcelFile .xlsm ")
Se hvor enkel det er? StrClipText-dataobjektet er det udklipsholderobjekt, du kan manipulere. Først skal du læse alle feltværdierne ind i en enkelt strengvariabel, hvor hvert datafelt er afgrænset med et komma, eller hvad der fungerer for dig.
Derefter bliver du nødt til at oprette den Excel-fil, du åbner i Shell-kommandoen ovenfor. I Excel vil du tilføje den samme henvisning til “Microsoft Forms 2.0-objektbibliotek”, og derefter i Workbook.Open () -funktionen kan du køre følgende script.
Dim msObj Som MSForms.DataObject Dim strText Som streng Dim strResult () Som streng Dim intArrayCount Som heltal Dim x Som heltal Indstil msObj = Ny MSForms.DataObject msObj.GetFromClipboard strText = msObj.GetText strResult ("= Split," ) intArrayCount = Application.CountA (strResult) For x = 0 Til intArrayCount - 1 ThisWorkbook.Sheets ("Sheet1"). Celler (x + 1, 2) .Value = strResult (x) Næste
Igen, når du går igennem det, er dette et simpelt og meget hurtigt script. Det opretter MSForms-objektet og får de nyeste data fra udklipsholderen og placerer dem i en strengvariabel. Derefter opdeler den den enkelte, lange strengvariabel ved hvilken afgrænser du brugte i en matrix af individuelle strenge, og til sidst træder den gennem arrayet (CountA giver dig længden på arrayet) og udsender hver værdi til arket i kolonne 2.
Her er de endelige resultater.
Nu, med lidt kreativitet, kan du bruge denne teknik til at starte enhver VBA-baseret applikation og “sæt ind” information ind i det.
Du kunne altid gøre det samme ved hjælp af Excel-referencebiblioteket, men i dette tilfælde åbner du lydløst Excel-filen og manipulerer dataene inde i filen. I tilfældet ovenfor åbner du bogstaveligt talt Excel-applikationen og viser filen, og lader opstartmakroen i Excel udføre resten af arbejdet.
Dette er mest nyttigt, når der er andre applikationer, ligesom mange af brugergrænsefladeprogrammerne i mange produktionsfaciliteter, der er baseret på VBA, men muligvis ikke har de biblioteker til rådighed for tæt at forbinde de to applikationer. Brug af udklipsholderen på en automatiseret måde som denne er hurtig, nem og får arbejdet gjort.
Prøv scripts ovenfor og lad os vide, hvordan det fungerer på dit system. Skal du justere det? Har du nogle forslag til, hvordan du gør koden endnu bedre? Del dine tanker i kommentarfeltet nedenfor.
Billedkredit: Filoverførselsbillede via Shutterstock