Board logo

標題: [發問] 主座標軸與副座標軸群組間應如何正確設定 [打印本頁]

作者: c_c_lai    時間: 2012-4-14 12:11     標題: 主座標軸與副座標軸群組間應如何正確設定

請教各位先進:
在圖表應用上,主座標軸與副座標軸群組間應該如何去正確設定?
附上執行前後之結果畫面。 之前曾經發生過錯誤訊息,如圖表一。
我是使用同一模組分別執行在 Omega、統計圖表的兩個工作表單內。
後來不知是否在修改過程中無意避掉了 (請問是否語法不正確?應該留意哪裡?)。
當前發生的問題是:
當您選按種會所有統計圖表、或重繪Omega、抑或是重繪統計圖表等按鈕,
一切都能正常顯示 (如圖表二),但是當您選按統計圖表歸位,成交價卻變成
一橫線了,檢查結果是它會去改變原先之設定 (成交價原設定為副座標軸群組,
一經執行歸為按鈕,經檢查它卻成為主座標軸),請問語法上應如何改進?
敬請各位前輩指點,謝謝您!
圖表一:
[attach]10437[/attach]
圖表二:
[attach]10436[/attach]

附上檔案:
[attach]10438[/attach]
作者: GBKEE    時間: 2012-4-14 22:17

回復 1# c_c_lai
版本不圖 不易偵錯 ,寫個範例你參考一下
  1. Private Sub 製圖()
  2.     Dim xR As Range, Xi As Integer, i As Integer, 圖色()
  3.     圖色 = Array(4, 6, 8, 10)
  4.     ActiveSheet.ChartObjects.Delete         '刪除全部圖表
  5.     Set xR = Range("F1")    '利用xR的位置 設下圖表的位置
  6.         '加入新圖表  須指定 1右邊位置, 2高度位置, 3圖表的Width, 4圖表的Height
  7.         With ChartObjects.Add(xR.Left, xR.Top, xR.Resize(, 10).Width, xR.Resize(10).Height).Chart
  8.             .ChartType = 51  ' xlLineMarkers    '折線圖                             '圖表 式樣
  9.             With ActiveSheet.Range("A11").CurrentRegion
  10.                     Set xR = Union(.Columns(1), .Columns(3), .Columns(5))
  11.                     '資料 範圍的 1,3,5 欄為圖表資料  :第1欄 為x軸的數值
  12.             End With
  13.             .SetSourceData Source:=xR, PlotBy:=xlColumns
  14.             '圖表資料來源 : xR  資料式樣: 欄
  15.                           
  16.              .HasTitle = True                                              '顯示 圖表標題
  17.              .ChartTitle.Characters.Text = ActiveSheet.Name                'HasTitle = False 會有錯誤
  18.              .HasAxis(xlCategory, xlPrimary) = False                       '不顯示 X軸座標
  19.             
  20.             'HasLegend 圖例
  21.              .HasLegend = False                                         ' 取消 顯示 圖例
  22.            '  .Legend.Position = xlTop                                   '顯示 圖例位置
  23.            ' .Axes(xlCategory).TickLabels.NumberFormatLocal = "m/d;@"    ' Axes(xlCategory) X座標軸
  24.            ' ** 上二式 須  顯示圖例 ->  .HasLegend = True
  25.             
  26.             '.SeriesCollection(1).AxisGroup = 2                           '新增 Y座標軸 副座標軸
  27.           '  .SeriesCollection(3)).Delete                 '刪除第3數列資料
  28.             With .Axes(xlValue)          'y軸格線
  29.                 .HasMajorGridlines = 0   '取消 主格線
  30.                 .HasMinorGridlines = 0   '取消 副格線
  31.             End With
  32.             '以下一些程式碼 你可用錄製得知
  33.             With .ChartArea                                             '圖表的圖表區
  34.                 .Border.Weight = 1
  35.                 .Border.LineStyle = -1
  36.                 .Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=3, Degree:=0.231372549019608
  37.                 .Fill.Visible = True
  38.                 .Fill.ForeColor.SchemeColor = 圖色(0)
  39.             End With
  40.             With .PlotArea                                              '圖表的 繪圖區
  41.                 .Fill.OneColorGradient Style:=msoGradientHorizontal, Variant:=1, _
  42.                 Degree:=0.231372549019608
  43.                 .Fill.Visible = True
  44.                 .Fill.ForeColor.SchemeColor = 圖色(0)
  45.                 With .Border
  46.                     .ColorIndex = 16
  47.                     .Weight = xlThin
  48.                     .LineStyle = xlContinuous
  49.                 End With
  50.             End With
  51.             For i = 1 To .SeriesCollection.Count
  52.                 With .SeriesCollection(i)   '數列
  53.                   '  .XValues = ""           '<-為x軸的數值   可在此取消
  54.                     With .Border
  55.                         .ColorIndex = 圖色(i)
  56.                         .Weight = xlMedium
  57.                         .LineStyle = xlContinuous
  58.                     End With
  59.                     '以下屬性 只適合 折線圖
  60.                    ' .MarkerBackgroundColorIndex = xlAutomatic
  61.                     '.MarkerForegroundColorIndex = xlAutomatic
  62.                     '.MarkerStyle = xlNone
  63.                     '.Smooth = False
  64.                     '.MarkerSize = 7
  65.                     '.Shadow = False
  66.                 End With
  67.             Next
  68.         End With
  69. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-15 08:29

