Hvordan kan jeg kalle en langvarig eksternt program fra Excel / VBA?

stemmer
2

Hva er den beste måten å kjøre et eksternt program fra excel. Det kan gå i flere minutter. Hva er den beste-praksis om hvordan du til dette. Ideelt sett,

  1. En dialogmodellen boks som lar er brukeren vet at prosessen utfører.
  2. Hvis kjør mislykkes, skal brukeren få en melding.
  3. En timeout skal håndheves.
  4. En avbryt-knapp skal være i dialogboksen.

Men noen beste praksis er velkomne. Jeg er interessert i løsninger med å kalle enten en DLL eller EXE. Helst noe som fungerer med Excel '03 eller tidligere, men jeg vil gjerne høre en grunn til å flytte til en nyere versjon også.

Publisert på 25/09/2008 klokken 16:43
kilden bruker
På andre språk...                            


1 svar

stemmer
5

Du bør sjekke ut disse to Microsoft KB-artikler

Hvordan å lansere en Win32 Application fra Visual Basic og

Slik bruker en 32-bits applikasjon for å avgjøre når en uten skall Prosess Slutter

Begge raskt gi deg rammeverket å starte en prosess, og deretter sjekke om den er ferdig. Hver av KB-artikler har noen flere referanser som kan være relevante.

Sistnevnte kunnskaps artikkelen forutsetter at du ønsker å vente på en uendelig mengde tid for din shell prosessen til slutt.

Du kan endre ret & = WaitForSingleObject (proc.hProcess, uendelig) funksjonskallet å komme tilbake etter noen begrenset mengde tid i millisekunder - erstatte INFINITE med en positiv verdi som representerer millisekunder og pakk det hele i en gjøre mens loop. Returverdien forteller deg om prosessen fullført eller timeren løp ut. Returverdien vil være null hvis prosessen avsluttet.

Hvis returverdien er null så prosessen fortsatt kjører, men kontroll er gitt tilbake til søknaden din. I løpet av denne tiden mens du har positiv kontroll av søknaden din, kan du bestemme om du vil oppdatere en slags UI status, sjekke om kansellering, etc. Eller du kan sløyfe rundt igjen og vente litt mer.

Det er enda flere alternativer hvis programmet du beskytningen til er noe du skrev. Du kan koble til et av vinduene og har program legge inn meldinger som du kan feste til og bruke som status tilbakemeldinger. Dette er sannsynligvis best igjen for en egen post hvis du trenger å vurdere det.

Du kan bruke prosessen struktur for å få en returverdi fra kalles prosessen. Prosessen trenger å returnere en verdi for at dette skal være nyttig.

Min generelle tilnærming til denne typen behovet er å:

  1. gi brukeren en ikke-modal dialogboks status ved starten av prosessen med en avbryt-knapp, som når den klikkes vil sette et flagg for å bli sjekket senere. Gir brukeren med noen status er mest sannsynlig umulig, så gi dem en medgått tid eller en av disse animerte GIF-filer kan være nyttig i å håndtere forventningene.
  2. Starte prosessen
  3. Vent til prosessen er fullført, slik kansellering sjekke hvert 500ms
  4. Hvis prosessen er fullført lukke dialogboksen og fortsetter langs.
  5. Hvis prosessen er ikke komplett, se om brukeren treffer avbryte og hvis så send en nær melding til prosessen vinduet. Dette kan ikke arbeide og avslutte prosessen kan være nødvendig - forsiktig hvis du gjør dette. Det beste alternativet kan være å forlate prosessen hvis det ikke vil lukke riktig. Du kan også se etter en timeout på dette punktet, og prøve å ta den samme banen som om brukeren treffer avbryte.

Håper dette hjelper, Bill.

Svarte 25/09/2008 kl. 23:32
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more