2010-01-26 24 views
9

Esiste un modo per stampare un messaggio sulla console da una macro vba di Excel? Ho una piccola applicazione di console VB .NET che chiama una macro excel e mi piacerebbe che i messaggi di errore dal codice macro stampassero sulla console. Debug.print non aiuta poiché stampa solo nella finestra immediata. Qualche idea?Come posso scrivere sulla console dal codice vba di Excel?

+0

Questo è principalmente perché la finestra immediata è in vigore la "console" per le applicazioni VBA. –

risposta

7

Ho trovato che non c'è comunicazione tra un progetto VB .NET e una macro che chiama: la macro non può accedere alla console di VB e non può restituire un'eccezione. Se si verifica un errore nella macro, non viene rilevato dal codice VB .NET. Il progetto VB chiama solo la macro, esegue, e quindi il progetto continua a funzionare, senza sapere cosa è successo nella macro. Il modo in cui mi sono aggirato su questo era che avevo la macro scrivere l'errore in una cella specifica designata nel foglio di calcolo di Excel, e poi il progetto VB lo leggeva e lo usava per determinare se c'era un errore, e poi lo scriveva al console se c'era. Una specie di trucco, ma ha funzionato. Grazie per tutti i suggerimenti!

1

Passare un percorso di file e scrivere tutti gli errori nel file.

5

È possibile provare a utilizzare Debug.WriteLine() per inviare le informazioni di debug alla finestra di Visual Studio Output, ma ho la sensazione fastidiosa che non si possa fare a meno che non si stia scrivendo un'applicazione Console.

Se effettivamente non funziona, provare a utilizzare il metodo Console.SetOut() per reindirizzare le stringhe a un StreamWriter, che potrebbe essere un file sul proprio computer. Non l'ideale, ma forse una soluzione praticabile?

0

È possibile creare un componente COM nell'app VB.NET che è possibile chiamare da VBA e scrivere nella console dell'applicazione.

+2

Ne vale la pena? Io non la penso così – ChaosPandion

+0

Dipende dalla situazione. Abbiamo un'applicazione .net che fa un po 'di roba quindi lancia rapporti Excel. I dati per i report vengono recuperati tramite un'interfaccia COM da VBA in Excel in modo che l'utente possa personalizzare il report. Al momento non lo facciamo, ma posso vedere il momento in cui potremmo dover visualizzare gli aggiornamenti di stato dal report nell'app principale che ha lanciato i report. – burnside

0

Perché non si restituisce una stringa contenente i messaggi di errore dalla macro al codice .Net e il codice .Net lo scrive nella console?

In alternativa, se si tratta di errori reali, generare errori dalla macro utilizzando Err.Raise e gestirli nel codice .Net con un blocco Try Catch che scrive i dettagli sulla console.

11

ho dovuto usare Debug.Print() come Debug.Write() e Console.WriteLine() non ha funzionato