各位高人:
    请教一个小问题:我在用vb控制往excel中写数据时,如果这个文件已经处于打开状态,写的时候老是不正确,我有什么办法可以判断excel文件处于打开状态,然后将其关闭后再在我的程序中打开进行数据写入,或者有什么更好的办法可以实现。我觉得关闭后在程序中打开,安全一点。请高人指点。    再问:如何用vb代码控制删除sheet,我用了如下代码,可是实现不了,不知道为什么
  i = xlBook.Sheets.Count
        Dim a As String
        While (i > 1)
            If (xlBook.Sheets(i).Name <> xlsLeave$) And (xlBook.Sheets(i).Name <> xlsPlan$) And (xlBook.Sheets(i).Name <> xlsManufacture$) And (xlBook.Sheets(i).Name <> xlsSale$) Then
                a = xlBook.Sheets(i).Name
                Sheets(a).Select
                ActiveWindow.SelectedSheets.Delete
            End If
            i = i - 1
        Wend
        xlBook.Save
        Set xlsheet = Nothing急!请高人指点一二。
谢谢大家

解决方案 »

  1.   


      下面函数仅供参考,原理就是试图建立一个文件.如果该文件已经被别的程序打开,则会返回TRUE.否则,返回FALSE. *注意:我仅仅提供一种思路.由于该程序存在极大的危险.即如果该文件不存在.它会建立.如果该文件并未被别的文件打开.则会覆盖原来的文件.Public Function FileCheck(Filename As String) As Boolean
         Dim FileID As Long
         
         On Error Resume Next
         
         FileID = FreeFile()
         Open Filename For OutPut As #FileID
         Close #FileID
         FileCheck = (Err.Number = 0)
         Err.Clear
    End Function
      

  2.   

    我觉得可以用API函数FindWindow来判断是否有指定的文件被打开。
    不过我还是觉得修改VB程序使其适应EXCEL才是正途,否则别人用起来会很不方便。
      

  3.   

    第一种方法我使用过,效果的确不好,能否提供一段用findwindow来实现的代码?谢谢
      

  4.   

    有没有findwindow的源代码谢谢。
      

  5.   

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Const WM_CLOSE = &H10Private Sub Form_Load()
       Dim classname As String * 64
       GetClassName Me.hwnd, classname, 64
       wnd = FindWindow(classname, "Lock")           '检查程序标题
       If wnd <> 0 Then
          SendMessage wnd, WM_CLOSE, 0, 0
       End If
       Form1.Show: Unload Me
    End Sub
    以上是我编写的防止程序运行两个实例的代码,可以参照