我知道sendkeys被认为是不好的和危险的,但我正在努力找出如何处理VBA中的问题,与前端Excel相比。
我编写了一个个人宏,用于设置未知数据透视表以重复所有标签,设置为表格形式,按字段列表升序排序,并最终隐藏小计。一切工作正常,只有子总计需要循环,当存在大量数据时,这个循环可能需要很长时间。奇怪的是,如果你只是从前端控件关闭子总计,那么它是瞬间的。因此,使用Sendkey比实际循环更快。(Sendkey执行热键按压以执行关闭子总计)
当它工作时,它的表现是很好的。整个过程不到一秒钟就完成了。但我觉得如果出了问题,您的“sendkeys”可能会覆盖透视信息而变成“JYTD”,这还存在一定风险。我已经注释掉了原始循环,因为处理大量数据时太慢了。您有什么想法吗?我只是使用循环方法太心急了吗?
我编写了一个个人宏,用于设置未知数据透视表以重复所有标签,设置为表格形式,按字段列表升序排序,并最终隐藏小计。一切工作正常,只有子总计需要循环,当存在大量数据时,这个循环可能需要很长时间。奇怪的是,如果你只是从前端控件关闭子总计,那么它是瞬间的。因此,使用Sendkey比实际循环更快。(Sendkey执行热键按压以执行关闭子总计)
Sub formatpivotTable()
Dim pivotName As Variant
Dim pf As pivotField
On Error Resume Next
pivotName = ActiveCell.PivotTable.Name
If pivotName = "" Then
MsgBox "You did not select a pivot table"
Exit Sub
End If
ActiveSheet.PivotTables("" & pivotName & "").ManualUpdate = True
With ActiveSheet.PivotTables("" & pivotName & "")
.RepeatAllLabels (xlRepeatLabels)
.RowAxisLayout (xlTabularRow)
.FieldListSortAscending = True
'For Each pf In .PivotFields
' pf.Subtotals(1) = True
' pf.Subtotals(1) = False
'Next
End With
ActiveSheet.PivotTables("" & pivotName & "").ManualUpdate = False
'Remove the Loop and instead use the Front End Hotkey
ActiveSheet.Activate 'Normally using activate is bad, but maybe it's good here to ensure your sendkeys hit excel? not even sure this prevents it
Application.SendKeys "%", True
Application.SendKeys "{J}", True
Application.SendKeys "{Y}", True
Application.SendKeys "{T}", True
Application.SendKeys "{D}", True
End Sub
当它工作时,它的表现是很好的。整个过程不到一秒钟就完成了。但我觉得如果出了问题,您的“sendkeys”可能会覆盖透视信息而变成“JYTD”,这还存在一定风险。我已经注释掉了原始循环,因为处理大量数据时太慢了。您有什么想法吗?我只是使用循环方法太心急了吗?