Board logo

標題: [發問] 動態修正匯入圖表的最後資料列之列數所延伸的問題 [打印本頁]

作者: c_c_lai    時間: 2012-4-5 10:00     標題: 動態修正匯入圖表的最後資料列之列數所延伸的問題

我有一些疑惑想請各位大大指導,程式碼如下: (裡面分別處理了6個統計圖表)
  1. Sub getEndRows()  ' 以 Excel -> 插入 -> 折線圖、直條圖 方式一一插入於工作表單內的檢查方式。
  2.     Dim oShape As Shape
  3.     Dim numChart As Integer
  4.     Dim totalRows As Single
  5.    
  6.     numChart = 0
  7.    
  8.     Sheets("統計圖表").Select
  9.     totalRows = Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號 (實際匯入資料之總列數)
  10.             
  11.     For Each oShape In ActiveSheet.Shapes
  12.         If oShape.Type = 3 Then
  13.             numChart = numChart + 1
  14.             
  15.             Cells(lines, 36).Value = "第 " & lines - 1 & " 個圖表"           
  16.             Cells(lines, 37).Value = oShape.Name

  17.             ' Shapes(oShape.Name).Select     ' 必須先行宣告 oShape.Name 選擇,否則以下座標位置、高度、以及寬度之重新設定將予以忽略而無實質作用
  18.             ActiveSheet.ChartObjects(oShape.Name).Activate                     
  19.             Cells(lines, 38).Value = ActiveSheet.ChartObjects(oShape.Name).Name   ' 結果是等於 oShape.Name
  20.                
  21.             Select Case numChart
  22.                 Case 1
  23.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $F$1:$F$" & totalRows & ", $I$1:$J$" & totalRows)  
  24.                 Case 2
  25.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $AA$1:$AA$" & totalRows)
  26.                 Case 3
  27.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $AC$1:$AC$" & totalRows)
  28.                 Case 4
  29.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $AE$1:$AE$" & totalRows)
  30.                 Case 5
  31.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $AG$1:$AG$" & totalRows)
  32.                 Case Else
  33.                     ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $F$1:$F$" & totalRows & ", $V$1:$V$" & totalRows)   ' 圖示會分別顯示出 成交價

  34.                     ' 測試OK後,之後又增加了以下四行程式碼
  35.                     ActiveChart.Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  36.                     ActiveChart.Axes(xlCategory).MajorTickMark = xlNone
  37.                     ' 將時間軸從 0 刻度線下方(圖表預設值)移至到圖表之最下方位置 (原本預設於負值數值列處,遮蓋了負值曲線之檢視;故將之移位,將使得表格易於閱覽)
  38.                    ActiveChart.Axes(xlCategory).TickLabelPosition = xlLow     

  39.                    Cells(lines, 38).Value = ActiveChart.ChartTitle.Text  
  40.             End Select
  41.         End If
  42.     Next
  43. End Sub
複製代碼
1.     我原本是使用   Shapes(oShape.Name).Select  ,但在該統計圖表工作表單內執行時是OK,但將它搬到 ThisWorkbook 內就有錯誤訊息,於是便把它修改成
         ActiveSheet.ChartObjects(oShape.Name).Activate 便能順利執行,其原因為何? 正確應如何應用?
2.      測試OK後,之後我又增加了四行程式碼,結果顯示 Axes、TickLabels、ctiveChart.ChartTitle.Text 等語法上不正確,
                    ActiveChart.Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
                    ActiveChart.Axes(xlCategory).MajorTickMark = xlNone
                   ActiveChart.Axes(xlCategory).TickLabelPosition = xlLow     
                   Cells(lines, 38).Value = ActiveChart.ChartTitle.Text  
        請教應該要如何修正才OK?
謝謝您!
作者: GBKEE    時間: 2012-4-5 10:12

回復 1# c_c_lai
  1. Option Explicit
  2. Sub Ex()
  3.     With ActiveSheet.ChartObjects(oShape.Name).Chart
  4.         .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  5.         .Axes(xlCategory).MajorTickMark = xlNone
  6.         .Axes(xlCategory).TickLabelPosition = xlLow
  7.         Cells(Lines, 38).Value = ActiveChart.ChartTitle.Text
  8.     End With
  9. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-5 10:21

太感激您了, 對於我這個剛觸摸 VBA 的人來說的確是大有幫助,
它和一般傳統語言確實有些不同 (C/C++,Java....),謝謝您呦!
作者: c_c_lai    時間: 2012-4-5 21:40

各位大大請幫個忙:
我已把 GBKEE 前輩的 Code 引入,執行時卻出現了以下之錯誤訊息,將它們Marked又恢復正常,
起問應如何處理? 謝謝各位大大!

' 執行階段錯誤 '-2147467259 (80004005)':
' Automation 錯誤
' 無法指出的錯誤
作者: c_c_lai    時間: 2012-4-5 21:43

回復 4# c_c_lai

望了案回覆鈕,所以又再發了一次,對不起!

各位大大請幫個忙:
我已把 GBKEE 前輩的 Code 引入,執行時卻出現了以下之錯誤訊息,將它們Marked又恢復正常,
起問應如何處理? 謝謝各位大大!

' 執行階段錯誤 '-2147467259 (80004005)':
' Automation 錯誤
' 無法指出的錯誤
作者: alexliou    時間: 2012-4-6 06:44

本帖最後由 alexliou 於 2012-4-6 15:31 編輯

回復 1# c_c_lai
1.  原來第 18列的Code : Shapes(oShape.Name).Select
前面如果沒寫是在那裡的Shape時, 在這個工作表和ThisWorkbook都會發生錯誤
如果改成  ActiveSheet.Shapes(oShape.Name).Select   
我測試的結果是兩邊都可以執行
2. 那四行程式碼 我測試的結果是可以work
作者: GBKEE    時間: 2012-4-6 07:15

回復 5# c_c_lai
傳上檔案看看
作者: c_c_lai    時間: 2012-4-6 09:08

