[算表] VBA 作圖參照問題

作者: van6499 (KIDD)   2019-02-24 17:07:29
軟體:Excel
版本:2010
目前有個產量EXCEL檔案只有一個Sheet,目前已經做出可以作圖的VBA code(如下)
想要將裡面的SheetA1 改寫成 本檔案的第一個工作頁
這樣之後換檔案執行VBA就不用再改Sheet name
有嘗試過以ActiveWorkbook.Worksheets(1)取代,但是還是出問題
我的產量有值的只有10000筆,作圖的結果會算到10700多筆,有時甚至不給RUN
請教各位大大該怎麼修正比較好?
Sub Production_History()
Dim chartA As Chart
Dim i As Long
i = Worksheets("SheetA1").UsedRange.Rows.Count
Set chartA = Charts.add(After:=Worksheets(Worksheets.Count))
With chartA
.Name = "產量-用量"
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = "=""產量"""
.SeriesCollection(1).XValues = "='SheetA1'!$R$4:$R$" & i
.SeriesCollection(1).Values = "='SheetA1'!$C$4:$C$" & i
.SeriesCollection.NewSeries
.SeriesCollection(2).Name = "=""用量"""
.SeriesCollection(2).XValues = "='SheetA1'!$R$4:$R$" & i
.SeriesCollection(2).Values = "='SheetA1'!$O$4:$O$" & i
.SeriesCollection(2).AxisGroup = 2
End With
End Sub
作者: soyoso (我是耀宗)   2019-02-24 17:19:00
產量有值只有10000筆,但算到10700多筆方面,有可能某欄內有資料於這10000筆下方,因用worksheets.usedrange的方式就會計算進去,這方面可用range.end、range.find方式找到某一欄最後一筆有值的儲存格,要回傳列號的話range.row只有一個工作表,將sheeta1改為這個工作表名的話設個變數=worksheets(1).name,下方以&連接該變數方式取代原本在字串內的sheeta1,寫法就雷同巨集內連接變數i值至於有時不給run方面就要看不給執行是什麼,執行沒產生結果?執行了卻出現錯誤訊息?
作者: van6499 (KIDD)   2019-02-24 17:32:00
最常發生的錯誤是我指定兩個數列作圖結果他跑出第3.4.5.6個數列來設個變數=worksheets(1).name 我試試看 感謝S大目前嘗試OK,太感謝了~
作者: soyoso (我是耀宗)   2019-02-24 17:46:00
回文寫到指定兩個數列跑出3個以上數列來看,有可能儲存格所停留的位置或是有選取複數範圍儲存格,所以在charts.add時就新增進去了所以要避免這個情況的話在set chartA = charts.add(..)的下方加上charta.chartarea.clear

Links booklink

Contact Us: admin [ a t ] ucptt.com