2016-04-07 12 views
2

Ein kompliziertes Problem, aber ich werde versuchen, es zu erklären.
Ich habe ein Hauptarbeitsblatt "OPL" mit mehreren Spalten hinein. Ich habe einen Code in VBA geschrieben, der die Informationen basierend auf meinen angegebenen Kriterien extrahiert und alle Spalten mit den extrahierten Informationen in einem neuen Arbeitsblatt "QB" anzeigt.Dynamische Anzeige von Spalten in einem Arbeitsblatt

Jetzt sagen wir "OPL" hat 10 Spalten von A to J und mein Code extrahiert die spezifischen Zeilen und zeigt es auf "QB" unter den jeweiligen Spaltenüberschriften.

Jetzt möchte ich, dass der Benutzer die Spalten auswählen soll, die er auf "QB" sehen möchte. Sagen wir, er möchte die Information nur für Spalte C und D sehen. Also wählt er Spalte C und D aus der Dropdown-Liste und wenn er das Makro ausführt, sollte er nur Spalten C und Spalte D auf "QB" bekommen.

p.s. Ich weiß, dass es eine zu weite Frage ist, und ich kann den Code auch nicht posten, da dies die Dinge komplizierter machen wird. Ich frage nicht nach dem Code, aber kann mir jemand helfen, Spalten dynamisch anzuzeigen?

+0

Fügen Sie ein Listenfeld hinzu, in dem der Benutzer die relevanten Felder auswählen kann, und schließen Sie dann entweder die anderen Felder aus der Analyse aus oder lassen Sie die Spalten in QB ausblenden. http://StackOverflow.com/a/17090864/6028892 – Will

+0

ZELLEN sollten in Ihrem Kopieren helfen, so für Spalte d, Zellen (Zeile, "D"), wo "D" aus Ihrer Kombination ist, wenn Ihre Kombination "C und D ", müssen Sie SPLIT durch" und "und verwenden Sie das zurückgegebene Array. –

+0

@Will danke für die schnelle Antwort. Aber ich möchte einige Punkte löschen. a) Ich kann andere Felder nicht aus der Analyse ausschließen, wie es ein Benutzer benötigt, um die Werte von Spalte C und D zu sehen, aber möglicherweise andere Benutzer. Benötigt alle Spalten oder vielleicht 5. b) Es sollte dynamisch sein. z.B. Wenn ich die Spalten A und C aus der Liste auswähle, sollten nur Spalte A und C auf "QB" erscheinen, also denke ich, dass das Ausblenden der Spalten auch nicht hilft, da ich die unerwünschte Spalte immer manuell verstecken müsste. – Nikky

Antwort

0

Say QPL ist wie:

enter image description here

Geben Sie diesen Ereignis Makro im QB Arbeitsblatt Codebereich:

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 

In QB wir betreten Der Erste gewünschte Spalte in A1, die letzte gewünschte Spalte in B1, wobei die erste gewünschte Zeile in C1, und die letzte gewünschte Zeile in D1

Wenn dieser kleine Kriterien Block gefüllt ist, wird das Makro laufen und bevölkern, welche die gewünschten Daten abzurufen:

enter image description here


Ändern Sie einfach eine der vier Zellen im kleinen Kriterienblock, um das Makro erneut auszuführen.

Verwandte Themen