返回列表 上一主題 發帖

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

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

我有一些疑惑想請各位大大指導,程式碼如下: (裡面分別處理了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?
謝謝您!

就是在這裏能學到很多東西,能人多神人更多
80 字節以內
不支持自定義 Discuz! 代碼

TOP

回復 45# c_c_lai
c_c_lai版大;你好…看了你的Excel圖表只有讚嘆…希望多多發表文章供我們學習…謝謝了~~
50 字節以內
不支持自定義 Discuz! 代碼

TOP

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

TOP

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

TOP

回復 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


TOP

本帖最後由 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
複製代碼
如此才對! 雖然是小地方,卻把老命快搞掉了!
如今再把他稍加修飾成我要的需求,我把正確的檔案亦一併附上,
可供有心向學的共修們一同來研習、討論。

還好骨頭沒散掉.rar (187.38 KB)



差點忘了向您說聲謝謝!
阿里牙豆!

TOP

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

TOP

回復 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) ?  一維陣列嗎?
除了這等宣告方式外,還有何種方式表達?

TOP

回復 41# c_c_lai
沒2010版 哪我也沒法度了

TOP

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題