Option Explicit Public Declare Function FindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As LongPublic Declare Function SendMessage _ Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Long) _ As LongPublic Function ProcessKillWord() As Boolean 'Dim lpClassName As String 'Dim lpCaption As String Dim Handle As Long Dim bKill As Boolean Dim ProcessTime, Start ProcessTime = 20 Const NILL = 0& Const WM_SYSCOMMAND = &H112 Const SC_CLOSE = &HF060& On Error GoTo ExitHere Start = Timer ' lpClassName = "OpusApp" ' lpCaption = vbNullString bKill = False Do While Not bKill Handle = FindWindow("OpusApp", vbNullString) If Handle > 0 Then bKill = False Handle = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL) Else bKill = True End If If Timer > Start + ProcessTime Then GoTo ExitHere Loop ExitHere: ProcessKillWord = bKill End FunctionPublic Function KillWord() As Boolean Dim bResult As Boolean Dim wrd As Object Dim wrdDoc As Object On Error GoTo ErrHandler bResult = False Set wrd = GetObject(, "Word.Application") For Each wrdDoc In wrd.Documents wrdDoc.Close False Next wrdDoc '27Novbaijb add wrd.quit wrd.Quit If Not ProcessKillWord Then bResult = False GoTo ExitHere End If ErrHandler: If wrd Is Nothing Then bResult = True End IfExitHere: If Not wrd Is Nothing Then Set wrd = Nothing End If KillWord = bResult End Function
我原来也出现过这个问题。 也是像楼上的这么干的。不知道你是不是这样干的: Dim Exel as Object Set Exel=.....改为如下试试: Dim Exel as Excel.Application Set Exel = New Excel.Application Exel.Visible=True
VBExcel.Quit
(VBExcel = CreateObject("excel.application"))
Public Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As LongPublic Declare Function SendMessage _
Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Long) _
As LongPublic Function ProcessKillWord() As Boolean
'Dim lpClassName As String
'Dim lpCaption As String
Dim Handle As Long
Dim bKill As Boolean
Dim ProcessTime, Start
ProcessTime = 20
Const NILL = 0&
Const WM_SYSCOMMAND = &H112
Const SC_CLOSE = &HF060& On Error GoTo ExitHere
Start = Timer
' lpClassName = "OpusApp"
' lpCaption = vbNullString
bKill = False Do While Not bKill
Handle = FindWindow("OpusApp", vbNullString)
If Handle > 0 Then
bKill = False
Handle = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)
Else
bKill = True
End If
If Timer > Start + ProcessTime Then GoTo ExitHere
Loop
ExitHere:
ProcessKillWord = bKill
End FunctionPublic Function KillWord() As Boolean
Dim bResult As Boolean
Dim wrd As Object
Dim wrdDoc As Object
On Error GoTo ErrHandler
bResult = False
Set wrd = GetObject(, "Word.Application")
For Each wrdDoc In wrd.Documents
wrdDoc.Close False
Next wrdDoc
'27Novbaijb add wrd.quit
wrd.Quit
If Not ProcessKillWord Then
bResult = False
GoTo ExitHere
End If
ErrHandler:
If wrd Is Nothing Then
bResult = True
End IfExitHere:
If Not wrd Is Nothing Then
Set wrd = Nothing
End If
KillWord = bResult
End Function
Class Name Application
------------------------------- SciCalc CALC.EXE
CalWndMain CALENDAR.EXE
Cardfile CARDFILE.EXE
Clipboard CLIPBOARD.EXE
Clock CLOCK.EXE
CtlPanelClass CONTROL.EXE
XLMain EXCEL.EXE
Session MS-DOS.EXE
Notepad NOTEPAD.EXE
pbParent PBRUSH.EXE
Pif PIFEDIT.EXE
PrintManager PRINTMAN.EXE
Progman PROGMAN.EXE (Windows Program Manager)
Recorder RECORDER.EXE
Reversi REVERSI.EXE
#32770 SETUP.EXE
Solitaire SOL.EXE
Terminal TERMINAL.EXE
WFS_Frame WINFILE.EXE
MW_WINHELP WINHELP.EXE
#32770 WINVER.EXE
OpusApp WINWORD.EXE
MSWRITE_MENU WRITE.EXESendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)
关掉他是不是很简单
也是像楼上的这么干的。不知道你是不是这样干的:
Dim Exel as Object
Set Exel=.....改为如下试试:
Dim Exel as Excel.Application
Set Exel = New Excel.Application
Exel.Visible=True
我这么干过,但这样会报告非法操作的