回復 2# GBKEE
謝謝您完整的說明,但是有個重要的、也是我目前不甚瞭解的部分如下,尚請再予賜教:
                          .      
    Set xR = Range("F1")    '利用xR的位置 設下圖表的位置
    '加入新圖表  須指定 1右邊位置, 2高度位置, 3圖表的Width, 4圖表的Height
    With ChartObjects.Add(xR.Left, xR.Top, xR.Resize(, 10).Width, xR.Resize(10).Height).Chart
        .ChartType = 51  ' xlLineMarkers    '折線圖                             '圖表 式樣
        With ActiveSheet.Range("A11").CurrentRegion
            Set xR = Union(.Columns(1), .Columns(3), .Columns(5))
            '資料 範圍的 1,3,5 欄為圖表資料  :第1欄 為x軸的數值
        End With
        .SetSourceData Source:=xR, PlotBy:=xlColumns
        '圖表資料來源 : xR  資料式樣: 欄
                          .      
    End With

您說第1欄 為x軸的數值,指的是下列的 "=統計圖表!$B$2:$B$" & totalRows ? 假設是的話, 那麼這兒的 "資料範圍的 1,3,5 欄為圖表資料"
即為假設的第一欄、第三欄、第五欄,在目前應如何去對應到我的 ( F 欄 )、( I 欄 )、( J 欄 )、( V 欄 )等四組線呢? 我能否這麼設定
Set xR = Union(Range("統計圖表!$B$1:統計圖表!$B$" & totalRows), Range("統計圖表!$F$1:統計圖表!$F$" & totalRows), Range("統計圖表!$I$1:統計圖表!$I$" & totalRows), Range("統計圖表!$J$1:統計圖表!$J$" & totalRows), Range("統計圖表!$V$1:統計圖表!$V$" & totalRows))
因為如果我直接使用原本的  .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$I$1:統計圖表!$J$" & totalRows)  
圖示會分別顯示出 成交價、主力界入、以及散戶方向,但是第四組的 成交量 卻無法擠入,我試過最多只能使用三組宣告。
其中第一組是時間軸數值、第一組是成交價資料軸數值、第一組是主力界入、散戶方向資料軸數值 (因此兩欄係為 I、J兩欄之原因,所以是 I1:J###)。
這亦是我會加上後續宣告之故:
   .SeriesCollection.Add Source:=Range("統計圖表!$V$2:統計圖表!$V$" & totalRows)  ' 成交量資料
   .SeriesCollection(4).Name = "=統計圖表!$V$1"
所以在實務運作上,第二個工作表單之圖表大部分時間均能順利產生,但接著在產生第一個工作表單之圖表時,因為需去對應第二個工作表單之已、或待匯入資料,
時而順暢、偶時便出狀況了 (如先前附上的圖表一、二), 這是第一種情形。

因為考慮有時為了閱覽方便因素,有可能會隨時將圖表移位方便閱覽,最終會希望系統能自動將圖表歸回原來設定之座標位置,此程式段(圖表歸位鈕 - setRowColumn)則更改為:
   ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$I$1:統計圖表!$J$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、以及散戶方向。
   ActiveChart.SeriesCollection.Add Source:=Range("統計圖表!$V$2:統計圖表!$V$" & totalRows)
   ActiveChart.SeriesCollection(4).Name = "=統計圖表!$S$1"     ' S1 與 V1 相同標題,均為 成交量
移位或者是新資料匯入時,均會處理上面三行動作,結果不是出現先前附上的圖表一的問題,便是圖表二的問題。
不知是否在修正模式下不能使用 ActiveChart.SeriesCollection.Add ? 假設條件成立,那要如何順利將第四組(甚或是還有第五組...)安全送上壘呢?

GBKEE前輩,實在是不好意思,麻煩您了!

以下是我欄位從屬關係對應內容,敬請參考:     
                          .      
totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
                          .     
                          .   
' 選取資料來源->成交價      ( F 欄 )                                ----->  副座標軸群組
ActiveChart.SeriesCollection(1).Name = "=統計圖表!$F$1"            
ActiveChart.SeriesCollection(1).Values = "=統計圖表!$F$2:$F$" & totalRows      
ActiveChart.SeriesCollection(1).XValues = "=統計圖表!$B$2:$B$" & totalRows  ' 時間軸

' 選取資料來源->主力界入    ( I 欄 )                                ----->  主座標軸群組   
ActiveChart.SeriesCollection(2).Name = "=統計圖表!$I$1"            
ActiveChart.SeriesCollection(2).Values = "=統計圖表!$I$2:$I$" & totalRows   
ActiveChart.SeriesCollection(2).XValues = "=統計圖表!$B$2:$B$" & totalRows  ' 時間軸     

' 選取資料來源->散戶方向    ( J 欄 )                                ----->  主座標軸群組
ActiveChart.SeriesCollection(3).Name = "=統計圖表!$J$1"            
ActiveChart.SeriesCollection(3).Values = "=統計圖表!$J$2:$J$" & totalRows
ActiveChart.SeriesCollection(3).XValues = "=統計圖表!$B$2:$B$" & totalRows  ' 時間軸   

' 選取資料來源->成交量      ( V 欄 )                                ----->  主座標軸群組
ActiveChart.SeriesCollection(4).Name = "=統計圖表!$V$1"            
ActiveChart.SeriesCollection(4).Values = "=統計圖表!$V$2:$V$" & totalRows   
ActiveChart.SeriesCollection(4).XValues = "=統計圖表!$B$2:$B$" & totalRows  ' 時間軸
作者: GBKEE    時間: 2012-4-15 15:47

回復 3# c_c_lai
  1. Sub setRowColumn(sDraw As String)
  2.     Dim oShape As Shape
  3.     Dim xRow, yCol, cHeight, cWidth, inLeft, inTop, inWidth As Integer
  4.     Dim totalRows As Single
  5.     Dim chartname As String
  6.     'totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  7.     '如作用中物件 不是工作表 會有錯誤 如是圖表等
  8.     totalRows = Sheets("統計圖表").Range("B" & Sheets("統計圖表").Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  9.     Sheets(sDraw).Select
  10.     For Each oShape In ActiveSheet.Shapes
  11.         If oShape.Type = 3 Then
  12.             ActiveSheet.ChartObjects(oShape.Name).Activate                      ' 滑鼠點在 "圖表 #" 上 (例如:主力界入)。
  13.             '*************
  14.             '你上式程式碼  使得作用中物件變為 圖表 後面的程式如有 取的工作表的位址 皆須加上  Sheets((工作表).[A1] 等...
  15.             ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & _
  16.             ", 統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$S$1" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、以及散戶方向。
  17.             
  18.             'ActiveChart.SeriesCollection.Add Source:=Range("統計圖表!$S$1"& totalRows)
  19.             'ActiveChart.SeriesCollection(4).Name = "=統計圖表!$S$1"  '*** 位址要用R1C1 方式表示
  20.             'ActiveChart.SeriesCollection(4).Name = "=" & [統計圖表!$S$1].Address(, , xlR1C1, 1)
  21.             'ActiveChart.SeriesCollection(4).ChartType = xlColumnClustered          ' 堆疊直條圖
  22.             xRow = 2
  23.             yCol = 1
  24.             cHeight = 488
  25.             cWidth = 450
  26.             inLeft = 30
  27.             inTop = 30
  28.             inWidth = 378
  29.             chartname = Trim(Replace(ActiveChart.Name, ActiveSheet.Name, ""))
  30.             'ActiveChart.ChartArea.Height = cHeight                           ' 將原本設定之高度調至適度位置
  31.             'ActiveChart.ChartArea.Width = cWidth
  32.             'ActiveSheet.Shapes(chartname).Left = Cells(xRow, yCol).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  33.             'ActiveSheet.Shapes(chartname).Top = Cells(xRow, yCol).Top
  34.             With ActiveChart.Parent
  35.                 .Width = cWidth                                       'ChartArea.-改成 父層  Parent
  36.                 .Height = cHeight
  37.                 .Left = ActiveSheet.Cells(xRow, yCol).Left
  38.                 .Top = ActiveSheet.Cells(xRow, yCol).Top
  39.                 With .Chart.PlotArea                  ' 實際繪圖區塊的範圍設定
  40.                   Debug.Print .InsideLeft             '  傳回: 繪圖區塊範圍設定
  41.                   Debug.Print .InsideTop              'Debug.Print: 印列在->   在檢視指令->即時運算視窗
  42.                   Debug.Print .InsideWidth
  43.                     .Left = inLeft                    '  設定: 繪圖區塊範圍
  44.                     .Top = inTop
  45.                     .Width = inWidth
  46.                 End With
  47.             End With
  48.         End If
  49.     Next
  50. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-15 19:05

回復 4# GBKEE
謝謝您的費心幫忙,我只異動了處理 ActiveChart.SetSourceData 的內容修正 (之前輸入最多三項的限制,可能是我當時有打錯字,
以致誤以為不行),修正內容如下:
mainPowerForce 模組修正內容:  .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ", 統計圖表!$I$1:統計圖表!$J$"  
                                                              &  totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
setRowColumn  模組修正內容: ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & ",
                                                           統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
圖表還真難搞呢! 幸慶終於順利解決了,作業上因為要將目前已匯入實際資料的資料列數紀錄,並同步修正結果卻惹出了一堆問題 (400, 1004, Automation 等等),命都差點丟了!
我將程式代碼附上,以幫助有此需求的同好找到好工作、或好事業。
再次向您說聲感謝您!
  1. Sub DrawAll()
  2.     Call drawStatistics
  3.     Call drawOmegaCharts
  4. End Sub

  5. Sub drawStatistics()
  6.     drawCharts ("統計圖表")
  7. End Sub

  8. Sub drawOmegaCharts()
  9.     drawCharts ("Omega")
  10. End Sub

  11. Sub removeCharts(st As String)
  12.     Dim oShape As Shape
  13.     Dim str As String
  14.    
  15.     str = ActiveSheet.Name
  16.     Sheets(st).Select
  17.    
  18.     For Each oShape In ActiveSheet.Shapes
  19.         If oShape.Type = 3 Then
  20.             oShape.Delete
  21.         End If
  22.     Next
  23.    
  24.     Sheets(str).Select
  25. End Sub

  26. Sub drawCharts(sta As String)
  27.     Dim str As String
  28.    
  29.     str = ActiveSheet.Name
  30.     Sheets(sta).Select

  31.     Call removeCharts(sta)

  32.     Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  33.     Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  34.     Selection.Borders(xlEdgeLeft).LineStyle = xlNone
  35.    
  36.     With Selection.Borders(xlEdgeTop)
  37.         .LineStyle = xlContinuous
  38.         .ColorIndex = 0
  39.         .TintAndShade = 0
  40.         .Weight = xlThin
  41.     End With
  42.    
  43.     Selection.Borders(xlEdgeBottom).LineStyle = xlNone
  44.    
  45.     With Selection.Borders(xlEdgeRight)
  46.         .LineStyle = xlContinuous
  47.         .ColorIndex = 0
  48.         .TintAndShade = 0
  49.         .Weight = xlThin
  50.     End With
  51.    
  52.     Call mainPowerForce(sta)
  53.    
  54.     Cells(1, 1).Select
  55.     Sheets(str).Select
  56. End Sub

  57. Sub mainPowerForce(sDraw As String)
  58.     Dim totalRows As Single
  59.     Dim counter, xRow, yCol, cHeight, cWidth, inLeft, inTop, inWidth As Integer
  60.     Dim text As String
  61.     Dim chartname As String
  62.     ' Dim rXY As Range

  63.     totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  64.     Sheets(sDraw).Select
  65.     Cells(1, 1).Value = totalRows
  66.       
  67.    
  68.     ActiveSheet.Shapes.AddChart.Select
  69.                                              
  70.     With ActiveChart
  71.         .ChartType = xlLine               ' 折線圖
  72.         
  73.         ' 圖示會分別顯示出 資料錄匯入之時間、成交價、主力界入、散戶方向、以及成交量。
  74.         ' Set rXY = Union(Range("統計圖表!$B$1:統計圖表!$B$" & totalRows), Range("統計圖表!$F$1:統計圖表!$F$" & totalRows), Range("統計圖表!$I$1:統計圖表!$I$" & totalRows), Range("統計圖表!$J$1:統計圖表!$J$" & totalRows), Range("統計圖表!$V$1:統計圖表!$V$" & totalRows))
  75.         ' .SetSourceData Source:=rXY
  76.         .SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & _
  77.           ", 統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
  78.                               
  79.         ' .SeriesCollection.Add Source:=Range("統計圖表!$V$2:統計圖表!$V$" & totalRows)
  80.         ' .SeriesCollection(4).Name = "=統計圖表!$S$1"
  81.                         
  82.         .SeriesCollection(1).AxisGroup = 2
  83.         .SeriesCollection(2).ChartType = xlLine          ' 折線圖
  84.                         
  85.         .SeriesCollection(4).ChartType = xlColumnClustered          ' 堆疊直條圖
  86.                              
  87.                              
  88.         .Axes(xlCategory).CategoryType = xlCategoryScale
  89.         .Axes(xlCategory).TickLabels.NumberFormatLocal = "hh:mm"
  90.         .Axes(xlCategory).MajorTickMark = xlNone
  91.         .Axes(xlCategory).TickLabelPosition = xlLow
  92.             
  93.         .Axes(xlValue, xlSecondary).TickLabels.NumberFormatLocal = "0_ "        ' 代表物件的格式代碼。
  94.         .Axes(xlValue).TickLabels.NumberFormatLocal = "0_ "                     ' 代表物件的格式代碼。
  95.     End With

  96.     With ActiveChart.SeriesCollection(1).Format.Line       ' 成交價
  97.         .Visible = msoTrue
  98.         .ForeColor.RGB = RGB(255, 0, 0)          ' 成交價指數顯示之顏色    ---   紅色
  99.         .Transparency = 0
  100.     End With

  101.     With ActiveChart.SeriesCollection(2).Format.Line       ' 主力界入
  102.         .Visible = msoTrue
  103.         .ForeColor.RGB = RGB(32, 178, 170)       ' 主力界入指數顯示之顏色    ---   海洋綠色
  104.         .Transparency = 0
  105.     End With

  106.     With ActiveChart.SeriesCollection(3).Format.Line       ' 散戶方向
  107.         .Visible = msoTrue
  108.         .ForeColor.RGB = RGB(65, 105, 225)       ' 散戶方向指數顯示之顏色    ---   天藍色
  109.         .Transparency = 0
  110.     End With
  111.    
  112.     With ActiveChart.SeriesCollection(4).Format.Line       ' 成交量
  113.         .Visible = msoTrue
  114.         .ForeColor.RGB = RGB(147, 112, 219)      ' 成交量指數顯示之顏色    ---   紫色
  115.         .Transparency = 0
  116.     End With

  117.     xRow = 2
  118.     yCol = 1
  119.    
  120.     cHeight = 488
  121.     cWidth = 450
  122.     inLeft = 30
  123.     inTop = 30
  124.     inWidth = 378

  125.     text = "主力、散戶、與成交價、量"

  126.     chartname = Trim(Replace(ActiveChart.Name, ActiveSheet.Name, ""))
  127.     ActiveChart.ChartArea.Height = cHeight                           ' 將原本設定之高度調至適度位置
  128.     ActiveChart.ChartArea.Width = cWidth
  129.                
  130.     ActiveSheet.Shapes(chartname).Left = Cells(xRow, yCol).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  131.     ActiveSheet.Shapes(chartname).Top = Cells(xRow, yCol).Top
  132.       
  133.     With ActiveChart.PlotArea                    ' 實際繪圖區塊的範圍設定
  134.          .InsideLeft = inLeft
  135.          .InsideTop = inTop
  136.          .InsideWidth = inWidth
  137.     End With
  138.                
  139.     ActiveChart.SetElement (msoElementChartTitleCenteredOverlay)
  140.     ActiveChart.ChartTitle.text = text
  141.     ActiveChart.ChartTitle.Format.TextFrame2.TextRange.Font.Size = 16
  142.         
  143.     ActiveChart.Legend.Position = xlCorner     ' 將圖表圖示從圖表最下方調整到圖表之右上角位置
  144.     ' Set rXY = Nothing
  145. End Sub

  146. Sub resetRC()
  147.     Call setRowColumn("統計圖表")
  148.     Call setRowColumn("Omega")
  149. End Sub

  150. Sub setRowColumn(sDraw As String)
  151.     Dim oShape As Shape
  152.     Dim xRow, yCol, cHeight, cWidth, inLeft, inTop, inWidth As Integer
  153.     Dim totalRows As Single
  154.     Dim chartname As String
  155.    
  156.     totalRows = Sheets("統計圖表").Range("B" & Rows.Count).End(xlUp).Row     ' 傳回 B 欄所使用儲存格之最後一格之列號
  157.     Sheets(sDraw).Select
  158.    
  159.             
  160.     For Each oShape In ActiveSheet.Shapes
  161.         If oShape.Type = 3 Then
  162.             ActiveSheet.ChartObjects(oShape.Name).Activate                      ' 滑鼠點在 "圖表 #" 上 (例如:主力界入)。
  163.                
  164.             ' 圖示會分別顯示出 資料錄匯入之時間、成交價、主力界入、散戶方向、以及 成交量。
  165.             ' Set rXY = Union(Range("統計圖表!$B$1:統計圖表!$B$" & totalRows), Range("統計圖表!$F$1:統計圖表!$F$" & totalRows), Range("統計圖表!$I$1:統計圖表!$I$" & totalRows), Range("統計圖表!$J$1:統計圖表!$J$" & totalRows), Range("統計圖表!$V$1:統計圖表!$V$" & totalRows))
  166.             ' ActiveChart.SetSourceData Source:=rXY
  167.             ActiveChart.SetSourceData Source:=Range("統計圖表!$B$1:統計圖表!$B$" & totalRows & ", 統計圖表!$F$1:統計圖表!$F$" & totalRows & _
  168.             ", 統計圖表!$I$1:統計圖表!$J$" & totalRows & ", 統計圖表!$V$1:統計圖表!$V$" & totalRows)  ' 圖示會分別顯示出 成交價、主力界入、散戶方向、以及成交量。
  169.             
  170.             ActiveChart.SeriesCollection(4).ChartType = xlColumnClustered          ' 堆疊直條圖
  171.                                        
  172.             xRow = 2
  173.             yCol = 1
  174.                
  175.             cHeight = 488
  176.             cWidth = 450
  177.             inLeft = 30
  178.             inTop = 30
  179.             inWidth = 378
  180.             
  181.             chartname = Trim(Replace(ActiveChart.Name, ActiveSheet.Name, ""))
  182.             ActiveChart.ChartArea.Height = cHeight                           ' 將原本設定之高度調至適度位置
  183.             ActiveChart.ChartArea.Width = cWidth
  184.                
  185.             ActiveSheet.Shapes(chartname).Left = Cells(xRow, yCol).Left     ' 設定此圖表實際擺放的 X、Y 座標位置。
  186.             ActiveSheet.Shapes(chartname).Top = Cells(xRow, yCol).Top
  187.         
  188.             With ActiveChart.PlotArea                    ' 實際繪圖區塊的範圍設定
  189.                  .InsideLeft = inLeft
  190.                  .InsideTop = inTop
  191.                  .InsideWidth = inWidth
  192.             End With
  193.         End If
  194.     Next
  195.     ' Set rXY = Nothing
  196. End Sub
複製代碼
[attach]10448[/attach]
作者: pocksoft    時間: 2016-12-31 17:14

請問在draw charts裡面,有一連串的selection.borders設定,他們是否有特殊意義?有需要保留嗎?
作者: c_c_lai    時間: 2016-12-31 18:53

回復 6# pocksoft
drawCharts(sta As String) 的 sta 為工作表單名稱,
Sheets(sta).Select 即為 該工作表單 的選用,
Selection 即是。
作者: c_c_lai    時間: 2016-12-31 18:59

回復 6# pocksoft
亦可修改為: ( 使用 With )
  1. Sub drawCharts(sta As String)
  2.     Dim str As String
  3.    
  4.     str = ActiveSheet.Name
  5.     Sheets(sta).Select

  6.     Call removeCharts(sta)

  7.     With Selection
  8.         .Borders(xlDiagonalDown).Style = xlNone
  9.         .Borders(xlDiagonalUp).Style = xlNone
  10.         .Borders(xlEdgeLeft).Style = xlNone
  11.    
  12.         With .Borders(xlEdgeTop)
  13.             .Style = xlContinuous
  14.             .ColorIndex = 0
  15.             .TintAndShade = 0
  16.             .Weight = xlThin
  17.         End With
  18.         
  19.         .Borders(xlEdgeBottom).Style = xlNone
  20.    
  21.         With .Borders(xlEdgeRight)
  22.             .Style = xlContinuous
  23.             .ColorIndex = 0
  24.             .TintAndShade = 0
  25.             .Weight = xlThin
  26.         End With
  27.     End With
  28.    
  29.     Call mainPowerForce(sta)
  30.    
  31.     Cells(1, 1).Select
  32.     Sheets(str).Select
  33. End Sub
複製代碼

作者: c_c_lai    時間: 2017-1-1 07:48

本帖最後由 c_c_lai 於 2017-1-1 07:51 編輯

回復 6# pocksoft
[attach]26271[/attach]
那只是強調繪圖邊框之描述,
實際在線型繪製的過程已予設定了。
[attach]26272[/attach]
其實你的質疑是對的。(如圖示)




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