回復 7# GBKEE
小弟將實際在執行的程式碼貼上,敬請各位前輩指導。
  1. Sub setRowColumn()  ' 以 Excel -> 插入 -> 折線圖、直條圖 方式一一插入於工作表單內的檢查方式。
  2.     Dim oShape As Shape
  3.     Dim numChart As Integer
  4.     Dim totalRows As Single
  5.    
  6.     numChart = 0
  7.    
  8.     Sheets("統計圖表").Select
  9.     totalRows = Range("B" & Rows.Count).End(xlUp).Row        ' 傳回 B 欄所使用儲存格之最後一格之列號
  10.             
  11.     For Each oShape In ActiveSheet.Shapes
  12.         If oShape.Type = 3 Then
  13.             numChart = numChart + 1
  14.             
  15.             Active.Shapes(oShape.Name).Select                     ' 如果 Shapes 前加上 Active. 執行時會出現  ---->  執行階段錯誤 '424':  此處需要物件
  16.             ' ActiveSheet.ChartObjects(oShape.Name).Activate
  17.            
  18.             ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $F$1:$F$" & totalRows & ", $V$1:$V$" & totalRows)
  19.                      
  20.             With ActiveSheet.ChartObjects(oShape.Name).Chart
  21.                 .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"
  22.                 .Axes(xlCategory).MajorTickMark = xlCategoryScale
  23.                 .Axes(xlCategory).TickLabelPosition = xlLow
  24.                         
  25.                 Cells(Lines, 38).Value = .ChartTitle.Text
  26.             End With
  27.                   
  28.             ActiveSheet.Shapes(oShape.Name).Left = Cells(31, 1).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  29.             ActiveSheet.Shapes(oShape.Name).Top = Cells(31, 1).Top
  30.                     
  31.             ActiveChart.ChartArea.Height = 488                           ' 將原本設定之高度調至適度位置
  32.             ActiveChart.ChartArea.Width = 900
  33.             
  34.             ActiveChart.SeriesCollection(1).InvertIfNegative = True
  35.             ActiveChart.SeriesCollection(1).InvertColor = RGB(32, 178, 208)

  36.             With ActiveChart.SeriesCollection(1).Format.Fill
  37.                 .Visible = msoTrue
  38.                 .ForeColor.RGB = RGB(255, 69, 0)
  39.                 .Transparency = 0
  40.                 .Solid
  41.             End With
  42.         End If
  43.     Next
  44. End Sub
複製代碼
1.  如果 Shapes 前加上 Active. 執行時會出現  ---->  執行階段錯誤 '424':  此處需要物件

    Active.Shapes(oShape.Name).Select                     ' 如果 Shapes 前加上 Active. 執行時會出現  ---->  執行階段錯誤 '424':  此處需要物件
    ' ActiveSheet.ChartObjects(oShape.Name).Activate

2A.  如果 Shapes 前拿掉增加之 Active. 執行時

    Shapes(oShape.Name).Select                     
    ' ActiveSheet.ChartObjects(oShape.Name).Activate

    或者是以

    ' Shapes(oShape.Name).Select                     
    ActiveSheet.ChartObjects(oShape.Name).Activate

    方式執行時會出現  ---->  執行階段錯誤 '5':  程序呼叫或引述不正確

2B. 以 2A 模式處理,之後追蹤結果發現問題出在

    With ActiveSheet.ChartObjects(oShape.Name).Chart
        .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"
        .Axes(xlCategory).MajorTickMark = xlCategoryScale
        .Axes(xlCategory).TickLabelPosition = xlLow
                        
        Cells(Lines, 38).Value = .ChartTitle.Text
    End With

  2BA:  如果將其中 Cells(Lines, 38).Value = .ChartTitle.Text Marked起來執行

    With ActiveSheet.ChartObjects(oShape.Name).Chart
        .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"
        .Axes(xlCategory).MajorTickMark = xlCategoryScale
        .Axes(xlCategory).TickLabelPosition = xlLow
                        
        ' Cells(Lines, 38).Value = .ChartTitle.Text
    End With

    執行時會出現  ---->   執行階段錯誤 '-2147467259 (80004005)':
                          Automation 錯誤
                          無法指出的錯誤

  2BB:  如果只將其中第一項 Marked 起來執行

    With ActiveSheet.ChartObjects(oShape.Name).Chart
        ' .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"
        .Axes(xlCategory).MajorTickMark = xlCategoryScale
        .Axes(xlCategory).TickLabelPosition = xlLow
                        
        Cells(Lines, 38).Value = .ChartTitle.Text
    End With

    執行時會出現  ---->  執行階段錯誤 '5':  程序呼叫或引述不正確

  2BC:  如果只將其中質疑的兩項 Marked 起來執行

    With ActiveSheet.ChartObjects(oShape.Name).Chart
        ' .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"
        .Axes(xlCategory).MajorTickMark = xlCategoryScale
        .Axes(xlCategory).TickLabelPosition = xlLow
                        
        ' Cells(Lines, 38).Value = .ChartTitle.Text
    End With

    執行起來毫無異樣,似乎是一切正常的樣子。

這或許是我用功仍然不足,尚請指證!
作者: GBKEE    時間: 2012-4-6 09:22

本帖最後由 GBKEE 於 2012-4-6 09:35 編輯

回復 8# c_c_lai
語法錯誤    Active.Shapes(oShape.Name).Select                     
正確           ActiveSheet.Shapes(oShape.Name).Select

變數Lines 沒看到你指定值 還是會有錯誤的
Cells(Lines, 38).Value = .ChartTitle.Text

*********
2A.  如果 Shapes 前拿掉增加之 Active. 執行時
    Shapes(oShape.Name).Select                     
    ' ActiveSheet.ChartObjects(oShape.Name).Activate
    或者是以
    ' Shapes(oShape.Name).Select                     
    ActiveSheet.ChartObjects(oShape.Name).Activate
    方式執行時會出現  ---->  執行階段錯誤 '5':  程序呼叫或引述不正確
***************
2003版 皆無錯誤  請附上檔檔案方便詳看
作者: c_c_lai    時間: 2012-4-6 10:05

附上檔案,謝謝您!
[attach]10316[/attach]
作者: c_c_lai    時間: 2012-4-6 11:45

回復 9# GBKEE
不知道您有看到我船上的檔案嗎?
作者: freeffly    時間: 2012-4-6 15:23

回復 11# c_c_lai


    你是要讓你的圖表一直維持所有資料嗎
   只要有新資料圖表就要包含那各資料?
    如果是應該用定義名稱做就好比較方便吧
作者: alexliou    時間: 2012-4-6 15:31

