我有一个数据库,我需要使用一个数据透视表(我已经创建了)。我试图做到这一点,以便当双击其中一行中的单元格时(我已经知道如何获取数据透视表中的哪个对象被双击,所以这不是问题),将显示详细信息。
因此,当我双击行对象时,我已经能够显示所有详细信息行,问题是它显示了所有详细信息行,而不仅仅是我需要的行。我只需要一行的原因是由于未来的数据量很大(即数百行)。
我尝试使用手表来跟踪详细信息字段,但这让我陷入循环。
我当前的访问表单代码如下:
Option Compare Database
Private Sub Form_Load()
Me.PivotTable.activedata.hidedetails
End Sub
Private Sub Form_DblClick(Cancel As Integer)
Dim PTO As Object
Set PTO = Me.PivotTable
Set PTO = PTO.ActiveObject
If (LCase(TypeName(PTO)) <> "nothing") Then
On Error GoTo endr: ' ignores errors
Select Case UCase(PTO.Field.Basename)
Case UCase("Category 1")
MsgBox Me.PivotTable.ActiveObject.Value, vbOKOnly ' a test to prove double clicking works on category 1
Case UCase("Category 2")
' Me.PivotTable.activeobject.expanded = Not Me.PivotTable.activeobject
' Me.PivotTable.activedata
' PTO.Data.showdetails
' PTO.axis.Data.DetailLeft =
' Me.PivotTable.Selection.showdetails
' PTO.axis.Data.currentcell.Data.showdetails
' Me.PivotTable.selection.activedata.showdetails
Me.Requery
MsgBox Me.PivotTable.ActiveObject.Value, vbOKOnly ' a test to prove double clicking works on category 2
' Me.PivotTable.activeObject.Field.DataField
' Me.Detail.Visible = Not Me.Detail.Visible
Case Else
End Select
End If
endr:
Set PTO = Nothing
End Sub
表定义:
田野 | 类型 |
---|---|
独特的钥匙 | 文字 |
类别1 | 文字 |
类别 2 | 文字 |
价值观1 | 数量 |
价值观2 | 数量 |
示例数据定义:
独特的钥匙 | 类别1 | 类别 2 | 价值观1 | 价值观2 |
---|---|---|---|---|
测试1-1-1 | c1 | sc01 | 123 | 156 |
测试1-1-2 | c1 | sc01 | 156 | 3857 |
测试1-2-1 | c1 | sc02 | 6576 | 37357 |
测试1-2-3 | c1 | sc03 | 674698 | 9876 |
测试2-0-1 | c2 | sc10 | 6476 | 3753 |
测试2-1-1 | c2 | sc11 | 687 | 3738 |
数据透视表布局:
真实数据有更多具有不同值的列,有限值是作为示例的最低值的结果。
我没有使用具有多个分组部分的连续形式的主要原因是因为它不会折叠,并且会很大。最终,唯一能符合我的标准的是:
编辑:抱歉用词不好,但我真的想不出更好的方式来表达我的要求。
编辑 2:我知道较新的版本不支持数据透视表。不幸的是,access 2010 并不是我真正可以选择使用的东西。
编辑 3:更新了代码,并提供了带有示例数据的访问屏幕截图。
编辑 4:更新格式以包含表定义和示例数据作为降价表。
我必须使用 RunCommand 来取消隐藏。
Me.Filter = "Category2='" & Me.PivotTable.ActiveObject.Value & "'"
Me.FilterOn = True
DoCmd.RunCommand acCmdPivotTableShowDetails
枢轴表单可以是子表单,然后主表单上的按钮可以折叠和取消筛选枢轴表单。
Private Sub Command1_Click()
Me.Form1.Form.PivotTable.activedata.hidedetails
Me.Form1.Form.FilterOn = False
End Sub