VB6 操作 Excel 2000-2003 有以下疑問.
1. 我使用 XY 散佈圖, 假設新增五條線, 在右方的例圖說明
(Legend)中,總會有第一個不知從那兒來的 "數列1" 但是從
chart.SeriesColelection 中卻又刪除不掉.
2. 若以開啟舊檔(以GetObject("C:\abc.xls")), 抓取 sheet 中
資料, worksheet.charts.add 所新增的 chart, 可以操作其中的
Legend.Font, PlotArea, Axes 定義等都沒問題. 但是若次檔案是
從無到有 (以 CreateObject("Excel.Application") 闡生的
WorkBook 則其中上述項目都沒法更動, 好像錯誤是 Legend,
PlotArea 等非可存取項目或是物件不存在的錯誤訊息. Why?
3. worksheet.charts.add [before], [after]. 此 before,
after 該填入啥才能改新增 charts 的排列順序. 我需要他跟
worksheet 以某種順序排列, 所以需要調整. 使用 .move 也不行
4. 以 Excel 錄製巨集的方式來產生的範例程式碼要怎樣才能用?
因為他範例碼中有好些未定義即使用的 Global 物件, 我在 VB6
中不知從何找到...
5. 以 #2 所提, 開啟舊檔的方法產生出的 Workbook(此時的
Application都是在隱藏狀態), 下此 Double-click 開啟時, 都會
自動被隱藏, 要從哪設定讓他是直接可視的呢?
1. 我使用 XY 散佈圖, 假設新增五條線, 在右方的例圖說明
(Legend)中,總會有第一個不知從那兒來的 "數列1" 但是從
chart.SeriesColelection 中卻又刪除不掉.
2. 若以開啟舊檔(以GetObject("C:\abc.xls")), 抓取 sheet 中
資料, worksheet.charts.add 所新增的 chart, 可以操作其中的
Legend.Font, PlotArea, Axes 定義等都沒問題. 但是若次檔案是
從無到有 (以 CreateObject("Excel.Application") 闡生的
WorkBook 則其中上述項目都沒法更動, 好像錯誤是 Legend,
PlotArea 等非可存取項目或是物件不存在的錯誤訊息. Why?
3. worksheet.charts.add [before], [after]. 此 before,
after 該填入啥才能改新增 charts 的排列順序. 我需要他跟
worksheet 以某種順序排列, 所以需要調整. 使用 .move 也不行
4. 以 Excel 錄製巨集的方式來產生的範例程式碼要怎樣才能用?
因為他範例碼中有好些未定義即使用的 Global 物件, 我在 VB6
中不知從何找到...
5. 以 #2 所提, 開啟舊檔的方法產生出的 Workbook(此時的
Application都是在隱藏狀態), 下此 Double-click 開啟時, 都會
自動被隱藏, 要從哪設定讓他是直接可視的呢?
文章標籤
全站熱搜

