[英]Access VBA Creating and formatting chart macro works in Excel but not in Access
我在Access中有一個模塊,該模塊可以創建新的Excel電子表格,創建新表並將數據從數據庫復制到表中。 我想從該表中創建一個圖表並將其格式化。 下面是創建圖表的子項。
Dim xlapp as Excel.Application
Dim wb as Excel.Workbook
Dim ws as Excel.Worksheet
Set xlapp = New Excel.Application
Set wb = 'created new workbook
Set ws = wb.Worksheets(1)
ws.Range("Results_Table[#All]").Select
ws.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("Results_Table[#All]")
ActiveChart.FullSeriesCollection(1).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(1).AxisGroup = 1
ActiveChart.FullSeriesCollection(2).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(2).AxisGroup = 1
ActiveChart.FullSeriesCollection(3).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(3).AxisGroup = 1
ActiveChart.FullSeriesCollection(4).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(4).AxisGroup = 1
ActiveChart.FullSeriesCollection(5).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(5).AxisGroup = 1
ActiveChart.FullSeriesCollection(6).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(6).AxisGroup = 1
ActiveChart.FullSeriesCollection(7).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(7).AxisGroup = 1
ActiveChart.FullSeriesCollection(8).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(8).AxisGroup = 2
ActiveChart.FullSeriesCollection(9).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(9).AxisGroup = 2
ActiveChart.FullSeriesCollection(10).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(10).AxisGroup = 2
ActiveChart.FullSeriesCollection(11).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(11).AxisGroup = 2
ActiveChart.FullSeriesCollection(12).ChartType = xlColumnStacked
ActiveChart.FullSeriesCollection(12).AxisGroup = 2
ActiveChart.FullSeriesCollection(13).ChartType = xlXYScatterLines
ActiveChart.FullSeriesCollection(13).AxisGroup = 2
ActiveChart.FullSeriesCollection(14).ChartType = xlXYScatter
ActiveChart.FullSeriesCollection(14).AxisGroup = 2
ActiveChart.ChartGroups(2).Overlap = 100
ActiveChart.ChartGroups(2).GapWidth = 475
ActiveChart.ChartGroups(1).GapWidth = 159
在訪問中,此代碼可以成功創建“列群集”類型的圖表。 但是,僅此而已。 我嘗試將某些零件更改為堆積的列或散點的所有內容都沒有任何作用。 我可以在所有寄存器的底部放置一個打印語句,因此我知道代碼實際上到達了這一點。
我還可以復制並粘貼此確切的代碼(將ws
更改為ActiveSheet
),它可以完美地工作,創建我想要的圖表,並按照預期的格式進行格式化。
我不確定為什么這些命令可以在Excel中工作,但不能在Access模塊中工作。
也許活動圖表不是您剛剛創建的圖表? 嘗試類似:
dim chrt as Chart
set chrt = ws.Shapes.AddChart2(201, xlColumnClustered)
chrt.SetSourceData Source:=Range("Results_Table[#All]")
用chrt替換活動圖表。
本質上,您的問題是在Excel之外訪問Excel對象。 在MS Office應用程序中,如果您不使用命名對象來限定方法,則假定您正在訪問宿主應用程序中的對象。 參見下圖與工作簿對象
Dim xlApp As Excel.Application ' UNNECESSARY IF INSIDE MS EXCEL
Set wb = xlApp.Workbooks.Open(...) ' ASSIGN EXCEL WORKBOOK EXTERNALLY
Set wb = Workbooks.Open(...) ' ASSIGN EXCEL WORKBOOK INTERNALLY
因此,您的ActiveChart
指向一個MS Access ActiveChart
對象,該對象可能是它的OLEDB圖表形式/報告對象,或者您的代碼正在出錯,但是您要抑制消息(即On Error Resume Next
),因為這聽起來不像是MS Access對象。
但是要訪問Excel的Chart對象,請使用Set
運算符將其分配給已定義的對象:
Dim myChart As Object ' LATE BINDING
'Dim myChart As Excel.Chart ' EARLY BINDING
...
ws.Range("Results_Table[#All]").Select
Set myChart = ws.Shapes.AddChart2(201, xlColumnClustered)
myChart.SetSourceData Source:=ws.Range("Results_Table[#All]")
myChart.Select
myChart.FullSeriesCollection(1).ChartType = xlColumnStacked
myChart.FullSeriesCollection(1).AxisGroup = 1
...
或者使用With...End With
塊和帶有循環的DRY-er代碼
Dim xlApp As Excel.Application
Dim i As Integer
...
ws.Shapes.AddChart2(201, xlColumnClustered).Select
With xlApp.ActiveChart
.SetSourceData Source:=ws.Range("Results_Table[#All]")
For i = 1 To 14
.FullSeriesCollection(i).ChartType = xlColumnStacked
.FullSeriesCollection(i).AxisGroup = 1
Next i
...
End With
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.