none
VB6 引用 excel 2007 發生異常 ... RRS feed

  • 問題

  • 我用vb6開啟一excel檔另存!!
    在XP及office 2000,2003 中沒問題!
    在XP 及 office 2007中產生error!!
    以下為程式碼供各位大大解津!!!  THANKS!!

    Public appExcel As Excel.Application
    Public wbExcel As Excel.Workbook

    Public Sub creat_excel_object(rp_type As Integer)
    On Error GoTo ErrHandler
    Dim hWnd As Long

    'Open Excel
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then   
        Set appExcel = CreateObject("excel.application")
    Else
        Set appExcel = GetObject("Excel.Application")
    End If

    Set wbExcel = appExcel.Workbooks.Open(App.Path & "\sys.teu")  'pw : car
    appExcel.DisplayAlerts = False
    wbExcel.SaveAs (App.Path & "\noname.xls")
    Exit Sub

    ErrHandler:
        MsgBox "請確認檔案資料正確", 48, "建立錯誤(creat_xel)"
        wbExcel.Close
        appExcel.Quit
        Set wbExcel = Nothing
        Set appExcel = Nothing
    End Sub

    2009年6月1日 上午 10:26

解答

  • 除錯期間請先用 Err.Description 和 Err.Number 等抓出真正的訊息,要給使用者用時再改成現在這樣。
    你也可以設計一個 log 機能,把錯誤記錄到一個資料檔中。
    小人物一枚。
    2009年6月1日 上午 10:41
    版主
  • ...
    1. 既然使用了 CreateObject ,就直接使用延後連結,不要提前連結跟延後連結混用。使用提前連結會綁 Office 版本。

    2. 使用 GetObject 通常是為了已經開啟的 someone.xls ,不要重複開啟,導致第二個 someone.xls 變成唯讀,所以 第一個參數 是檔名,第二個參數才是 Excel.Application ,你的程式碼是錯的,此外,Office XP 以後已經改為多重執行個體,用到 GetObject 的機會其實不大。引用線上手冊如下:

    GetObject 函數

     

           

    從檔案中傳回對 ActiveX 物件的引用。

    語法

    GetObject([pathname] [, class])

    GetObject 函數語法有下列指名引數

    單元 描述
    pathname 選擇性引數。ariant (String),含有所要擷取的物件之檔案完整路徑和名稱。如果省略了 pathnameclass 就是必要的。
    Class 選擇性引數。Variant (String),表示物件之物件類別的字串。



    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年6月1日 上午 11:40

所有回覆

  • 請問錯誤訊息,以及錯再哪一行

    2009年6月1日 上午 10:36
    版主
  • 除錯期間請先用 Err.Description 和 Err.Number 等抓出真正的訊息,要給使用者用時再改成現在這樣。
    你也可以設計一個 log 機能,把錯誤記錄到一個資料檔中。
    小人物一枚。
    2009年6月1日 上午 10:41
    版主
  • ...
    1. 既然使用了 CreateObject ,就直接使用延後連結,不要提前連結跟延後連結混用。使用提前連結會綁 Office 版本。

    2. 使用 GetObject 通常是為了已經開啟的 someone.xls ,不要重複開啟,導致第二個 someone.xls 變成唯讀,所以 第一個參數 是檔名,第二個參數才是 Excel.Application ,你的程式碼是錯的,此外,Office XP 以後已經改為多重執行個體,用到 GetObject 的機會其實不大。引用線上手冊如下:

    GetObject 函數

     

           

    從檔案中傳回對 ActiveX 物件的引用。

    語法

    GetObject([pathname] [, class])

    GetObject 函數語法有下列指名引數

    單元 描述
    pathname 選擇性引數。ariant (String),含有所要擷取的物件之檔案完整路徑和名稱。如果省略了 pathnameclass 就是必要的。
    Class 選擇性引數。Variant (String),表示物件之物件類別的字串。



    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年6月1日 上午 11:40
  • 1. 您在 [專案] -> [設定引用項目] -> 有勾選 [Microsoft Excel 12.0 Object Library] 嗎 ?

    2. check 一下您引用的版本

    2009年6月1日 下午 05:02
    版主
  • error code 1004
    2009年6月8日 下午 04:31
  • 我在xp+office2007引用Microsoft Excel 12.0 Object Library正常後
    在安裝到vista + office2007環境還是一樣error 1004!!
    是XP與Vista環境的問題嗎?

    2009年6月8日 下午 04:34
  • 以往我在xp中的舊程式安裝在98,2000都正常
    就最近有人安裝於vista中就有問題了!!
    2009年6月8日 下午 04:36
  • 本人是先找excel是否以開啟
    如果沒有就CreateObject
    有就GetObject

    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then   
        Set appExcel = CreateObject("excel.application")
    Else
        Set appExcel = GetObject("Excel.Application")
    End If

    2009年6月8日 下午 04:38
  • error code 1004
    2009年6月8日 下午 04:38
  • Vista 有 UAC ,請對方把 UAC 關掉。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年6月9日 上午 03:24