分享

关于实时错误 '462' 远程服务器不存在或不能使用的问题 (高手请进)

 网络摘记 2015-01-23
程序功能:通过代码生成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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约