目前我只找到第五題的答案...詳細內容你可以參考一下VB6的MSDN(KeyWord: CreateObject)... 如果要使Exel.Application是可視的話...只要將它的Visible屬性設為True就行了...例如: appExcel.Visible = True 至於第一題...想請問你...五條線的x值都是一樣的嗎...如果是的話...那這五條線的y值,是否為連續的五列...我在猜想可以是你不小心加了一列(純推測,因為沒看過你的原始碼)... 第二題...我沒有用過...我都是開啟既存的檔案...不過MSDN裡的CreateObject好像有談論到...如果不行的話...那只好先存檔之後再開啟...然後再進行修改...不然就是先把檔案建立好...然後開啟建立好的檔案...不好意思...能力不過...沒法幫你... 第四題...我不太曉得你所謂的global物件包含了哪些...不過可在VB 6裡開啟瀏覽物件...然後打你要的關鍵字找找看(或許你已試過)... 如果你願意的話...你可以把問題說明的更仔細一點...版上應該有許多人可以幫你...如果你有什麼新發現的話...也不要忘了教教我...^_^...因為我也想學...
謝謝 beastieboys. 不過我不是問 App.Visible. 我問的是 當我在操作產生檔案時 App.Visible 狀態我是設為 False. 這樣寫出來的 Workbook, 在我下次手動打開該檔案時, 預設都會變成是隱藏的, 我該怎樣讓他(Workbook)不要被隱藏...
請原諒我的愚笨...我不太懂你的意思... 依照你的敘述你好像是希望在VB6執行的過程中...appExcel是看不見的...也就是Excel的母視窗根本不會顯示在螢幕上...但是因為你在VB6的執行過程中...把appExcel.Visible設為False...所以...當你結束VB6的執行後...然後再去用手動(也就是連點兩下)的方式打開Workbook...這個時候appExcel是可見的...但是Workbook卻被隱藏了...不知道你的意思是不是這樣... 如果是這樣的話就有點奇怪了(我也想不通)...第一...appExcel.Visible預設值是false...所以不管你有沒有再VB6中加入這一行...appExcel.Visible還是false...第二...我查了一下...Workbook並沒有Visible的屬性...所以它應該是不會被隱藏的... 如果你的問題是appExcel會被隱藏的話...那我真的不會解決...如果是Workbook被隱藏的話...你可以在Excel的母視窗裡按Alt + W 然後再按 U (如果真的有Workbook被隱藏的話) 按了U之後可以發生作用...上面是利用手動的方式...另外,如果要用程式碼的話, ActiveWindow.Visible = True好像可以取消Workbook的隱藏...希望這對你有幫助...
剛剛做了一項實驗...如果在VB6中加上 ActiveWindow.Visible = False 或者是Windows(n).Visible = False (假設n代表Workbook的Index) 在appExcel存檔前 如果沒加上ActiveWindow.Visible = True 則Workbook的確是不可見的...所以你可能需要加上會影響Workbook可不可見的物件...但是因為Workbook並沒有Visible屬性...所以你可能是改變了ActiveWindow, Windows(n)或是與前面兩者相似的物件的Visible屬性...如果你把它的屬性改為True的話...應該就可以解決你的問題了吧...
我一向都在使用dbase III 來從事一些會計工作. 但對於人人皆喜愛和熟習的visual basic 就可說是狗咬龜---無從入手. 我一直希望能夠使用vb編寫一些程式供在excel工作用..那樣,我就可以不再使用那過時甚久的dbase III 了. 雖然我買了數本visual basic 是書本, 但好像怎樣也不是味道的. 看到人家寫的程式長長一大篇,而他們用的指令會讀又很陌生. 因為它們都像是把一些一般的動詞合併在一起 (如 application.initialize ...) 總是弄得一頭煙,不知從何入手. 但我又不能找到那些書本可以助我由開始學起. 請問諸位高手該怎樣去學才可以?
這個問題也困擾了我很久...不過凡是只要勤練...總有一天就會熟練... 個人覺得如果你想利用VB來操作Excel的話...第一件事是要了解何謂屬性,事件,和方法...它們之間的差異何在...之後是了解如何去"搜尋"哪些物件各具有什麼屬性,事件,方法(不必強背,因要只要知道如何搜尋就不怕找不到)... 上述所說的有一定程度的了解之後再去了解Excel物件結構...有很多事情觀念上是相通的...你只要懂觀念...大概就可以運用自如了...此外...遇到自己不會撰寫的指令...你可以先到Excel "錄製"巨集...注意...是"錄製"...就跟錄音一樣不須撰寫程式碼...然後開始錄製你想要的功能...錄製完成後...再開啟Exel的VBA視窗...你就可以看到剛剛所錄製的巨集如果要寫成程式碼的話該怎麼寫...如果前面的觀念你懂的話...你就可以複製你想要的程式碼...這是我個人一些學習的經驗...不過重要還是要勤練習...從練習的過程中累積經驗... 目前市面上有關Exel的VBA書籍,不算多(針對中文書而言,因為不知哪裡可以找到類似的原文書...如果有人知道的話...可以跟我說一下嗎...)目前"我覺得"(只是個人感覺啦)比較值得"看一下"是博碩文化出版的---"Excel 747個應用技巧"...這本書的好處除了範例多之外...大概也沒別的... 以上是個人的一些淺見...如果各位有什麼更好的學習方法...煩請告知...我也很想學更好的方法...
在 VB 中操作 Excel 的 Chart 範例可參考: C:\WINDOWS\SAMPLES\WSH\Chart.VBS (Win98/Me) http://tlcheng.adsldns.org/TLCheng/Basic/vbs/SAMPLES.zip (其他 OS) 若是只是要畫圖,資源順序建議如下: 1.OCX: 直接用 VB 內附的 MSChart (請參考線上手冊) 2.ActiveX DLL: Office 內附的 OWC ,可在微軟免費下載安裝,若有安裝 Office ,會直接裝進系統 (參考:http://tlcheng.adsldns.org/TLCheng/Basic/vbs/WebChart/client.htm) 3.Automation: Office 內附的 MSGraph ,Excel 也用相同的繪圖引擎,但免去 Excel的殼 (參考:印象中 VB 研究小站有範例) 4.Automation: Excel (前述範例,MSDN中也有很多範例,以前看過) 這是僅就 VB + Office 來看,當然有很多免費或其他公司賣的軟體,這裡不討論。 關於你的問題: 1.要看你的程式碼哪裡有問題。 2, 3, 4 是同一個問題,VB無法直接存取 Excel內建的預設或公用物件,所以必須依物件結構存取,在 Excel 線上說明中有 Excel 物件圖,請參考引用,此外,VB不支援指名引數,凡是有用到指名引數的部份,請查閱線上手冊,依引數預設順序使用,省略之引數請以逗號隔開 5.已經有人回了,不過我建議你可以參考上述 samples 目錄內的 Excel.vbs
很感謝各位回覆這麼多,指引很多參考例子. 但各位忽略了我提到的一個點, 我不是不會操作Excel Object Model. 而是我用 GetObject 或是 CreateObject 竟然有不同的結果... why...? 除非我抓取 .Chart 的方式有錯, 抓到的並不是 Chart 物件...
因為你並沒列出關鍵附近足夠程式碼判斷 MSDN內有一個範例函數是當目標 Excel 檔已被開啟時,用 GetObject ,當目標 Excel 未開啟時,用 CreateObject ,我引用過那個函數,也沒發生過問題。
我用以下的程式碼測試...結果正常...提供你參考... ps.我用ChartWizard繪圖...當我將CategoryTitle設定為 = "",之後的程序碼若出現.Axes(xlCategory).AxisTitle.Font.Name = "Arial"就會出現"無法取得類別AxisTitle的Font屬性"的警告 Dim appExcel As Excel.Application Dim wbExcel As Excel.Workbook Dim shExcel As Excel.Worksheet Dim R1 As Excel.Range, R2 As Excel.Range, CR As Excel.Range 'R1代表x軸的數值,R2代表y軸的數值,CR代表R1和R2的集合 Dim i As Integer Dim grp1 As Excel.ChartObject Set appExcel = CreateObject("excel.application") Set wbExcel = appExcel.Workbooks.Add Set shExcel = wbExcel.Worksheets(1) For i = 1 To 7 shExcel.Cells(1, i) = i shExcel.Cells(2, i) = i Next i Set R1 = ActiveSheet.Range(Cells(1, 1), Cells(1, 7)) Set R2 = ActiveSheet.Range(Cells(2, 1), Cells(2, 7)) Set CR = Union(R1, R2) Set grp1 = shExcel.ChartObjects.Add(100, 150, 500, 350) grp1.Chart.ChartWizard Source:=CR, gallery:=xlXYScatter, Format:=2, PlotBy:=xlRows, categoryLabels:=1, SeriesLabels:=0, HasLegend:=1, Title:="Title", CategoryTitle:="Category", ValueTitle:="Value", ExtraTitle:="" With ActiveSheet.ChartObjects(1).Chart .Axes(xlCategory).ScaleType = xlScaleLogarithmic .Axes(xlCategory).AxisTitle.Font.Name = "Arial" .Axes(xlCategory).TickLabels.Font.Name = "Arial" .Axes(xlCategory).MinorTickMark = xlTickMarkInside .Axes(xlCategory).Border.Weight = xlThin .ChartArea.Border.LineStyle = 0 .PlotArea.Interior.ColorIndex = 0 'ColorIndex = 0代表沒有顏色 .PlotArea.Border.ColorIndex = 0 .PlotArea.Border.Weight = xlThin .SeriesCollection(1).Name = "ABC" .Axes(xlValue).AxisTitle.Font.Name = "Arial" .Axes(xlValue).TickLabels.Font.Name = "Arial" .Axes(xlValue).Border.Weight = xlThin .Axes(xlValue).AxisTitle.HorizontalAlignment = xlCenter .Axes(xlValue).AxisTitle.VerticalAlignment = xlCenter .Axes(xlValue).AxisTitle.ReadingOrder = xlContext .Axes(xlValue).AxisTitle.Orientation = xlHorizontal End With
換我有問題了...利用以下的程式碼新增一個Chart到Worksheets(3)後面(Worksheets(3)是Workbook中最後一個Worksheet,另外兩個Worksheet分別是Worksheets(1)和Worksheets(2),三者排列由左至右分別是1, 2, 3)... 如果只寫第一行...即使我是用Add after...新增的Chart仍然會被安排在Worksheets(3)前面.... 但是如果我將Worksheets(3)改為1或2...結果都是正常的... 除非我加上第二行指令...否則若新增一個Chart到Workbook中最後一個Worksheet之後...好像都會發生這樣的問題... appExcel.Charts.Add after:=wbExcel.Worksheets(3) appExcel.Charts(1).Move after:=wbExcel.Worksheets("Sheet3")
好像沒看懂,VB不支援指名引數 ------------------------------------------------------------------- 建立新圖表工作表。傳回 Chart 物件。 expression.Add(Before, After, Count) expression 必選。該運算式傳回 Charts 物件。 Before 選擇性的 Variant。在新工作表被新增之前指定工作表的物件。 After 選擇性的 Variant。在新工作表被新增之後指定工作表的物件。 Count 選擇性的 Variant。要新增的工作表數目。預設值為一。 ------------------------------------------------------------------- 這是 Excel 2003 Charts.Add 的說明。 在 VBA 6.1 以後版本 (Office 2000),VBScript 5 以後版本才支援指名引數,在 VB 中是不支援,在 VB 中,appExcel.Charts.Add after:=wbExcel.Worksheets(3) 會被當成 appExcel.Charts.Add wbExcel.Worksheets(3) ,代表的是 Before ,並非是 After ,在 VB 中要改成 appExcel.Charts.Add , wbExcel.Worksheets(3) ,那個逗號很重要,代表第一個參數省略
前面 ------------------------------------------------------------------ 2, 3, 4 是同一個問題,VB無法直接存取 Excel內建的預設或公用物件,所以必須依物件結構存取,在 Excel 線上說明中有 Excel 物件圖,請參考引用,此外,VB不支援指名引數,凡是有用到指名引數的部份,請查閱線上手冊,依引數預設順序使用,省略之引數請以逗號隔開 ------------------------------------------------------------------ 就是在說這件事。
嗯...用了appExcel.Charts.Add , wbExcel.Worksheets(3)的結果跟appExcel.Charts.Add after:=wbExcel.Worksheets(3)一模一樣...我用的的是Excel 2002 + VB 6.0...以下是我測試的程式碼...可以幫我看一下哪裡錯誤嗎...謝謝... Dim appExcel As Excel.Application Dim wbExcel As Excel.Workbook Dim shExcel As Excel.Worksheet Set appExcel = CreateObject("excel.application") Set wbExcel = appExcel.Workbooks.Add Set shExcel = wbExcel.Worksheets(1) appExcel.Visible = True appExcel.Charts.Add , wbExcel.Worksheets(3) appExcel.Quit
你的問題應該是無法把該 Chart 直接放到最後,程式碼會發生問題的前提是預設 sheet count 為 3 ,不在最後一個時,則無問題。 你所提的問題我懷疑是疑似 bug 的部份,請搜尋 MSDN KB 找找看,或透過微軟技術支援服務詢問。