Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations bkrike on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Pause VBA code until "Shelled" event is complete

VBA How To

Pause VBA code until "Shelled" event is complete

by  ETID  Posted    (Edited  )
I can't take credit for this...and I can't remember where I got this code...but It was free for the copying, either from this site or some other Web site.

'This code substitutes "Execmd" for "Shell"....See example at bottom


'Paste this at the module level


Public PAGE_HEADER_SUPCODE As String 'PRODUCER CODE FROM PAGE HEADER VIA EXTRACT PROCEEDURE
Public PLANTCODE As String 'PRODUCER CODE FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public PLANTNAME As String 'PRODUCER NAME FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public PLANTTYPE As String 'PRODUCT TYPE FROM PAGE HEADER VIA FILE CREATED BY EXTRACT PROCEEDURE
Public TBLX As String 'ALTERENATE PRODUCER CODE FROM USER (MUST LIVE IN TABLE A TO BE VALID)
Public X As Single 'array1 marker
Public StrTable_Name(20) As String 'ARRAY1 FROM PADOT.CFG FILE
Public TBL As String 'array1 variable for padot.cfg file table names
Public WEDT As String 'week ending date variable from input box in sub CONFIRM_WE_DATE
Public LASTX As Single 'the last table in array1
Public T As Single 'timer value (NOT USED)
Public WEDT_EMAIL As String 'WEEK ENDING DATE FROM 00 PAGE HEADER TABLE FOR E_MAIL FILE NAME
Public DELAY As Long ' NOT USED
Public FINDFILE As String 'find file for zip to confirm zip files have been written
Public TITLE As String
Public OLDTBLX As String
Option Explicit

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessID As Long
dwThreadID As Long
End Type

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal _
hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CreateProcessA Lib "kernel32" (ByVal _
lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
lpStartupInfo As STARTUPINFO, lpProcessInformation As _
PROCESS_INFORMATION) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal _
hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = -1&


Option Compare Database


Public Sub ExecCmd(cmdline$)
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim ReturnValue As Integer

' Initialize the STARTUPINFO structure:
start.cb = Len(start)

' Start the shelled application:
ReturnValue = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

' Wait for the shelled application to finish:
Do
ReturnValue = WaitForSingleObject(proc.hProcess, 0)
DoEvents
Loop Until ReturnValue <> 258

ReturnValue = CloseHandle(proc.hProcess)
End Sub

'-------------------------------------------------------------------------------------------------------

Sub example()
'Example of replacing "Shell" with "Execmd"...You won't need to paste this sub/function, just the first 2

'then use this syntax in place of Shell "Your shell string here"

'you would use...

ExecCmd "Your shell string here"

End Sub





'------------------------------------------------------------
Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top