<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Automazione VBA. Ho notato che i grafici non si avviano fino a quando lo script non ha finito. Devo vederli mentre lo script è in esecuzione, c'è un modo per risolvere questo problema per favore?
Inoltre, presumo correlato. La macro crea diversi grafici. Ma apparentemente a caso alcuni di loro non riescono a lanciare. Vengono visualizzati nell'elenco Finestra nella finestra iniziale, ma non vengono visualizzati finché non vengono avviati manualmente. Presumo che sto facendo qualcosa di sbagliato, ma non so cosa sia.
Grazie per l'assistenza.
Penso che sia preferibile. Ogni volta che si crea l'istanza JMP in una subroutine e quindi si annulla il puntatore dell'applicazione all'uscita, possono verificarsi problemi con l'automazione. La creazione dell'istanza JMP e il suo trasferimento, assicurando che la sua durata permanga per la durata dell'intera operazione, è solitamente l'approccio migliore.
Nel tuo caso, l'inizializzazione delle finestre sottostanti è probabilmente il problema. Sembra che il tuo nuovo approccio dia loro più tempo per essere creato, quindi quando li rendi visibili l'inizializzazione è completa e una rapida uscita non danneggerà le cose.
Brian
Forse ho trovato il problema, forse potresti commentare.
Il codice stava generando una serie di grafici, quindi inviava la matrice di grafici da lanciare e rendere visibile
Ciò si è dimostrato instabile e dipende dal tempo. cioè - fallirebbe più spesso con tabelle di dati più grandi
Ciclo continuo
Genera grafici (indice)
Il prossimo
Ciclo continuo
Grafici (Index) .Launch
Grafici (Indice). Visibile = Vero
Il prossimo
L'ho modificato per avviare il grafico alla generazione e inviare l'array di grafici per renderlo visibile.
Finora, non ho osservato alcun comportamento aberrante
Ciclo continuo
Genera grafici (indice)
Grafici (Index) .Launch
Il prossimo
Ciclo continuo
Grafici (Indice). Visibile = Vero
Il prossimo
Questo potrebbe essere difficile da replicare. Suggerirei di provare una sospensione nella subroutine LaunchCharts effettiva dopo la chiamata visibile. Impostare le variabili su Nothing alla fine, mentre la buona pratica, significa che possono essere chiuse.
Brian
Posso peggiorare le cose aggiungendo più Sleep (). Generalmente questa configurazione non riesce a lanciare il primo grafico, ma verranno avviati tutti i successivi.
Sub GenChartsReview (Filtro come variante, _
Raggruppa come variante, _
Iter1 As Variant, _
Iter2 As Variant, _
Iter3 As Variant, _
Statistiche come varianti, _
Iterate As Boolean)
Dim APPjmp, TBLjmp, DOCjmp
GetJMP APPjmp, TBLjmp, DOCjmp
Dim Text As String
Dim Success As Boolean
Dim Stat, A, B, C, Index, PlotIndex, RowFilter ()
Dim VChart () As JMP.Variability
Se Iterate Then
Se IsReal (Iter1) Then ReDim VChart ((UBound (Iter1, 2) + 1))
Se IsReal (Iter2) Then ReDim VChart (UBound (VChart) * (UBound (Iter2, 2) + 1))
Altro
ReDim VChart (1)
Finisci se
Indice = 0
Per A = 0 A UBound (Iter1, 2)
Per B = da 0 a UBound (Iter2, 2)
Successo = Vero
Cancella RowFilter ()
AddFilters RowFilter, Filter
ClearRowStates TBLjmp
Se IsValid (RowFilter) Then Success = ExcludeGroup (RowFilter, TBLjmp)
DoEvents
Se Iterate Then
Se IsReal (Iter1) Then IncludeItem Iter1 (0, A), Iter1 (1, A), TBLjmp
DoEvents
Se IsReal (Iter2) Then IncludiItem Iter2 (0,
, Iter2 (1,
, TBLjmp
DoEvents
Finisci se
Imposta VChart (Indice) = DOCjmp.CreateVariabilityChart
In caso di successo, quindi GenerateVarCharts VChart (Index), Stats, Group
DoEvents
Indice = Indice + 1
Dormi 200
Il prossimo
Il prossimo
Dormi 500
Se il successo allora
LaunchCharts VChart
Altro
DialogAndLive "Nessun dato da tracciare, gli elementi filtro sono selezionati?"
Finisci se
DoEvents
ClearRowStates TBLjmp
Imposta APPjmp = Nothing
Imposta TBLjmp = Nothing
Imposta DOCjmp = Nothing
End Sub
Sub LaunchCharts (VChart () As JMP.Variability)
Dim A
Per A = 0 A UBound (VChart) - 1
VChart (A) .Launch
VChart (A) .Visible = True
Il prossimo
End Sub
Se usi "Editor avanzato", in basso a sinistra troverai un'icona Allega. Oppure puoi semplicemente incollare il codice VB per darmi un'idea di quello che stai facendo.
Brian
Ciao Brian,
Apprezzo molto il tuo aiuto. Non trovo alcuna disposizione per allegare nulla.
Ciao Matt,
Mi scuso per averlo perso in qualche modo quando l'hai postato. Puoi fornire il codice sorgente VBA che stai utilizzando? In genere, se si esegue una chiamata sleep () nel codice in caso di problemi di temporizzazione, può essere d'aiuto con cose come dare il tempo di analisi per creare una finestra. Il programma di esempio di automazione di Analysis fornito con JMP (c: \ Programmi \ sas \ jmp \ 13 \ Samples \ Automation \ Visual Basic Samples \ Analysis.NET) fornisce un esempio di impostazione della chiamata a riposo. È necessario dichiarare che si sta chiamando una funzione del sistema operativo. Sto usando 13 come esempio per il percorso, ma questo codice è stato distribuito nelle ultime 5 versioni di JMP.
Spero che aiuti,
Brian Corcoran
Sviluppo JMP