2016-06-21 11 views
0

So habe ich eine Listbox jetzt mit den Monaten Januar-Dezember. Ich habe mich gefragt, ob es einen Weg gibt, es zu einer Unterliste zu machen? Also wenn sie gerne Q1 checken würden, dann würde Januar-März überprüft werden.Unterlisten/mehrschichtige Listbox? Auch richtige Codierung für diese Schleife

Auch ich habe diesen Code jetzt:

If audienceListbox.Selected(1) = True Then 
    .Cells(iRow, 4).Value = "Yes" 
    Else: .Cells(iRow, 4).Value = "No" 
    End If 
    If audienceListbox.Selected(2) = True Then 
    .Cells(iRow, 5).Value = "Yes" 
    Else: .Cells(iRow, 5).Value = "No" 
    End If 
    If audienceListbox.Selected(3) = True Then 
    .Cells(iRow, 6).Value = "Yes" 
    Else: .Cells(iRow, 6).Value = "No" 
    End If 
    If audienceListbox.Selected(4) = True Then 
    .Cells(iRow, 7).Value = "Yes" 
    Else: .Cells(iRow, 7).Value = "No" 
    End If 
    If audienceListbox.Selected(5) = True Then 
    .Cells(iRow, 8).Value = "Yes" 
    Else: .Cells(iRow, 8).Value = "No" 
    End If 
    If audienceListbox.Selected(6) = True Then 
    .Cells(iRow, 9).Value = "Yes" 
    Else: .Cells(iRow, 9).Value = "No" 
    End If 
    If audienceListbox.Selected(7) = True Then 
    .Cells(iRow, 10).Value = "Yes" 
    Else: .Cells(iRow, 10).Value = "No" 
    End If 
    If audienceListbox.Selected(8) = True Then 
    .Cells(iRow, 11).Value = "Yes" 
    Else: .Cells(iRow, 11).Value = "No" 
    End If 
    If audienceListbox.Selected(9) = True Then 
    .Cells(iRow, 12).Value = "Yes" 
    Else: .Cells(iRow, 12).Value = "No" 
    End If 
    If audienceListbox.Selected(10) = True Then 
    .Cells(iRow, 13).Value = "Yes" 
    Else: .Cells(iRow, 13).Value = "No" 
    End If 
    If audienceListbox.Selected(11) = True Then 
    .Cells(iRow, 14).Value = "Yes" 
    Else: .Cells(iRow, 14).Value = "No" 
    End If 
    If audienceListbox.Selected(12) = True Then 
    .Cells(iRow, 15).Value = "Yes" 
    Else: .Cells(iRow, 15).Value = "No" 
    End If 

Gibt es einen besseren Weg, diese Schleife zu schreiben? Gerade jetzt bekomme ich einen Fehler auf der 12. ausgewählten Eigenschaft, die besagt, dass es nicht gefunden werden kann, obwohl ich 12 Optionen auf meiner Liste habe (Januar-Dezember).

Entschuldigung, ich habe gestern angefangen, VBA zu benutzen, also bin ich immer noch dabei, die Grundlagen herauszufinden.

+0

Ich denke, die 'Selected' Eigenschaft bei 0 beginnt, so müssen Sie 0-11 statt 1-12 – arcadeprecinct

+0

Das ist es, wir danken Ihnen gelöst verwenden! – adrenom

Antwort

0

Hier ist eine Option für eine Neuschreibung.

Wie gruppiert man Spalten zusammen, sieht es so aus, als würde man nach Quartalen (Kalender) arbeiten?

Wenn dies der Fall ist, könnten Sie stattdessen nach Quartalen auswählen. Wenn Sie eine benutzerdefinierte Gruppierung wünschen, fügen Sie die Gruppierungen zu einem zweidimensionalen Array hinzu und durchlaufen Sie sie.

Public Sub Tester() 
    Dim MonthNumber As Byte 
    Dim ColumnNumber As Integer: ColumnNumber = 4 

    For MonthNumber = 0 To 11 
     If audienceListbox.Selected(MonthNumber) Then 
      Cells(iRow, ColumnNumber).Value = "Yes" 
     Else 
      Cells(iRow, ColumnNumber).Value = "No" 
     End If 
     'Increase the column Index for each time through the loop 
     ColumnNumber = ColumnNumber + 1 
    Next 
End Sub 
+0

Hey, das klappt perfekt! Vielen Dank. Auf die Idee der Gruppierung, ja ich mache es durch Viertel (Q1-Q4). Also was meinst du mit Array und Gruppierungen? Ich habe wenig bis keine Erfahrung mit VBA, also versuche ich so viel wie möglich zu lernen. Ich versuche es so zu machen, dass der Text, der in jeder Spalte gleich ist, zusammengefügt wird, so dass es den gleichen Text über die Monate oder Quartale gibt. Ist das was du meinst? So sieht meine Tabelle und mein Kalender aus: http://imgur.com/a/a6Ckm – adrenom

Verwandte Themen