动态显示列在工作表中

时间:2016-04-07 11:05:33

标签: excel vba excel-vba

一个复杂的问题,但我会尝试解释 我有一个主要工作表“OPL”,其中有几列。我在VBA中编写了一个代码,它根据我给定的标准提取信息,并在新工作表“QB”中显示带有提取信息的所有列。

现在让我们说“OPL”有来自A to J的10列,我的代码会提取特定行并在相应列标题下的“QB”上显示它们。

现在我希望用户应该选择他想要在“QB”上看到的列。让我们说他希望只看到C和D列的信息。因此,他从下拉列表中选择列C和D,当他运行宏时,他应该只在“QB”上获得C列和D列。

P.S。我知道这个问题太广泛了,我也不能发布代码,因为它会让事情变得更复杂。我不是要求代码,但任何人都可以指导我如何动态显示列?

1 个答案:

答案 0 :(得分:0)

QPL 就像:

enter image description here

QB 工作表代码区域中输入此事件宏

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim crit As Range, fCol As String
    Dim lCol As String, fRow As Long, lRow As Long
    Dim i As Long, j As Long, K1 As Long, K2 As Long
    Dim wf As WorksheetFunction, Nul As String

    Set wf = Application.WorksheetFunction
    Set crit = Range("A1:D1")
    Nul = ""
    If Intersect(crit, Target) Is Nothing Then Exit Sub
    If wf.CountIf(crit, Nul) > 0 Then Exit Sub
    Application.EnableEvents = False

        fCol = [A1]
        lCol = [B1]
        fRow = [C1]
        lRow = [D1]
        K1 = 2
        K2 = 1
        For i = fRow To lRow
            For j = L2Num(fCol) To L2Num(lCol)
                Cells(K1, K2).Formula = "=QPL!" & Num2L(j) & i
                K2 = K2 + 1
            Next j
            K2 = 1
            K1 = K1 + 1
        Next i
    Application.EnableEvents = True
End Sub

Public Function L2Num(S As String) As Long
    L2Num = Asc(S) - 64
End Function

Public Function Num2L(L As Long) As String
    Num2L = Chr(64 + L)
End Function

QB 中,我们在 A1 中输入第一个所需的列, B1 中的最后一个所需列,中的第一个所需行C1 ,以及 D1

中的最后一行

当填充此小标准块时,宏将运行并填充单元格以检索所需数据:

enter image description here


只需更改小标准块中的四个单元格中的任何一个即可重新运行宏。