在第一行输入后选择第二枢轴表行数据VBA Userforms&组合框

时间:2015-07-15 14:27:51

标签: excel vba excel-vba combobox userform

我有一个Userform,其中我提交了一些数据,从我的数据框中填充了更多数据,在我从该框中选择数据后,我需要从第三个框中选择该项目的数据。收集的数据来自数据透视表。

Box1只是一个提供的组合框,而2和3直接来自数据透视表。我有基于Box1的Box2工作功能,但这是因为它们是由工作表分开的。

目标是Box1可以= A,B,C然后如果Box1 = A则Box2可以= 1,2,3然后如果Box2 = 1则Box3 = x,y,z。

问题出现在Box3中,它返回Box2 = 1,2 AND 3的信息,而不仅仅是1.

我目前的代码是:

    lCommentCount = Sheets(pt).PivotTables("Pivottable1").TableRange2.Rows.Count

    For i = 1 To lCommentCount
        If Me.ptDatabox.Value = Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").LabelRange.Offset(i, 0).List Then
            OEEDataEntry.commentbox.AddItem Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").LabelRange.Offset(i, 1)
        End If
    Next i

    For i = Me.commentbox.ListCount - 1 To 0 Step -1
        If Me.commentbox.List(i) = "" Or Me.commentbox.List(i) = "Grand Total" Or Me.commentbox.List(i) = ("(blank)") Then
            Me.commentbox.RemoveItem (i)
        End If
    Next i

1 个答案:

答案 0 :(得分:0)

我一整天都在玩这个,发现你必须让第二行可见。这段代码效果很好。注意在计算之前显示细节。

    Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").ShowDetail = _
True

For i = 1 To lCommentCount
    pti = Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").LabelRange.Offset(i, 0).Value
    If Me.ptDatabox.Text = pti Then
        OEEDataEntry.commentbox.AddItem Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").LabelRange.Offset(i, 1)
    End If
Next i

For i = Me.commentbox.ListCount - 1 To 0 Step -1
    If Me.commentbox.List(i) = "" Or Me.commentbox.List(i) = "Grand Total" Or Me.commentbox.List(i) = ("(blank)") Then
        Me.commentbox.RemoveItem (i)
    End If
Next i

如果出于某种原因想要更改第一个框中给出的信息,那么您需要将其设置为在第一个框的重新退出时折叠所有项目符号,以便Sheets(pt).PivotTables("PivotTable1").PivotFields("ptData").ShowDetail = False 但这需要在您开始计算列表中的项目之前。