返回列表 上一主題 發帖

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

回復 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
複製代碼

TOP

回復 5# c_c_lai
傳上檔案看看

TOP

本帖最後由 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版 皆無錯誤  請附上檔檔案方便詳看

TOP

回復 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
複製代碼

TOP

回復 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
複製代碼

TOP

回復 21# c_c_lai
上傳檔案看看

TOP

本帖最後由 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
複製代碼

TOP

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

回復 26# c_c_lai
25# 的  程式碼 你有套用試看看嗎?
經實際測試, .Activate = .Select 結果一樣,???
With ActiveSheet.ChartObjects(oShape.Name).Chart    並沒有要  Activate OR .Select

TOP

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

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

TOP

本帖最後由 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
複製代碼

TOP

        靜思自在 : 布施如播種,以歡喜心滋潤種子,才會發芽。
返回列表 上一主題