如何创建VBA用户界面以基于不同的KPI创建图表

时间:2018-12-09 16:01:34

标签: excel vba excel-vba

我是这个论坛和VBA的新手,并希望基于此数据库创建VBA用户界面:

DataBase

这允许用户执行以下操作:

  1. 从具有所有客户名称(包含在B列中)的复选框列表中选择一个客户名称。用户可以选择一个或多个客户。

2-根据该客户的数据创建图表。

结果如下所示:

How the chart should look like

除了使用数据透视表/图表编辑原始数据(对数据进行求和或对其进行其他操作)外,我只想简单地分别显示每个客户端的数据,以便进行比较。

任何帮助,链接,方向都将受到欢迎, 谢谢!

PS:到目前为止,我已经基于用户选择的文件开发了该数据库,一旦有了数据,我就进行计算并将结果最终存储到数据库中。如果您想了解如何创建数据库,可以为您提供帮助。

3 个答案:

答案 0 :(得分:0)

您是否可以将所有内容都放在数据透视表上?未能通过命名引用建立专用列表。即,当您在“客户端”中选择“客户端1”时,将返回其余详细信息。

要从中得到什么的总体描述需要详细说明。

答案 1 :(得分:0)

如果右键单击要计数的值(在单元格而不是图表值框中)并且不求和,则可以在“汇总值依据”字段中更改该值。如果我误解了,请告诉我。

答案 2 :(得分:0)

我将举一个例子,以便您将其与数据连接起来。

Sub setConnection()
    Dim ws As Worksheet
    Dim WB As Workbook
    Dim Pc As PivotCache
    Dim Pv As PivotTable
    Dim pFD As PivotField
    Dim con As WorkbookConnection
    Dim strConn As String
    Dim myPath As String
    Dim Target As Range
    Dim Cht As Chart, shp As Shape
    Dim objCht As ChartObject

    Set WB = ThisWorkbook
    myPath = WB.Path & "\" & "pivotData.xlsx" '<~~ set your data file path


    strConn = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & myPath & ";Mode=Share Deny Write;Extended Properties='HDR=YES;';Jet OLEDB:System database='';Jet OLEDB:Registry Path='';Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password='';Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"
    Set con = WB.Connections.Add( _
                Name:="Movie conn", _
                Description:="", _
                ConnectionString:=strConn, _
                CommandText:="Data$", _
                lCmdtype:=XlCmdType.xlCmdTable)
    'CommandText:="Data$" <~~ Database table name , this is Excel sheet 
    Set ws = Sheets("External") '<~~ set your sheet
    Set Target = ws.Range("a1")

    Target.CurrentRegion.Clear

    For Each objCht In ws.ChartObjects
        objCht.Delete
    Next objCht

    Set Pc = WB.PivotCaches.Create(SourceType:=xlExternal, SourceData:=con)
    Set Pv = Pc.CreatePivotTable(Target, TableName:="pv3")

    Set shp = ws.Shapes.AddChart
    Set Cht = shp.Chart
    With Cht
        .SetSourceData Target.CurrentRegion
    End With

    Set pFD = Pv.PivotFields("Studio") 'set your field
    With pFD
        .Orientation = xlRowField
        .Position = 1
    End With
    Set pFD = Pv.PivotFields("Year")
    With pFD
        .Orientation = xlColumnField
        .Position = 1
    End With
    Set pFD = Pv.PivotFields("Worldwide")
    With pFD
        .Orientation = xlDataField
        .Function = xlSum
        .Position = 1
    End With
End Sub

图片

enter image description here