Bra*_*rad 8 excel vba pivot-table excel-vba
我目前有一个功能集,它将所选枢轴表的所有值更改为平均值.
它工作正常,我已经组装了一个表单,它传递一个工作正常的值.
在这一点上我想做的是让它决定将值转换为什么.
但是,我不断收到Type-Mismatch
错误.这是因为它被读作字符串.我该如何调整呢?
Private Sub CommandButton1_Click()
MsgBox xl & ListBox1.Value
Dim ptf As Excel.PivotField
With Selection.PivotTable
.ManualUpdate = True
For Each ptf In .DataFields
With ptf
.Function = "xl" & ListBox1.Value 'xlAverage works here
.NumberFormat = "#,##0"
End With
Next ptf
.ManualUpdate = False
End With
End Sub
Private Sub ListBox1_Click()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize() 'Set Values Upon Opening
With ListBox1
.AddItem "Sum"
.AddItem "Count"
.AddItem "Average"
.AddItem "Max"
.AddItem "Min"
.AddItem "Product"
.AddItem "CountNumbers"
.AddItem "StdDev"
.AddItem "StdDevp"
.AddItem "Var"
.AddItem "Varp"
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
当然,编译时变量的名称(例如xlAverage
)不一定会报告给运行时,它只是一个整型常量。编译后,常量名称消失了。
有很多方法可以解决这个问题,但它们可能会从类型库的复杂使用(而且并非在所有平台上都可用)到我下面建议的相对简单的解决方案,该解决方案使用字典来跟踪常量名称之间的映射以及他们的价值观。
Private Sub CommandButton1_Click()
' ...
ptf.Function = GetEnumConsolidationFunction.item(ListBox1.Value)
' ...
End Sub
Private Sub UserForm_Initialize()
Dim dict As Object, s
Set dict = GetEnumConsolidationFunction
For Each s In dict.Keys
ListBox1.AddItem s
Next
End Sub
' Our key function, fills a dictionary first time it is used
Function GetEnumConsolidationFunction() As Object
Static dict As Object '<-- static because we want to fill it only once
If dict Is Nothing Then
Set dict = CreateObject("Scripting.Dictionary")
With dict
.Add "Sum", XlConsolidationFunction.xlSum
.Add "Count", XlConsolidationFunction.xlCount
.Add "Average", XlConsolidationFunction.xlAverage
.Add "Max", XlConsolidationFunction.xlMax
.Add "Min", XlConsolidationFunction.xlMin
.Add "Product", XlConsolidationFunction.xlProduct
.Add "CountNums", XlConsolidationFunction.xlCountNums
.Add "StDev", XlConsolidationFunction.xlStDev
.Add "StDevp", XlConsolidationFunction.xlStDevP
.Add "Var", XlConsolidationFunction.xlVar
.Add "Varp", XlConsolidationFunction.xlVarP
End With
End If
Set GetEnumConsolidationFunction = dict
End Function
Run Code Online (Sandbox Code Playgroud)
顺便说一句,在这种方法中,您不必映射与变量相同的名称。您可以自由映射任何您想要在列表框中显示的名称;IE"Mimimum", "Standard Deviation", etc..
附注
请注意,您的名称中有一些拼写错误:
CountNumbers
-->CountNums
StdDev
-->StDev
StdDevp
-->StDevP
归档时间: |
|
查看次数: |
457 次 |
最近记录: |