Ho un eseguibile che io chiamo con il comando di shell:Attendere Shell per finire, poi le cellule formato - in modo sincrono eseguire un comando
Shell (ThisWorkbook.Path & "\ProcessData.exe")
L'eseguibile fa alcune calcoli, poi esporta i risultati torna Excel. Voglio poter modificare il formato dei risultati DOPO che vengono esportati.
In altre parole, ho bisogno del comando Shell prima di ATTENDERE fino a quando l'eseguibile termina il suo compito, esporta i dati e POI esegue i successivi comandi da formattare.
Ho provato il Shellandwait()
, ma senza molta fortuna.
ho avuto:
Sub Test()
ShellandWait (ThisWorkbook.Path & "\ProcessData.exe")
'Additional lines to format cells as needed
End Sub
Purtroppo, ancora, la formattazione avviene prima le finiture eseguibili.
Solo per riferimento, qui era il mio codice completo utilizzando ShellandWait
' Start the indicated program and wait for it
' to finish, hiding while we wait.
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Const INFINITE = &HFFFF
Private Sub ShellAndWait(ByVal program_name As String)
Dim process_id As Long
Dim process_handle As Long
' Start the program.
On Error GoTo ShellError
process_id = Shell(program_name)
On Error GoTo 0
' Wait for the program to finish.
' Get the process handle.
process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
If process_handle <> 0 Then
WaitForSingleObject process_handle, INFINITE
CloseHandle process_handle
End If
Exit Sub
ShellError:
MsgBox "Error starting task " & _
txtProgram.Text & vbCrLf & _
Err.Description, vbOKOnly Or vbExclamation, _
"Error"
End Sub
Sub ProcessData()
ShellAndWait (ThisWorkbook.Path & "\Datacleanup.exe")
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
End Sub
Se si tenta il codice completo su: 'http: // www.cpearson.com/Excel/ShellAndWait.aspx' – lovechillcool