回復  c_c_lai
語法錯誤    Active.Shapes(oShape.Name).Select                     
正確           A ...
GBKEE 發表於 2012-4-6 09:22

不好意思
ActiveSheet 打成Active
我改一下
作者: c_c_lai    時間: 2012-4-6 16:18

回復 13# alexliou
謝謝您! 我會更正測試看看。
但除此之外的所提問錯誤訊息,不知有解否 ?
檔案我再附上一次,麻煩幫我看看是哪裡有錯,謝謝您!
[attach]10323[/attach]
作者: c_c_lai    時間: 2012-4-6 16:34

回復 13# alexliou
對不起,我沒留意到您無法下載,我把程式碼附上,
剛才使用 ActiveSheet.Shapes() 執行就 OK 了,
然而 Automation 錯誤 以及 程序呼叫或引述不正確 尚未能解決,要麻煩您了!
  1. Sub setRowColumn()  ' 以 Excel -> 插入 -> 折線圖、直條圖 方式一一插入於工作表單內的檢查方式。
  2.     Dim oShape As Shape
  3.     Dim numChart As Integer
  4.     Dim totalRows As Single
  5.    
  6.     numChart = 0
  7.    
  8.     Sheets("統計圖表").Select
  9.     totalRows = Range("B" & Rows.Count).End(xlUp).Row        ' 傳回 B 欄所使用儲存格之最後一格之列號
  10.             
  11.     For Each oShape In ActiveSheet.Shapes
  12.         If oShape.Type = 3 Then
  13.             numChart = numChart + 1
  14.             
  15.             ActiveSheet.Shapes(oShape.Name).Select                     ' OK!
  16.             ' ActiveSheet.ChartObjects(oShape.Name).Activate
  17.            
  18.             ActiveChart.SetSourceData Source:=Range("$B$1:$B$" & totalRows & ", $F$1:$F$" & totalRows & ", $V$1:$V$" & totalRows)
  19.                      
  20.             With ActiveSheet.ChartObjects(oShape.Name).Chart
  21.                 ' .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm:ss"    ' 執行階段錯誤 '-2147467259 (80004005)': Automation 錯誤 無法指出的錯誤
  22.                 .Axes(xlCategory).MajorTickMark = xlCategoryScale
  23.                 .Axes(xlCategory).TickLabelPosition = xlLow
  24.                         
  25.                 ' Cells(2, 26).Value = .ChartTitle.Text                          ' 執行階段錯誤 '5':  程序呼叫或引述不正確
  26.             End With
  27.                   
  28.             ActiveSheet.Shapes(oShape.Name).Left = Cells(3, 1).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  29.             ActiveSheet.Shapes(oShape.Name).Top = Cells(3, 1).Top
  30.                     
  31.             ActiveChart.ChartArea.Height = 488                           ' 將原本設定之高度調至適度位置
  32.             ActiveChart.ChartArea.Width = 900
  33.             
  34.             ActiveChart.SeriesCollection(1).InvertIfNegative = True
  35.             ActiveChart.SeriesCollection(1).InvertColor = RGB(32, 178, 208)

  36.             With ActiveChart.SeriesCollection(1).Format.Fill
  37.                 .Visible = msoTrue
  38.                 .ForeColor.RGB = RGB(255, 69, 0)
  39.                 .Transparency = 0
  40.                 .Solid
  41.             End With
  42.         End If
  43.     Next
  44.    
  45.     Cells(1, 1).Select
  46. End Sub
複製代碼

作者: GBKEE    時間: 2012-4-6 17:11

