关于实时错误 '462' 远程服务器不存在或不能使用的问题 (高手请进)
程序功能:通过代码生成xls文件
问题点
1.为什么我连续生成好几次就会出现这个实时 462 错误呢,第一次肯定是好的
就是 Command1_Click执行完,接着再执行,就会出现上面的错误,请问这是什么原因,应该怎样来解决这个问题呢,万分感谢!!
2.调用了VBA之后,EXCEL.EXE这个进程就一直存在,我用了自定义的过程xlsKill 来杀进程,调用api函数的,就可以了,各位可以把最后的那句话注释掉看看,有没有更方便的方法呢
程序如下 form中响应onclick事件
Private Sub Command1_Click()
Dim xlbook As Excel.Workbook
Dim xlsheet As Excel.Worksheet
Dim xlapp As Excel.Application
Set xlapp = CreateObject("Excel.Application")
Set xlbook = xlapp.Workbooks.Add
Set xlsheet = xlbook.Worksheets(1)
xlsheet.Cells(1, 1).Value = "a1"
xlsheet.Cells(1, 2).Value = "b1"
xlsheet.Cells(2, 1).Value = "a2"
xlsheet.Cells(2, 2).Value = "b2"
xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, 1)).Select
With Selection
.NumberFormatLocal = "G/通用格式"
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
End With
xlbook.SaveAs App.Path + "\tmp.xls"
xlbook.Close
xlapp.Quit
Set xlsheet = Nothing
Set xlbook = Nothing
Set xlapp = Nothing
MsgBox "excel ok", vbOKOnly + vbInformation, "(:"
xlsKill
End Sub
killProcess.bas 程序如下
Option Explicit
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Const MAX_PATH As Long = 260
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPheaplist = &H1
Private Const TH32CS_SNAPthread = &H4
Private Const TH32CS_SNAPmodule = &H8
Private Const TH32CS_SNAPall = TH32CS_SNAPPROCESS + TH32CS_SNAPheaplist + TH32CS_SNAPthread + TH32CS_SNAPmodule
Private Const PROCESS_TERMINATE As Long = (&H1)
Public Sub xlsKill()
Dim hand As Long
Dim i As Long
Dim proc As PROCESSENTRY32
Dim snap As Long
Dim exename As String
Dim theloop As Long
snap = CreateToolhelpSnapshot(TH32CS_SNAPall, 0)
proc.dwSize = Len(proc)
theloop = ProcessFirst(snap, proc)
i = 0
While theloop <> 0
exename = proc.szExeFile
If Left(Trim(exename), 9) = "EXCEL.EXE" Then
hand = OpenProcess(PROCESS_TERMINATE, True, proc.th32ProcessID) '获取进程句柄
TerminateProcess hand, 0 '关闭进程
Exit Sub
End If
i = i + 1
theloop = ProcessNext(snap, proc)
Wend
CloseHandle snap
End Sub