- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
回復 20# lamihsuen
請將 drawStatistics() 整個抽換掉:- Sub DrawStatistics(ct As Integer)
- Dim tbl As String
- Dim totalRow As Long
- Dim StartKBarRow, EndKBarRow As Long
- ' StartKBarRow = 6
- With Worksheets(ct)
- tbl = .Name
- ' sPos(1) = CInt(Mid("205*090*090*100*132*096*132*090*173*090*314*090", (ct - 4) * 4 + 1, 3)) ' 圖標座標(列)
- ' 為考量在實務運用上,每張表單內含資料內容之多寡不一,可能實際使用列數時有增減,故改以動態處理。
- sPos(1) = .UsedRange.Rows.Count ' 以 c 為例,總共使用(輸入)了 204 Rows 資料錄。
- While IsEmpty(.Cells(sPos(1), 3).Value) And sPos(1) > 6 ' 尚須再次過濾部分空白與非真實匯入資料的問題列
- sPos(1) = sPos(1) - 1
- Wend
-
- ' EndKBarRow = .Range("A1").CurrentRegion.Rows.Count ' 以 c 為例,判斷A1:A51區間實際使用了(共有)多少列(Rows)
- ' 以 c 為例,A155:A204 間總共使用了多少列(50)。接著再求出上一個區間的最後一行的所在行數 (204-50-2(空白列)=152)。
- EndKBarRow = sPos(1) - .Range("A" & sPos(1)).CurrentRegion.Rows.Count - 2
- ' 以 c 為例, A105:A152 間總共使用了多少列(48)。接著再求出本區間的第一行的所在行數 (152-48+5(標題列)=109)。
- StartKBarRow = EndKBarRow - .Range("A" & EndKBarRow).CurrentRegion.Rows.Count + 5
- If (StartKBarRow < 6) Then StartKBarRow = 6 ' < 6 則加 1, 因起始列最少為 6。
-
- Set Chart_Source = Range(tbl & "!$C$" & CStr(StartKBarRow) & ":" & tbl & "!$C$" & CStr(EndKBarRow))
-
- sPos(1) = sPos(1) + 5 ' 圖標座標(列)
- sPos(2) = CInt(Mid("001*001*001*001*001*001*001*001*001*001*001*001", (ct - 4) * 4 + 1, 3)) ' 圖標座標(欄)
- sPos(3) = CInt(Mid("900*900*900*900*900*900*900*900*900*900*900*900", (ct - 4) * 4 + 1, 3)) ' 圖表寬度
- sPos(4) = CInt(Mid("320*320*320*320*320*320*320*320*320*320*320*320", (ct - 4) * 4 + 1, 3)) ' 圖表高度
- xText = UCase(tbl) & " : Z - Score"
- 製圖程序 xlSh:=tbl
- End With
- End Sub
複製代碼 晚安! |
|