回復 14# c_c_lai
  1. With ActiveSheet.ChartObjects(oShape.Name).Chart
  2.                 .HasAxis(xlCategory, xlPrimary) = True
  3.            '    .HasAxis(xlCategory, xlPrimary) = False
  4.                ' 圖表上所存在的座標軸  此座標為 False 下面程式會錯誤
  5.                 .Axes(xlCategory).MajorTickMark = xlNone
  6.                 .Axes(xlCategory).TickLabelPosition = xlLow
  7.             End With
  8.             ActiveSheet.Shapes(oShape.Name).Left = Cells(3, 1).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  9.             ActiveSheet.Shapes(oShape.Name).Top = Cells(3, 1).Top
  10.             ' 將原本設定之高度調至適度位置
  11.             ActiveSheet.Shapes(oShape.Name).Height = Cells(3, 1).Resize(20).Height
  12.             ActiveSheet.Shapes(oShape.Name).Width = Cells(3, 1).Resize(, 10).Width

  13.            '''*** InvertIfNegative, InvertColor  不適用這圖表的型態
  14.            '****由於對圖表的涉獵尚少 所以正在尋找答案中 或請高手相助
  15.            'ActiveChart.SeriesCollection(1).InvertIfNegative = True
  16.            'ActiveChart.SeriesCollection(1).InvertColor = RGB(32, 178, 208)
  17.            ' With ActiveChart.SeriesCollection(1).Format.Fill
  18.             '    .Visible = msoTrue
  19.             '    .ForeColor.RGB = RGB(255, 69, 0)
  20.             '    .Transparency = 0
  21.             '    .Solid
  22.             'End With
複製代碼

作者: c_c_lai    時間: 2012-4-6 19:45

回復 16# GBKEE
終於可以正常運作了,謝謝您!
唯一不解的是為何 Cells(Lines, 38).Value = ActiveChart.ChartTitle.Text 會有錯誤訊息,真希望能確切了解問題所在。
作者: c_c_lai    時間: 2012-4-6 20:27

回復 16# GBKEE
找到答案了
  1. ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)   ' 一定要先宣告 SelElement, 否則 ChartTile 執行時會出現執行階段錯誤 '5':  程序呼叫或引述不正確
  2.   ActiveChart.ChartTitle.Text = "成交價與成交量"
  3. Cells(3, 38).Value = ActiveChart.ChartTitle.Text
複製代碼

作者: GBKEE    時間: 2012-4-6 20:43

回復 18# c_c_lai
2003 沒  SelElement  這屬性
  1. Sub Ex()
  2. With ActiveSheet.ChartObjects(1).Chart
  3. .HasAxis(xlCategory, xlPrimary) = True
  4. .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  5. .Axes(xlCategory).MajorTickMark = xlNone
  6. .Axes(xlCategory).TickLabelPosition = xlLow
  7. 'Cells(Lines, 38).Value = .ChartTitle.Text '2003版中 此式有 型態不符合 的錯誤
  8. MsgBox TypeName(Lines)
  9. MsgBox Lines.Count
  10. Cells(Lines.Count + 1, 38).Value = .ChartTitle.Text
  11. End With
  12. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-6 21:57

回復 19# GBKEE
感謝感謝,實在是獲益良多!
作者: c_c_lai    時間: 2012-4-18 11:13

回復 19# GBKEE
最近實際一口氣每次 Run 了六個圖表,且是線上隨時修正匯入總筆數 (如: "統計圖表!$B$1:統計圖表!$B$" & totalRows ),
結果發現在每次自動更新後,都 Focus 在最後一個圖表上。如果此時動了鍵盤就出狀況了;
譬如: 您可能此時在 Excel 上修正某些資料,如:使用 DEL 鍵等,便將該最後 Focus 的圖表給刪除掉了,
這也是我剛剛沒留意而發生的情況。 結果只剩下了五個圖表,經仔細觀察,發覺只要 VBA 自動執行  
.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows) 後,換成第五個圖表 (最後一個圖表) 被
Focus 了。
請問我要如何避開此困擾的問題。 假設 畫完圖表後,下個指令,如: Cells(1,1).Select 當然便將移轉 Focus 到 A1 欄位上了,
但是如果您在 .SetSourceData 執行前,正在閱覽其它的工作表單,則接下來的畫面便會被切到 A1 欄位上了。
這樣處理豈不感到非常奇怪? 因為閱覽頁面突然被強制轉移了!
請問有否判斷原本閱覽頁面、或者是原本游標在哪裡,繪完圖後自動切回到原頁面? 或者是還有更棒的 Idea?
謝謝您了!
作者: GBKEE    時間: 2012-4-19 06:55

回復 21# c_c_lai
上傳檔案看看
作者: c_c_lai    時間: 2012-4-19 08:05

回復 22# GBKEE

該情況需在盤中運作時才觀察得到,因昨日盤中不小心刪掉最後的那張圖表,怕不客觀,所以今天我再觀察看看,
如果仍然一樣我再向您稟告,謝謝您!
作者: c_c_lai    時間: 2012-4-19 10:39

回復 22# GBKEE
觀察結果如:
1).   我故意先將游標 Focus 到 AZ2 欄位上,做為方便辨識之用。
[attach]10498[/attach]

2).  接下不去碰觸任何咚咚,觀察齊資料動態處哩,只要它一回寫 getEndRows ,
      動作結束後便會自動  Focus 到 "主力、散戶、與成交價、量" 的圖表上。
[attach]10499[/attach]

請教應如何去避免此狀況,而且也不會影響到原本查看的頁面。
謝謝您!
  1. Sub Test()
  2.     .
  3.     .
  4.     .
  5.     Call getEndRows("統計圖表")
  6.     Call getEndRows("Omega")
  7.     .
  8. End Sub

  9. Sub getEndRows(sDraw As String)  
  10.     Dim oShape As Shape
  11.     Dim numChart As Integer
  12.     Dim totalRows As Single
  13.    
  14.     numChart = 0
  15.    
  16.     totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  17.     Sheets(sDraw).Select
  18.             
  19.     For Each oShape In ActiveSheet.Shapes
  20.         If oShape.Type = 3 Then
  21.             numChart = numChart + 1
  22.             
  23.             ActiveSheet.ChartObjects(oShape.Name).Activate   
  24.                
  25.             Select Case numChart
  26.                 Case 1
  27.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AA$1:統計圖表!$AA$" & totalRows) ' 圖示會分別顯示出 主力界入
  28.                 Case 2
  29.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AB$1:統計圖表!$AB$" & totalRows) ' 圖示會分別顯示出 力差
  30.                 Case 3
  31.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AC$1:統計圖表!$AC$" & totalRows) ' 圖示會分別顯示出 消化力
  32.                 Case 4
  33.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AD$1:統計圖表!$AD$" & totalRows) ' 圖示會分別顯示出 均差(大戶)
  34.                 Case 5
  35.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
  36.                 Case Else
  37.                     ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)   ' 圖示會分別顯示出 成交價
  38.             End Select
  39.         End If
  40.         
  41.         If (sDraw = "Omega" And numChart = 5) Then Exit For
  42.     Next
  43. End Sub
複製代碼

作者: GBKEE    時間: 2012-4-19 11:52

本帖最後由 GBKEE 於 2012-4-19 12:31 編輯

回復 24# c_c_lai
問題在
ActiveSheet.ChartObjects(oShape.Name).Activate
  1. Sub getEndRows(sDraw As String)
  2.     Dim oShape As Shape
  3.     Dim numChart As Integer
  4.     Dim totalRows As Single
  5.     numChart = 0
  6.     totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  7.     Sheets(sDraw).Select
  8.     For Each oShape In ActiveSheet.Shapes
  9.         If oShape.Type = 3 Then
  10.             numChart = numChart + 1
  11.             With ActiveSheet.ChartObjects(oShape.Name).Chart
  12.                 Select Case numChart
  13.                     Case 1
  14.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AA$1:統計圖表!$AA$" & totalRows) ' 圖示會分別顯示出 主力界入
  15.                     Case 2
  16.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AB$1:統計圖表!$AB$" & totalRows) ' 圖示會分別顯示出 力差
  17.                     Case 3
  18.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AC$1:統計圖表!$AC$" & totalRows) ' 圖示會分別顯示出 消化力
  19.                     Case 4
  20.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$AD$1:統計圖表!$AD$" & totalRows) ' 圖示會分別顯示出 均差(大戶)
  21.                     Case 5
  22.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
  23.                     Case Else
  24.                         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)   ' 圖示會分別顯示出 成交價
  25.                 End Select
  26.             End With
  27.         End If
  28.         If (sDraw = "Omega" And numChart = 5) Then Exit For
  29.     Next
  30. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-19 12:07

本帖最後由 c_c_lai 於 2012-4-19 12:18 編輯

回復 25# GBKEE
如果改成 ActiveSheet.ChartObjects(oShape.Name).Select 可行否?

經實際測試, .Activate = .Select 結果一樣,
應如何修正呢? 如果將它 Mask ' 圖形便走樣了!
作者: GBKEE    時間: 2012-4-19 12:29

本帖最後由 GBKEE 於 2012-4-19 12:31 編輯

回復 26# c_c_lai
25# 的  程式碼 你有套用試看看嗎?
經實際測試, .Activate = .Select 結果一樣,???
With ActiveSheet.ChartObjects(oShape.Name).Chart    並沒有要  Activate OR .Select
作者: c_c_lai    時間: 2012-4-19 12:44

回復 27# GBKEE
太棒了!問題終於解決了。
請教您:
使用             With ActiveSheet.ChartObjects(oShape.Name).Chart    與
使用            ActiveSheet.ChartObjects(oShape.Name).Activate        
在實務應用面上,其意義上到底有甚麼差別呢? With ActiveSheet.ChartObjects(oShape.Name).Chart  
會自行行使 Select 嗎?
作者: GBKEE    時間: 2012-4-19 14:27

本帖最後由 GBKEE 於 2012-4-19 14:29 編輯

回復 28# c_c_lai
ActiveSheet.ChartObjects(oShape.Name).Activate   
這語法的意思: 將目前的圖表變成作用中的圖表 ,螢幕畫面會轉移到此圖表
With ActiveSheet.ChartObjects(oShape.Name).Chart     
這語法的意思  在一個單一物件或一個使用者自訂型態上執行一系列的陳述式
螢幕畫面不會轉移到此圖表
作者: c_c_lai    時間: 2012-4-19 15:52

本帖最後由 c_c_lai 於 2012-4-19 16:18 編輯

回復 29# GBKEE
再請教一下:
我執行繪圖的程序是:
1)  載入資料全部放置在 "統計圖表"工作表單,按鈕選項全部安插在"Omega"工作表單上。
2) 如果選按 "全部重繪", 它會先繪製 "統計圖表"工作表單上的圖表,接下來再去繪製"Omega"工作表單上的圖表
    (兩個工作表單表單上執行的繪圖模組是一樣的,只是分別將兩個工作表單上繪製同樣圖表)
3) 在"統計圖表"工作表單上成功地繪製出六個圖表後,接著又要在"Omega"工作表單上劃出同樣六個相同圖表時,
     卻出現一錯誤訊息  -----  系統錯誤 &H80040000 (-2147221504)。  無效的 OLEVERB 結構
     按完確認鈕後,不予理會在執行一次,接著又出現一錯誤視窗  -----  400
4) 觀察結果是:"統計圖表"工作表單上成功地繪製出了六個正確圖表,而在"Omega"工作表單上有時只產生了一張圖表,
    有時卻都產生瞭六個圖表,但其數列均非指定的數列,而是"Omega"工作表單上本身之其他用途的數據資料 (亂抓Omega的使用資料)。
請問這是何種情況才會如此?

5) 將其所有相關模組放入另一 Excel 表內執行,都正常。
     但不同的是: 這個表單的"Omega"工作表單上並無存放任何資料,僅擺放按鈕而已。   (將它附上參考,所有模組均一致)
    (為了與原始一致,"Omega" 的圖表位置是在 AI:AF 間)
[attach]10509[/attach]
(最後支附件才是)
作者: c_c_lai    時間: 2012-4-19 17:25

回復 29# GBKEE

我將此兩頁之畫面附上供參考:
[attach]10513[/attach]
[attach]10515[/attach]
作者: GBKEE    時間: 2012-4-19 17:48

本帖最後由 GBKEE 於 2012-4-19 17:52 編輯

回復 31# c_c_lai
對不起 :你的版本較先進 我不易偵錯
只有你導引新增圖表 較簡易的方法, 之後你再依你的需求修改
  1. Sub Ex()
  2. Dim Rng As Range, xi As Integer
  3. With ActiveSheet
  4.     .ChartObjects.Delete  '圖表全部刪除
  5.     For xi = 0 To 4
  6.        ' Set Rng = .[a1].Offset(, xi * 10)  ' 間隔10欄
  7.         Set Rng = .[a1].Offset(xi * 15)    ' 間隔15列
  8.         With .ChartObjects.Add(Rng.Left, Rng.Top, Rng.Resize(, 10).Width, Rng.Resize(10).Height).Chart
  9.                  ' .ChartObjects.Add(Left, Top, Width, Height)  '圖表新增( 右邊位置, 上方位置 ,寬度, 高度 )
  10.             .SetSourceData Source:=Sheets("統計圖表").UsedRange.Columns(xi + 1), PlotBy:=xlColumns
  11.             .HasTitle = True
  12.             .ChartTitle.text = "圖表 " & xi + 1      
  13.         End With
  14.     Next
  15.    End With
  16. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-20 08:24

回復 32# GBKEE
我得到了一個心得,那就是當您圖表的資料來源指向非本工作表單時 (例如:要在 A工作表單 繪製統計圖表、而來源資料卻在 B工作表單 ),
於重新在繪製時,時而正常,多時亂序。
但是經多次測試發現最重要的癥結是: 當 A工作表單 內容除了所需選擇按鈕外,無任何資料存在,一切正常。
                                                                     ***  當 A工作表單 內容除了所需選擇按鈕外,已經存在有其他的任何資料 (如附件之狀況),少少執行正常、多時脫線亂序。
煩請幫忙看看,謝謝您!
[attach]10522[/attach]
[attach]10523[/attach]
[attach]10524[/attach]
作者: GBKEE    時間: 2012-4-21 10:54

回復 33# c_c_lai
重新 修改整理 你的 程式碼 , 請將全部的程式碼 複製在同一模組中.
  1. Dim xRow(1 To 6), yCol(1 To 6), cWidth(1 To 6), cHeight(1 To 6), xText(1 To 6)
  2. Dim Chart_Source(1 To 6)
  3. Private Sub 陣列設定(ShName As String)
  4.     Dim Rng As Range
  5.     xRow(1) = IIf(ShName = "Omega", 4, 1)
  6.     xRow(2) = IIf(ShName = "Omega", 18, 16)
  7.     xRow(3) = IIf(ShName = "Omega", 4, 1)
  8.     xRow(4) = IIf(ShName = "Omega", 18, 16)
  9.     xRow(5) = IIf(ShName = "Omega", 4, 1)
  10.     xRow(6) = 31
  11.     yCol(1) = IIf(ShName = "Omega", 55, 1)
  12.     yCol(2) = IIf(ShName = "Omega", 35, 1)
  13.     yCol(3) = IIf(ShName = "Omega", 39, 5)
  14.     yCol(4) = IIf(ShName = "Omega", 39, 5)
  15.     yCol(5) = IIf(ShName = "Omega", 43, 9)
  16.     yCol(6) = 1
  17.     cWidth(1) = IIf(ShName = "Omega", 209, 222)
  18.     cWidth(2) = IIf(ShName = "Omega", 209, 222)
  19.     cWidth(3) = 209
  20.     cWidth(4) = 209
  21.     cWidth(5) = 405
  22.     cWidth(6) = 810
  23.     cHeight(1) = 240
  24.     cHeight(2) = 240
  25.     cHeight(3) = 240
  26.     cHeight(4) = 240
  27.     cHeight(5) = IIf(ShName = "Omega", 485, 488)
  28.     cHeight(6) = 480
  29.     xText(1) = "主力界入"
  30.     xText(2) = "力差"
  31.     xText(3) = "消化力"
  32.     xText(4) = "均差(大戶)"
  33.     xText(5) = "主力、散戶、與成交價、量"
  34.     xText(6) = "成交價與成交量"
  35.     With Sheets("統計圖表")
  36.         Set Rng = .Range("A1").CurrentRegion
  37.         Set Chart_Source(1) = Union(Rng.Columns(2), Rng.Columns(27))
  38.         Set Chart_Source(2) = Union(Rng.Columns(2), Rng.Columns(28))
  39.         Set Chart_Source(3) = Union(Rng.Columns(2), Rng.Columns(29))
  40.         Set Chart_Source(4) = Union(Rng.Columns(2), Rng.Columns(30))
  41.         Set Chart_Source(5) = Union(Rng.Columns(2), Rng.Columns(6), Rng.Columns(9), Rng.Columns(10), Rng.Columns(22))
  42.         Set Chart_Source(6) = Union(Rng.Columns(2), Rng.Columns(6), Rng.Columns(22))
  43.      End With
  44. End Sub
  45. Sub 全部重繪()  '重繪統計圖表 也是用此程序
  46.     製圖程序 Sheets(Array("統計圖表", "Omega"))
  47. End Sub
  48. Sub 重繪Omega()
  49.     製圖程序 Sheets(Array("Omega"))
  50. End Sub
  51. Private Sub 製圖程序(xlSh As Sheets)     '全部重繪
  52.     Dim Sh As Worksheet, xi As Integer
  53.     For Each Sh In xlSh   '"'Sheets(Array("統計圖表", "Omega"))
  54.         Sh.ChartObjects.Delete
  55.         陣列設定 Sh.Name
  56.         For xi = 1 To IIf(Sh.Name = "Omega", 5, 6)
  57.             With Sh.ChartObjects.Add(Sh.Cells(xRow(xi), yCol(xi)).Left, Sh.Cells(xRow(xi), yCol(xi)).Top, cWidth(xi), cHeight(xi)).Chart
  58.                 .ChartType = IIf(xi >= 5, xlLine, xlColumnStacked)  'xlLine-> 折線圖 'xlColumnStacke-> 堆疊直條圖
  59.                 .SetSourceData Source:=Chart_Source(xi)
  60.                 .HasLegend = 0                                          '圖表的圖例:  不可見
  61.                 .SeriesCollection(1).AxisGroup = IIf(xi >= 5, 2, 1)
  62.                 With .Axes(xlCategory)                'X座標軸
  63.                     .CategoryType = xlCategoryScale
  64.                     .TickLabels.NumberFormatLocal = "hh:mm"
  65.                     .MinorTickMark = xlNone
  66.                     .Border.Weight = xlHairline
  67.                     .Border.LineStyle = xlNone
  68.                     .TickLabelPosition = xlLow
  69.                     .TickLabels.Font.Size = 10
  70.                 End With
  71.                '''''''''''''''''''''''''
  72.                 If .ChartType = xlColumnStacked Then              '堆疊直條圖
  73.                     .SeriesCollection(1).Shadow = False           '圖表中的數列(1)
  74.                     .SeriesCollection(1).InvertIfNegative = True
  75.                     With .SeriesCollection(1).Border
  76.                         .Weight = xlHairline
  77.                         .LineStyle = xlNone
  78.                     End With
  79.                     With .SeriesCollection(1).Interior
  80.                         .ColorIndex = 5
  81.                         .PatternColorIndex = 42
  82.                         .Pattern = xlSolid
  83.                     End With
  84.                 Else                                               '折線圖
  85.                     .HasLegend = True
  86.                     .Legend.Top = 1
  87.                     .Legend.Position = xlCorner
  88.                     .SeriesCollection(1).MarkerStyle = xlNone
  89.                     With .Legend.Border
  90.                         .Weight = xlHairline
  91.                         .LineStyle = xlNone
  92.                     End With
  93.                 End If
  94.                 '''''''''''''''''''''''''''
  95.                 With .Axes(xlValue).TickLabels.Font   'Y座標軸上刻度的刻度標籤的字體
  96.                     .FontStyle = "標準"
  97.                     .Size = 10
  98.                 End With
  99.                 .HasTitle = True                        '圖表的標題   可見
  100.                  With .ChartTitle                       '圖表的標題
  101.                     .Top = 1
  102.                     .text = xText(xi)
  103.                     .Font.Size = 14
  104.                 End With
  105.                 With .PlotArea                          ' 圖表的繪圖區
  106.                     .Top = 1
  107.                     .Left = 1
  108.                     .Width = cWidth
  109.                     .Height = cHeight
  110.                     .Interior.ColorIndex = xlNone
  111.                 End With
  112.             End With
  113.         Next
  114.     Next
  115. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-21 11:54

