dynamic显示列在工作表中

一个复杂的问题,但我会尽力解释。
我有一个主要的工作表“OPL”与几列到它。 我已经在VBA中编写了一个代码,该代码根据给定的条件提取信息,并在新的工作表“QB”中显示包含提取信息的所有列。

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

现在我希望用户应该select他想在“QB”上看到的列。 假设他想要查看C和D列的信息。 所以他从下拉列表中select列C和D,当他运行macros时,他应该只获得“QB”上的C列和D列。

ps我知道这是一个太宽泛的问题,我也不能发布代码,因为它会使事情变得更加复杂。 我不是要求的代码,但任何人都可以指导我如何dynamic显示列?

QPL是这样的:

在这里输入图像说明

QB工作表代码区域中input此事件macros

 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中input第一个所需的列,在B1中input最后一个所需的列,在C1中input第一个所需的行,在D1中input最后一个所需的行

当这个小的标准块已经被填充,macros将运行并填充单元格来检索所需的数据:

在这里输入图像说明

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