一个复杂的问题,但我会尝试解释 我有一个主要工作表“OPL”,其中有几列。我在VBA中编写了一个代码,它根据我给定的标准提取信息,并在新工作表“QB”中显示带有提取信息的所有列。
现在让我们说“OPL”有来自A to J
的10列,我的代码会提取特定行并在相应列标题下的“QB”上显示它们。
现在我希望用户应该选择他想要在“QB”上看到的列。让我们说他希望只看到C和D列的信息。因此,他从下拉列表中选择列C和D,当他运行宏时,他应该只在“QB”上获得C列和D列。
P.S。我知道这个问题太广泛了,我也不能发布代码,因为它会让事情变得更复杂。我不是要求代码,但任何人都可以指导我如何动态显示列?
答案 0 :(得分:0)
说 QPL 就像:
在 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
中的最后一行当填充此小标准块时,宏将运行并填充单元格以检索所需数据:
只需更改小标准块中的四个单元格中的任何一个即可重新运行宏。