虎哥你好,我做了一个计算软件,计算核心部分是在Excel表上,窗体部分只负责输入和读取,代码几乎都是你给的,相信你还记得,这样就有一个问题了:所有的Excel表全暴露在外面,不但不美观也不安全,我不希望表格里面的东西被别人知道,现在我想将他们全部添加到资源文件里面(是.res吧)。
    我说一下Excel表被添到资源文件后我所知道的一个事件过程:当按下命令按钮之后资源文件里面的Excel表被提取出来------程序打开Excel完成计算------关闭Excel表并将其删除。总之整个过程还是在资源文件的外面进行的。不知道你有没有什么方法可以在资源文件内部完成对Excel的操作,这样是最好的。
    如果你暂时没有办法的话请帮我看看下面代码:

Private Sub Command1_Click()
    Dim xApp As Object
    Dim xBook As Object
    Dim xSheet As Object
    Dim Address()
    Dim Addres()
    Dim addre()
    Dim i As Long
    Dim sPath As String
    Dim DK() As Byte
    
    On Error GoTo ErrHandler    Set xApp = CreateObject("Excel.Application")
    xApp.Visible = False
    sPath = App.Path & "\多原子.xls"
    DK = LoadResData(101, "CUSTOM")
    Open sPath For Binary Access Write As #1
    Put #1, , DK
    Close #1
    
    Set xBook = xApp.Workbooks.Open(App.Path & "\多原子.xls")
    Set xSheet = xBook.Sheets(1)
    
    Address = Array("N2", "N3", "O17", "D15", "D13", "D17", "E6", "E7", "O5", "R3", "P21", "Q21")
    Addres = Array("N2", "N3", "P19", "D15", "D13", "D17", "E6", "E7", "O5", "R3", "P21", "Q21")
    addre = Array("N2", "N3", "Q19", "D15", "D13", "D17", "E6", "E7", "O5", "R3", "P21", "Q21")
    For i = 0 To 11
    If Option3(2).Value = True Then
        xSheet.Range(Address(i)).Value = Text1(i).Text
        xSheet.Range("P19").Value = 0
        xSheet.Range("Q19").Value = 0
    End If
    If Option3(0).Value = True Then
        xSheet.Range(Addres(i)).Value = Text1(i).Text
        xSheet.Range("O17").Value = 0
        xSheet.Range("Q19").Value = 0
    End If
    If Option3(1).Value = True Then
        xSheet.Range(addre(i)).Value = Text1(i).Text
        xSheet.Range("O17").Value = 0
        xSheet.Range("P19").Value = 0
    End If
    Next    Set xSheet = Nothing
    xBook.Save
    Set xBook = Nothing
ExitEntry:
    Set xSheet = Nothing
    If Not xBook Is Nothing Then
        xBook.Close False
        Set xBook = Nothing
    End If
    If Not xApp Is Nothing Then
        xApp.Quit
        Set xApp = Nothing
    End If
     
    Exit Sub
   
ErrHandler:
    MsgBox err.Description
    Resume ExitEntry
   Kill sPath
End Sub
这段代码虽然完成了对Excel的封装,但是计算过程还是在资源文件外面,而且计算完成之后被释放出来的Excel表并没有被删除掉,请帮我实现删除这个临时Excel表的过程。

解决方案 »

  1.   

    删除用kill sPath不就好了么?
      

  2.   

    不释放出来操作应该不太可能吧?
    不过提个建议:既然不想让人知道,释放出来扩展名不要叫那么明显,比如可以叫"多原子.dat",另外,释放的路径可以选隐蔽些
      

  3.   

    你可以释放到系统目录下面...
    用完后Kill 删除
    '系统目录API------ 得到系统安装目录 \WINDOWS\system32
    Private Declare Function SHGetSpecialFolderLocation Lib "Shell32" (ByVal hwndOwner As Long, ByVal nFolder As Integer, ppidl As Long) As Long
    Private Declare Function SHGetPathFromIDList Lib "Shell32" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal szPath As String) As Long
    Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    Const MAX_LEN = 200 '字符串最大长度
    Dim sTmp As String * MAX_LEN '存放结果的固定长度的字符串
    Dim System32 As String
    Public Sub GetResFile(ByVal ResID As Long, ByVal FileName As String)
         Dim bFile() As Byte
         bFile = LoadResData(ResID, "CUSTOM")       '将自定义资源中资源读入数组
         If Dir(FileName) = "" Then                 '只有文件不存在时,才释放
         Open FileName For Binary As #1
             Put #1, , bFile
         Close #1
         End If
    End Sub
    Private Sub Form_Load()    '程序一运行后释放
    Length = GetSystemDirectory(sTmp, MAX_LEN)
    System32 = Left(sTmp, Length)
    Call GetResFile(101, Left(sTmp, Length) & "\多原子.xls")   '你文件101
    End SubPrivate Sub Form_Unload(Cancel As Integer)   '程序关闭时删除释放文件
    Length = GetSystemDirectory(sTmp, MAX_LEN)
    If Dir(Left(sTmp, Length) & "\多原子.xls") <> "" Then
    Kill Left(sTmp, Length) & "\多原子.xls"
    End If
    End Sub
    End Sub
      

  4.   

    什么东西要用EXCEL啊,还不如用文本文挡算了
      

  5.   

    如果想再安全点的话就把VBA中的计算移到VB中
      

  6.   

    既然计算核心部分是在Excel表上,那么能不能不用excel的表,而改为由vb引用excel的运行库来进行相关的计算?
      

  7.   

    8楼何解,怎么方便的将Excel表的计算转移到VB程序中?
      

  8.   

    ...
        If Not xApp Is Nothing Then 
            xApp.Quit 
            Set xApp = Nothing 
        End If 
        On Error Resume Next
        Kill App.Path & "\多原子.xls"
        On Error Goto 0
        Exit Sub 
      
    ErrHandler:
    ... 
    既然要删除,那么 xBook.Save 就不是必须的。
      

  9.   

    其实最好的方法是用 OLE 控件:
    1)在窗体上添加一个 OLE 控件,设置 Visible = False
    2)在控件上右键菜单,选“Insert Object...”
     选“新建”“Microsoft Office Excel Worksheet”(你可以选“由文件创建”)
    3)在控件上右键菜单,选“Open...”
      将 C1 的公式设置为 =A1*B1
    4)下面是调用的例子
    Private Sub Command1_Click()
        With OLE1.object '<- 这是 Excel.WorkBook 对象'
            .Sheets(1).Range("A1") = 10
            .Sheets(1).Range("B1") = 20
            MsgBox .Sheets(1).Range("C1")
        End With
    End Sub