VB運行提示物件變數或With塊變數未設定報錯,求高手解決
Public file_name As String
Private Sub Command1_Click()
CommonDialog1.Filter = "EXCEL檔案(.XLSM)|*.XLSM|EXCEL檔案(.XLS)|*.XLS|所有檔案|*.*"
CommonDialog1.ShowOpen
file_name = CommonDialog1.FileName
If file_name = "" Then Exit Sub
Dim xlExcel As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlExcel = CreateObject("Excel.Application")
Set xlBook = xlExcel.Workbooks.Open(file_name)
xlExcel.Visible = False
xlBook.Sheets.Add
ActiveSheet.Name = "Temp"
xlBook.Sheets("Temp").Range("A1") = "母件編碼"
xlBook.Sheets("Temp").Range("B1") = "母件品名"
ActiveWorkbook.Save
xlBook.Close
xlExcel.Quit
'*********
'其他程式代碼
'*********
Set xlExcel = CreateObject("Excel.Application")
Set xlBook = xlExcel.Workbooks.Open(file_name)
xlBook.Sheets("Temp").Range("A1").Select
'Range(ActiveCell.End(xlUp), ActiveCell.End(xlDown)).Select
ActiveCell.CurrentRegion.Select
Selection.Copy
xlBook.Sheets("Sheet1").Range("G1").PasteSpecial
xlExcel.DisplayAlerts = False
xlBook.Sheets("Temp").Delete
ActiveWorkbook.Save
xlExcel.DisplayAlerts = True
xlBook.Close
xlExcel.Quit
End Sub

程式單獨運行這個卻是沒問題
Public file_name As String
Private Sub Command1_Click()
CommonDialog1.Filter = "EXCEL檔案(.XLSM)|*.XLSM|EXCEL檔案(.XLS)|*.XLS|所有檔案|*.*"
CommonDialog1.ShowOpen
file_name = CommonDialog1.FileName
If file_name = "" Then Exit Sub
Dim xlExcel As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Set xlExcel = CreateObject("Excel.Application")
Set xlBook = xlExcel.Workbooks.Open(file_name)
xlBook.Sheets("Temp").Range("A1").Select
'Range(ActiveCell.End(xlUp), ActiveCell.End(xlDown)).Select
ActiveCell.CurrentRegion.Select
Selection.Copy
xlBook.Sheets("Sheet1").Range("G1").PasteSpecial
xlExcel.DisplayAlerts = False
xlBook.Sheets("Temp").Delete
ActiveWorkbook.Save
xlExcel.DisplayAlerts = True
xlBook.Close
xlExcel.Quit
End Sub
uj5u.com熱心網友回復:
你這是在 Excel 的 VBA 還是 VB6 中執行的代碼?如果是 VB6 中執行的,看一下任務管理器,是不是不止一個 Excel 行程?
原因:
第一次呼叫 CreateObject("Excel.Application") 創建了一個 Excel 實體。
然后呼叫 ActiveSheet 時把第一個 Excel 關聯到了你工程參考的 Excel 中。
這時呼叫xlExcel.Quit 不會關閉實體,因為你工程有默認的參考。
第二次呼叫 CreateObject("Excel.Application") 又創建了一個 Excel 實體。
然后呼叫 ActiveCell 時其實訪問的是第一個實體,第一個作業簿已經關閉,所以沒有可用的 ActiveCell 物件。
解決方法:
代碼中的 ActiveWorkbook、ActiveSheet 、ActiveCell 、Selection 等都要通過你的 xlExcel 、xlBook 訪問。
最好是寫好代碼后把工程中對 Excel 的參考去掉,As Excel.Application 等都改為 As Object。
uj5u.com熱心網友回復:
在你的ActiveCell前加上xlExcel.,變成xlExcel.ActiveCell......
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/81838.html
標籤:VB基礎類
上一篇:VB.Net 軟示波器
下一篇:Vb動態添加控制元件
