簡體   English   中英

Access VBA創建和格式化圖表宏只能在Excel中使用,而不能在Access中使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM