![]() |
Betrifft: Array mit If-Anweisung
von: Moritz
Geschrieben am: 29.10.2014 10:23:53
Hallo alle zusammen,
ich beschäftige mich seit ein paar Tagen mit VBA. Ich habe momentan eine Arbeitsmappe die ich dafür gebrauche um eine Liste auszulesen und bestimmte daten dann immer wieder neu erstellten Worksheets zuzuweisen.
als erstes habe ich es ganz statisch nur mit einem worksheet versucht und es hat auch alles geklappt. Nun habe ich das Problem, dass ich über einen Butten ein die neuen Worksheets erstelle und können immer wieder neue kommen und gelöscht werden.
Ich speichere in einem Globalen Array die Namen der Worksheets ab und will dann dieses Array mit den Inhalten einer Spalte vergleichen. Wenn diese übereinstimmen werden die Daten der Zeile in das Worksheet übernommen.
Im ersten Teil des Programms wurde es fest zugewiesen. Im zweiten habe ich es mit einem Array versucht aber habe es leider nicht geschafft. Er beschwert sich immer bei "With ActiveWorkbook.Worksheets(Personal(w))".
Sub test() Dim Name As Variant Dim x As Integer Dim z As String Dim w As Integer While x < 20 x = x + 1 'Spalte die verglichen werden soll Name = Cells(3, 4).Offset(x, 0) Set PA = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(x, -3) Set Kunde = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(x, -2) Set Menge = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(x, -1) Set Start = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(x, 1) Set Planung = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(x, 2) If Name = "Fr. XYZ" Then With ActiveWorkbook.Sheets(Name) .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row + 1, 2) = PA .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 3) = Kunde .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 4) = Menge .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 5) = Start .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 6) = Planung End With End If 'statisches Beispiel das geht For w = 1 To 100 'Array Personal wurde global definiert und mit einem anderen Makro gefüllt If Name = Personal(w) Then With ActiveWorkbook.Worksheets(Personal(w)) .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row + 1, 2) = PA .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 3) = Kunde .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 4) = Menge .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 5) = Start .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 6) = Planung End With End If Next 'Hier soll das Array durchgegangen werden und die Inhalte aus der Tabelle in die Worksheets die _ _ übereinstimmen Übertragen werden Wend End Sub
![]() ![]() |
Betrifft: AW: Array mit If-Anweisung
von: Jack_d
Geschrieben am: 29.10.2014 12:05:26
Hallo Moritz
ist ja auch sinnvoll das er bei der Zeile
"With ActiveWorkbook.Worksheets(Personal(w))"
![]() ![]() |
Betrifft: AW: Array mit If-Anweisung
von: Moritz
Geschrieben am: 29.10.2014 16:33:15
War ein guter Ansatzpunkt des ganze zu ändern und jetzt läuft es :) Die Lösung des Problems war eine IF-Anweisung, die leere Zellen in der Tabelle überspringt. Der Code schaut derzeit folgendermaßen aus:
Private Sub test() Dim WS_Count As Integer Dim q As Integer Dim WSSeite As Integer Dim WSSpalte As Integer Dim Name As String Dim Personal(100) As String Dim Mitarbeiter As String WS_Count = ActiveWorkbook.Worksheets.Count 'Array mit den Mitarbeiternamen anlegen For q = 1 To WS_Count Personal(q) = Worksheets(q).Range("I1") Next q 'Mit For-Schleife alle Mitarbeiter durchgehen For WSSeite = 1 To WS_Count Mitarbeiter = Personal(WSSeite) 'Spalten mit For-Schleife durchlaufen und Zeilen setzen For WSSpalte = 1 To 30 Name = Cells(3, 4).Offset(WSSpalte, 0) Set PA = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(WSSpalte, -3) Set Kunde = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(WSSpalte, -2) Set Menge = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(WSSpalte, -1) Set Start = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(WSSpalte, 1) Set Planung = Worksheets("Datenaufbereitung").Cells(3, 4).Offset(WSSpalte, 2) If Name <> "" Then 'Vergleich der Spalte mit den Mitarbeitern aus Array If Name = Mitarbeiter Then With ActiveWorkbook.Sheets(Mitarbeiter) .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row + 1, 2) = PA .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 3) = Kunde .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 4) = Menge .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 5) = Start .Cells(.Cells(.Rows.Count, 2).End(xlUp).Row, 6) = Planung End With End If End If Next WSSpalte Next WSSeite End Sub
![]() ![]() |
Betrifft: Super.
von: Jack_d
Geschrieben am: 30.10.2014 14:48:12
Freut mich wenn man geholfen werden kann.
Und vielen Dank für die Rückmeldung!
Grüße
![]() |