回復 34# GBKEE
老是打擾您也會感到不好意思的,但不巧的它出現如下的錯誤訊息,它又沒指出是哪裡,只得求助您了!
[attach]10553[/attach]
作者: GBKEE    時間: 2012-4-21 14:36

本帖最後由 GBKEE 於 2012-4-21 14:37 編輯

回復 35# c_c_lai
在2003版是沒這問題的 那稍加修改 如下
  1. Sub 全部重繪()  '重繪統計圖表 也是用此程序
  2.     製圖程序 "統計圖表"
  3.     重繪Omega
  4. End Sub
  5. Sub 重繪Omega()
  6.     製圖程序 "Omega"
  7. End Sub
  8. Private Sub 製圖程序(xlSh As String)      '全部重繪
  9.     Dim Sh As Worksheet, xi As Integer
  10.     Set Sh = Sheets(xlSh)
  11.     Sh.ChartObjects.Delete
  12.     陣列設定 Sh.Name
  13.     For xi = 1 To IIf(Sh.Name = "Omega", 5, 6)
  14.         With Sh.ChartObjects.Add(Sh.Cells(xRow(xi), yCol(xi)).Left, Sh.Cells(xRow(xi), yCol(xi)).Top, cWidth(xi), cHeight(xi)).Chart
  15.             .ChartType = IIf(xi >= 5, xlLine, xlColumnStacked)  'xlLine-> 折線圖 'xlColumnStacke-> 堆疊直條圖
  16.             .SetSourceData Source:=Chart_Source(xi)
  17.             .HasLegend = 0                                          '圖表的圖例:  不可見
  18.             .SeriesCollection(1).AxisGroup = IIf(xi >= 5, 2, 1)
  19.             With .Axes(xlCategory)                'X座標軸
  20.                 .CategoryType = xlCategoryScale
  21.                 .TickLabels.NumberFormatLocal = "hh:mm"
  22.                 .MinorTickMark = xlNone
  23.                 .Border.Weight = xlHairline
  24.                 .Border.LineStyle = xlNone
  25.                 .TickLabelPosition = xlLow
  26.                 .TickLabels.Font.Size = 10
  27.             End With
  28.             '''''''''''''''''''''''''
  29.             If .ChartType = xlColumnStacked Then              '堆疊直條圖
  30.                 .SeriesCollection(1).Shadow = False           '圖表中的數列(1)
  31.                 .SeriesCollection(1).InvertIfNegative = True
  32.                 With .SeriesCollection(1).Border
  33.                     .Weight = xlHairline
  34.                     .LineStyle = xlNone
  35.                 End With
  36.                 With .SeriesCollection(1).Interior
  37.                     .ColorIndex = 5
  38.                     .PatternColorIndex = 42
  39.                     .Pattern = xlSolid
  40.                 End With
  41.             Else                                               '折線圖
  42.                 .HasLegend = True
  43.                 .Legend.Top = 1
  44.                 .Legend.Position = xlCorner
  45.                 .SeriesCollection(1).MarkerStyle = xlNone
  46.                 With .Legend.Border
  47.                     .Weight = xlHairline
  48.                     .LineStyle = xlNone
  49.                 End With
  50.             End If
  51.                 '''''''''''''''''''''''''''
  52.             With .Axes(xlValue).TickLabels.Font   'Y座標軸上刻度的刻度標籤的字體
  53.                 .FontStyle = "標準"
  54.                 .Size = 10
  55.             End With
  56.             .HasTitle = True                        '圖表的標題   可見
  57.             With .ChartTitle                       '圖表的標題
  58.                 .Top = 1
  59.                 .text = xText(xi)
  60.                 .Font.Size = 14
  61.             End With
  62.             With .PlotArea                          ' 圖表的繪圖區
  63.                 .Top = 1
  64.                 .Left = 1
  65.                 .Width = cWidth
  66.                 .Height = cHeight
  67.                 .Interior.ColorIndex = xlNone
  68.             End With
  69.         End With
  70.     Next
  71. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-21 15:24

回復 36# GBKEE
錯誤訊息一樣,發現問題應該是出在  ----> 陣列設定  上。
  1. Dim xRow(1 To 6), yCol(1 To 6), cWidth(1 To 6), cHeight(1 To 6), xText(1 To 6)
  2. Dim Chart_Source(1 To 6)

  3. Private Sub 陣列設定(ShName As String)
  4.     Dim Rng As Range

  5.     xRow(1) = IIf(ShName = "Omega", 4, 1)
  6.     xRow(2) = IIf(ShName = "Omega", 18, 16)
  7.     xRow(3) = IIf(ShName = "Omega", 4, 1)
  8.     xRow(4) = IIf(ShName = "Omega", 18, 16)
  9.     xRow(5) = IIf(ShName = "Omega", 4, 1)
  10.     xRow(6) = 31

  11.     yCol(1) = IIf(ShName = "Omega", 55, 1)
  12.     yCol(2) = IIf(ShName = "Omega", 35, 1)
  13.     yCol(3) = IIf(ShName = "Omega", 39, 5)
  14.     yCol(4) = IIf(ShName = "Omega", 39, 5)
  15.     yCol(5) = IIf(ShName = "Omega", 43, 9)
  16.     yCol(6) = 1

  17.     cWidth(1) = IIf(ShName = "Omega", 209, 222)
  18.     cWidth(2) = IIf(ShName = "Omega", 209, 222)
  19.     cWidth(3) = 209
  20.     cWidth(4) = 209
  21.     cWidth(5) = 405
  22.     cWidth(6) = 810

  23.     cHeight(1) = 240
  24.     cHeight(2) = 240
  25.     cHeight(3) = 240
  26.     cHeight(4) = 240
  27.     cHeight(5) = IIf(ShName = "Omega", 485, 488)
  28.     cHeight(6) = 480

  29.     xText(1) = "主力界入"
  30.     xText(2) = "力差"
  31.     xText(3) = "消化力"
  32.     xText(4) = "均差(大戶)"
  33.     xText(5) = "主力、散戶、與成交價、量"
  34.     xText(6) = "成交價與成交量"

  35.     With Sheets("統計圖表")
  36.         Set Rng = .Range("A1").CurrentRegion
  37.         Set Chart_Source(1) = Union(Rng.Columns(2), Rng.Columns(27))
  38.         Set Chart_Source(2) = Union(Rng.Columns(2), Rng.Columns(28))
  39.         Set Chart_Source(3) = Union(Rng.Columns(2), Rng.Columns(29))
  40.         Set Chart_Source(4) = Union(Rng.Columns(2), Rng.Columns(30))
  41.         Set Chart_Source(5) = Union(Rng.Columns(2), Rng.Columns(6), Rng.Columns(9), Rng.Columns(10), Rng.Columns(22))
  42.         Set Chart_Source(6) = Union(Rng.Columns(2), Rng.Columns(6), Rng.Columns(22))
  43.     End With

  44. End Sub
複製代碼

作者: GBKEE    時間: 2012-4-21 15:37

回復 37# c_c_lai
上傳你的檔案看看
作者: c_c_lai    時間: 2012-4-21 15:58

回復 38# GBKEE

[attach]10562[/attach]
作者: GBKEE    時間: 2012-4-21 16:12

回復 39# c_c_lai
奇怪 我執行 Sub 全部重繪()  或 Sub 重繪Omega() 都沒問題阿
請問你是如何執行 Sub 全部重繪()  或 Sub 重繪Omega()
作者: c_c_lai    時間: 2012-4-21 16:22

回復 40# GBKEE

[attach]10564[/attach]
作者: GBKEE    時間: 2012-4-21 16:39

回復 41# c_c_lai
沒2010版 哪我也沒法度了
作者: c_c_lai    時間: 2012-4-21 16:59

回復 42# GBKEE
請教您:
Dim xRow(1 To 6), yCol(1 To 6), cWidth(1 To 6), cHeight(1 To 6), xText(1 To 6)
Dim Chart_Source(1 To 6)

這兩行是在宣告陣列 (Array) 嗎?  (1 To 6) ?  一維陣列嗎?
除了這等宣告方式外,還有何種方式表達?
作者: GBKEE    時間: 2012-4-21 17:39

回復 43# c_c_lai
  1. Option Explicit
  2. Sub Ex()
  3.     Dim xRow(), i As Integer
  4.     xRow = Array(1, 2, 3, 4)    'xRow() 是為動態陣列
  5.     For i = 0 To 3
  6.         MsgBox xRow(i)
  7.     Next
  8. End Sub
  9. Sub Ex1()
  10.     Dim xRow(4), i As Integer
  11.     'xRow(4) 是為靜態陣列
  12.     '最小可使用的陣列索引 預設為 0  可用  Option Base {0 | 1} 來改變 是0 或 1
  13.     '最大可使用的陣列索引=4
  14.     'xRow = Array(1, 2, 3, 4,5)  '無法一次給值 ,靜態陣列 須 一一指定值
  15.     xRow(0) = 1
  16.     xRow(1) = 2
  17.     xRow(2) = 3
  18.     xRow(3) = 4
  19.     xRow(4) = 5
  20.     For i = 0 To 4
  21.         MsgBox xRow(i)
  22.     Next
  23. End Sub
  24. Sub Ex2()
  25.     Dim xRow(4 To 8), i As Integer
  26.     'xRow(4 to 8) 是為靜態陣列
  27.     '設定: 最小可使用的陣列索引 =4 , 最大可使用的陣列索引 = 8   
  28.     'xRow = Array(1, 2, 3, 4,5)  '無法一次給值 ,靜態陣列 須 一一指定值
  29.     xRow(4) = 1               '
  30.     xRow(5) = 2                '
  31.     xRow(6) = 3
  32.     xRow(7) = 4
  33.     xRow(8) = 5
  34.     For i = 4 To 8
  35.         MsgBox xRow(i)
  36.     Next
  37. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-22 13:15

本帖最後由 c_c_lai 於 2012-4-22 13:20 編輯

回復 44# GBKEE
皇天不辜有心人,終於找到為何型態不符了。
  1.             With .PlotArea                          ' 圖表的繪圖區
  2.                 .Top = 1
  3.                 .Left = 1
  4.                 .Width = cWidth
  5.                 .Height = cHeight
  6.                 .Interior.ColorIndex = xlNone
  7.             End With
複製代碼
問題出在 cWidth、以及 cHeight 兩個變數的宣告,它們起頭是宣告成 陣列型態的。
所以嘛!

  1.            With .PlotArea                          ' 圖表的繪圖區
  2.                 .Top = 16
  3.                 .Left = 1
  4.                 .Width = cWidth(xi)
  5.                 .Height = cHeight(xi)
  6.                 .Interior.ColorIndex = xlNone
  7.             End With
複製代碼
如此才對! 雖然是小地方,卻把老命快搞掉了!
如今再把他稍加修飾成我要的需求,我把正確的檔案亦一併附上,
可供有心向學的共修們一同來研習、討論。

[attach]10575[/attach]

[attach]10576[/attach]

差點忘了向您說聲謝謝!
阿里牙豆!
作者: GBKEE    時間: 2012-4-22 15:02

回復 45# c_c_lai
這太粗心,還是你細心的找出來,
我查出 2003版  這錯誤:
在圖表: 圖表區, 繪圖區.等 有可指定 Left ,Top, Width  ,Height 的地方
都可以接受這陣列不用索引值 , 會比照 先前使用過的索引值  如下
With Sh.ChartObjects.Add(Sh.Cells(xRow(xi), yCol(xi)).Left, Sh.Cells(xRow(xi), yCol(xi)).Top, cWidth(xi), cHeight(xi)).Chart


[attach]10579[/attach]
作者: c_c_lai    時間: 2012-4-23 11:53

回復 46# GBKEE
這是這個議題的最後一次提問:
Set Rng = .Range("A1").CurrentRegion
憑我個人的聰明才智,東瞄瞄西敲敲也實在看不出它的實際代表含義,
它在提示甚麼,它扮演的腳色是甚麼? 有何舉足輕重?
每次按 F1 時,其說明真有如聖經,有看沒懂。
謝謝您!
作者: GBKEE    時間: 2012-4-23 12:20

回復 47# c_c_lai
CurrentRegion 屬性 ,該物件代表目前的區域。目前區域是指以任意空白列及空白欄的組合為邊界的範圍。唯讀。
  1. ActiveCell.CurrentRegion.Select
複製代碼
如圖 四個儲存格任選一個  執行  這程式碼 看看有何變化如何

[attach]10600[/attach]
作者: cfuxiong    時間: 2012-4-27 19:16

回復 45# c_c_lai
c_c_lai版大;你好…看了你的Excel圖表只有讚嘆…希望多多發表文章供我們學習…謝謝了~~
作者: noorudin    時間: 2012-6-8 17:42

就是在這�堹鉧ヮ鴢雃h東西,能人多神人更多




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)