程序功能:通过代码生成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 |
|
来自: 网络摘记 > 《VB-EXCEL知识》