[VB6 ] 請教巨集重覆執行的問題

看板Visual_Basic作者 (小雷)時間8年前 (2016/05/10 15:42), 8年前編輯推噓2(207)
留言9則, 1人參與, 最新討論串1/1
各位前輩好!! 小弟目前遇到的問題: 將MSFlexGrid的內容轉存成excel檔案 下面為片段程式碼 *------ Dim objExcelApp As Excel.Application Dim objSheet_VAC As Excel.Worksheet 在宣告這邊我沒有宣告Workbook Set objExcelApp = CreateObject("ExcelApplication") objExcelApp.Workbooks.Add '這裡新增一個工作簿 objExcelApp.Visible = True objExcelApp.ActiveWorkbook.Worksheets.Add Set objsheet_VAC = objExcelApp.ActiveWorkbook.Activesheet objsheet_VAC.name = "VAC" '以下總共會新增三個sheet並重新命名 省略用一行表示 以下為執行巨集區塊 objSheet_VAC.Activate '設定目前focus在指定sheet test '這邊是把excel錄製的巨集加入至VB6的模組內來呼叫 巨集內容只是做欄位合併跟調整字型 Set objExcelApp = Nothing Set objSheet_VAC = Nothing '---------- 目前狀況是我資料都顯示在MSFlexGrid上,我去Click轉存excel的按鈕第一次巨集 可以正常執行,此時我畫面會出現excel表格並填上我要的資料與調整格式。 再來我excel不存檔直接關閉,再執行一次轉存excel的按鈕,這時候資料還是有 正常填寫進去,但是卻沒有執行巨集作格式調整,我有試著單步除錯,發現在我 第二次執行轉存excel按紐時,程式進入巨集的第一道程式碼就跳出巨集, 而第一道程式碼是 Range("A2:N2").Select 但我比較不懷疑是巨集的程式碼造成,不知道是不是第一次我把excel關閉,沒有正確 把excel釋放掉造成? 有請各位前輩替小弟我解惑, 謝謝 -- 活在我不懂的道理 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.204.1 ※ 文章網址: https://www.ptt.cc/bbs/Visual_Basic/M.1462866139.A.816.html ※ 編輯: rex921 (210.61.204.1), 05/10/2016 15:53:55 ※ 編輯: rex921 (210.61.204.1), 05/10/2016 16:15:06 ※ 編輯: rex921 (210.61.204.1), 05/10/2016 16:55:36

05/10 21:26, , 1F
不使用excel的時候要呼叫Application.Quit
05/10 21:26, 1F

05/10 21:26, , 2F
只有把參考設定Nothing,app並不會結束
05/10 21:26, 2F

05/10 21:28, , 3F
在quit之前也應該呼叫Workbook.Close關閉活頁簿
05/10 21:28, 3F
我試試看!!感謝您。 ※ 編輯: rex921 (61.227.199.184), 05/10/2016 22:34:40 最後是把所有Set xlsheet = XXX 都把他設定成nothing 還有相關的recordset也設定 處理程序就可以正常關閉了, 過程中發現,如果在VB6使用 sheet(1).select ,但是程式並沒有create這個名稱的話 整個 set nothing就不會成功,VB6對於excel的除錯功能好像沒那麼完善, 或者該說沒有@@!! 我是從頭create excel 然後關閉excel去驗證,慢慢複製舊的程式碼, 一行一行debug ... ※ 編輯: rex921 (210.61.204.1), 05/12/2016 10:56:54 再請教一個問題... 我用excel 2003錄製了一個巨集並匯出成.bas檔案,並加入VB6的模組 內容是選取所有儲存格,文字置中加粗的功能 以下是bas檔案的程式碼 Public Sub test() Cells.Select With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .ReadingOrder = xlContext End With Selection.Font.Bold = True End Sub 只要我在主程式區呼叫這個副程式,我的Excel處理程序就關不掉, 不知道是不是.bas這個副程式的寫法不完善?導致我的主程式下次 無法再正常執行這個副程式? 煩請前輩替小弟我解惑,謝謝! ※ 編輯: rex921 (210.61.204.1), 05/12/2016 11:32:15

05/12 19:37, , 4F
沒記錯的話,Close & Quit & 設定 Nothing 就好了
05/12 19:37, 4F

05/12 19:37, , 5F
New Excel.Application 是在呼叫 Excel主程式
05/12 19:37, 5F

05/12 19:38, , 6F
凡是外部程序都不受vb6管理
05/12 19:38, 6F

05/12 19:39, , 7F
沒記錯的話,vb6程式正常結束後,被呼叫的excel也會結束
05/12 19:39, 7F
的確,當我程式關閉程序都會自動關閉!!

05/12 19:44, , 8F
vb6應該不認識什麼叫Selection
05/12 19:44, 8F
Selection是用excel錄製的巨集,還是得改成VB6看得懂得語法....

05/12 19:44, , 9F
要改成 objExcelApp.Selection
05/12 19:44, 9F
VB6與excel版本還有VBA太糾纏不清了 ,不應該本是同根生嗎...哈哈 我換個作法,先自己弄一個空白的excel檔案,然後把格式跟巨集寫在裡面. 然後VB6開啟這個空白檔案把資料寫進去,另存新檔..user開啟檔案就會自動執行巨集 就可以把格式調整好了!! 終於把頭痛的問題搞定了!!謝謝前輩。 ※ 編輯: rex921 (61.227.198.216), 05/12/2016 21:07:32
文章代碼(AID): #1NCP3RWM (Visual_Basic)