Excel中的VBA访问格式图表

时间:2011-05-27 20:30:28

标签: excel vba ms-access-2007 charts

EDITED

如果你们有一个可能有助于解决这个问题的链接,我真的很想读它,因为到目前为止我还没有看到任何非常有用的东西。

在访问中我试图将任意数据导出到Excel,创建多个图表(现在只是在饼图上工作),格式化这些图表,然后将它们发送到空白(图表)表。到目前为止,我已经导出数据并能够创建图表,我只是不知道如何格式化它们。

我想要做的格式是摆脱图例,将数据标签放入名称,值和百分比,然后将其移动到“图表”表。

编辑我现在能够摆脱图例,并插入名称,值和百分比的数据标签。我仍然坚持将Chart对象移动到新的工作表,底部是代码。

我还尝试在excel中录制一个宏,稍微编辑它然后将其移动到访问但我一直出错,通常会出现类似于“此对象没有该方法”的错误。下面我将包括一个我可能得到的测试表以及如何创建饼图。

代码:

Function Excel_Export_Two_Column()
Dim db As DAO.Database, rs As DAO.Recordset
Dim WBO As Object, WSO As Object, WSO2 As Object, XLO As Object, oChart As Object
Dim x As Long, y As Long, z As Integer, strTab As String, strcompany As String
Dim endTable As Long
Dim tempName As String, tempNum1 As Long, tempNum2 As Long, totalEnd As Long

z = 1
Set db = CurrentDb()
Set rs = db.OpenRecordset("QRY2Col")

Set XLO = CreateObject("Excel.Application")
XLO.Application.Workbooks.Add

Set WBO = XLO.Application.ActiveWorkbook
Set WSO = WBO.Worksheets(1)
Set WSO2 = WBO.Worksheets(2)

WSO.Name = Left("export", 31)

For y = 0 To rs.Fields.Count - 1
    WSO.Cells(1, 1) = "Num"
    WSO.Cells(1, y + 2) = rs(y).Name
Next y

x = 1
Do While Not rs.EOF()
    x = x + 1
    WSO.Cells(x, 1) = x - 1
    For y = 0 To rs.Fields.Count - 1
        WSO.Cells(x, y + 2) = Trim(rs(y))
    Next y

    rs.MoveNext
    DoEvents
Loop

WSO.Cells.Rows(1).AutoFilter
WSO.Application.Cells.Select
WSO.Cells.EntireColumn.AutoFit

x = 1
Do While WSO.Cells(x, 1) <> ""
    x = x + 1
Loop

endTable = x - 1

WSO2.Cells(1, 1) = "Name"
WSO2.Cells(1, 2) = "Num"
totalEnd = 2
For x = 2 To endTable
    If (WSO.Cells(x, 2) <> "") Then
        tempName = WSO.Cells(x, 2)
        tempNum1 = WSO.Cells(x, 3)

        For y = 2 To totalEnd
            If (WSO2.Cells(y, 1) = tempName) Then
                tempNum2 = WSO2.Cells(y, 2)
                WSO2.Cells(y, 2) = tempNum1 + tempNum2
                Exit For
            ElseIf (y = totalEnd) Then
                WSO2.Cells(y, 1) = tempName
                WSO2.Cells(y, 2) = tempNum1
                totalEnd = totalEnd + 1
            End If
        Next y
    End If
Next x

Set oChart = WSO2.ChartObjects.Add(500, 100, 500, 300).Chart
oChart.SetSourceData Source:=WSO2.Range("A1").Resize(totalEnd - 1, 2)
oChart.ChartType = 5

strcompany = "Export"
If Dir(CurrentProject.Path & "\COLA_AR_" & Format(Date, "yyyymm") & "_XXX_" & strcompany & ".xlsx") <> "" Then
    Kill CurrentProject.Path & "\COLA_AR_" & Format(Date, "yyyymm") & "_XXX_" & strcompany & ".xlsx"
End If

Call WBO.SaveAs(CurrentProject.Path & "\COLA_AR_" & Format(Date, "yyyymm") & "_test_2_Col.xlsx")


WBO.Close savechanges:=True
Set WBO = Nothing

XLO.Application.Quit
Set XLO = Nothing

rs.Close
db.Close
End Function

表:请注意,此表位于Access

中的查询(名为“QRY2Col”)中
Field1          Field2
CTOD            64646515
BFTBC2          6656532
WTOW            451512355
DT3             684321818
STC2            652553548
BFTBC2          12
DT3             84954987
ATCR            99999999
CTOD            64185435
BFTBC2          321569846
STC2            6543518
STC2            3518684
ATCR            35481354

数据标签代码

Set oChart = WSO2.ChartObjects.Add(500, 100, 500, 300).Chart
oChart.SetSourceData Source:=WSO2.Range("A1").Resize(totalEnd - 1, 2)
' Number corresponds to a pie chart
oChart.ChartType = 5

' Adds data Labels
oChart.SeriesCollection(1).HasDataLabels = True

' Format chart
oChart.SeriesCollection(1).DataLabels.ShowCategoryName = True
oChart.SeriesCollection(1).DataLabels.ShowPercentage = True
oChart.SeriesCollection(1).HasLeaderLines = True
oChart.Legend.Delete

尝试移动图表的代码

下面是我录制的一个例子(通过添加“oChart”编辑),但这仍然不起作用。突出显示的问题是“xlLocationAsNewSheet”,VBA表示“变量未定义”。

oChart.Location Where:=xlLocationAsNewSheet

谢谢,

Jesse Smothermon

1 个答案:

答案 0 :(得分:0)

最后一部分,试试这个:

oChart.Location Where:=1

' xlLocationAsNewSheet = 1
' xlLocationAsObject = 2
' xlLocationAutomatic = 3

正如大卫指出的那样,你不能使用Excel对象库中定义的类型/枚举等,而不引用它,因此你不得不使用整数常量。