Excel automatisering via OLE - undertrykke / fangst dialogboksen feil?

stemmer
2

Jeg oppdatere Excel 2007 datatilkoblinger via et C # program og OLE. Mesteparten av arbeidet er gjort av en enkelt Workbooks.RefreshAll () uttalelse.

Som er innholdet i forfriskende regneark, kan ulike ting går galt. Under oppdateringsprosessen, kan programmet gi dialogboksen feilmeldinger om Data ikke kan leses fra fil '|', og en melding om Overlapppivottabellrapporter. Begge disse er dødelig, og jeg burde være i stand til å fange disse feilene, og avslutte mitt program med en feilmelding.

Dessverre har jeg ikke synes å være i stand til å fange disse problemene, og i stedet min automatisert program sitter inntil jeg kommer sammen og trykk enter i dialogboksen.

Vet noen om det er mulig å programmatisk fange feilene vises i Excel dialogbokser, i stedet for å ha dem vises til brukeren?

Publisert på 07/10/2008 klokken 18:44
kilden bruker
På andre språk...                            


1 svar

stemmer
9

Det beste alternativet er å sette Application.DisplayAlerts eiendom til False. Det vil si, forutsatt at Excel.Application objekt variabel heter "xlApp", alt du må gjøre er følgende:

xlApp.DisplayAlerts = false;

Merk at dette vil føre til at standardsvar for å bli tatt for hver dialogboksen som normalt er hva du ønsker. (Det er ingen god måte rundt dette. Leaving DisplayAlerts = True og bruk av SendKeys kan være det eneste andre alternativet, men ville være stygg og veldig feil utsatt.)

Siden du gjør denne samtalen via OLE-automatisering, er denne samtalen kryss-prosess, og derfor vil DisplayAlerts innstillingen vedvarer til du endrer den. (Hvis kalt i-prosess, via VBA, er det skifter tilbake til å true automatisk når rutinen er fullført. Det samme problemet gjelder trolig for en VB.NET eller C # add-in kalt via en verktøylinje eller bånd kontroll, men en trenger for å teste for å være sikker.)

Svarte 07/10/2008 kl. 19:10
kilden bruker

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