【问题标题】:sort a PivotTable in excel vba from 2 input field从 2 个输入字段中对 excel vba 中的数据透视表进行排序
【发布时间】:2018-01-18 20:38:05
【问题描述】:

我试图弄清楚如何使用来自最终用户的 2 个输入字段对数据透视表进行排序。目前我只能用一个来做。我现在的代码是:

Private Sub SortingBox_Change()
Dim PT As PivotTable
Dim CB As ComboBox

Set PT = Worksheets("Tableau Dynamique").PivotTables("LEO")
Set CB = SortingBox

If CB.Text = "Asc - % relevé en ligne" Then
    PT.PivotFields("No Marchand").AutoSort Order:=xlAscending, Field:="% relevé en ligne"

ElseIf CB.Text = "Desc - % relevé en ligne" Then
    PT.PivotFields("No Marchand").AutoSort Order:=xlDescending, Field:="% relevé en ligne"

ElseIf CB.Text = "No Marchand" Then
    PT.PivotFields("No Marchand").AutoSort Order:=xlAscending, Field:="No Marchand"

End If
End Sub

它工作正常,但我需要每个升序和降序场景的列表条目。我更喜欢使用单独的组合框来设置 AutoSort.Order,而不是设置字段。唯一的问题是,当我尝试这样做时,它告诉我我没有足够的参数。

有谁知道我可以做些什么来解决这个问题?

【问题讨论】:

  • 你能进一步澄清你的问题吗?也许您可以链接到显示您想要的图像。

标签: excel sorting pivot-table vba


【解决方案1】:

如果不清楚,抱歉。同时。我在周末找到了解决方案。对于任何人,如果他们在这里寻找类似的东西,我所做的。

首先澄清:

我有一个动态表,我希望最终用户能够以一种愉快的方式对表进行排序(如果没有 VBA,他们将不得不在主列中打开排序菜单并选择额外的排序选项,而不是选择一堆获得他们想要的东西的选择权,如果你真的不知道该怎么做,就不太清楚你必须做什么)。

我选择放置 ComboBox,这样可以更轻松地进行这样的排序: ComboBoxImg。对不起它的法语。简而言之,他们将有一个 ComboBox 来根据 (1) 字段、(2) 订单、(3) 枢轴线(基于他们想要的月份)进行排序

为了简化代码,我改为为每个能够与 AutoSort 方法交互的 ComboBox 创建一个变量。最终代码如下所示:

Public Sub Sorter()
Dim PT As PivotTable
Dim OrderValue As String
Dim OrderSort As XlSortOrder
Dim FieldValue As String
Dim MonthValue As Integer
Dim TableName As String

On Error Resume Next

TableName = "LEO"
Set PT = Worksheets("Tableau Dynamique").PivotTables(TableName)
OrderValue = Range("OrderingBoxValue").Value
FieldValue = Range("SortingBoxValue").Value
MonthValue = Range("MonthInt").Value

If OrderValue = "Ascendant" Then
    OrderSort = xlAscending
ElseIf OrderValue = "Descendant" Then
    OrderSort = xlDescending
End If

If MonthValue = 0 Then
    ActiveSheet.PivotTables(TableName).PivotFields("No Marchand").AutoSort OrderSort _
    , FieldValue
Else
    ActiveSheet.PivotTables(TableName).PivotFields("No Marchand").AutoSort OrderSort _
    , FieldValue, ActiveSheet.PivotTables(TableName).PivotColumnAxis. _
    PivotLines(MonthValue), 1
End If
End Sub

基本上,我将 ComboBox 链接到另一个工作表中的单元格,然后在 ComboBox_Change 上调用 Sub。

显然,如果有人认为他们有更有效或整体更好的解决方案,我会很高兴看到它。我对 VBA 很陌生,所以我确信我的代码可以改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 2020-06-16
    • 2011-09-07
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多