Ich bin Ole und noch relativ neu mit Excel und VBA, aber muss momentan ein kleines Projekt fertigstellen und bin ein klein wenig verzweifelt. Hoffentlich könnt Ihr mir helfen :)
Ich bin gerade dabei ein Formular zu erstellen, in welchem man Daten für einen Test anlegt. Bestimmte Daten sollen per Knopfdruck zum einen in das Tabellenblatt "Testprotokoll" & zum anderen und das ist mein Problem, sollen die gesamten Daten, je nachdem welcher Wert in der Zelle Thema bzw. C7 steht, in das Tabellenblatt mit dem gleichen Namen kopiert werden.
[img] Dateiupload bitte im Forum! So geht es: Klick mich! ]
Mein Code sieht bisher so aus:
Code:
Sub Daten_zu_Protokoll()
Dim Test_ID As String
Dim Testbezeichnung As String
Dim Thema As String
Dim Release As String
Dim Sprint As String
Dim Vorbedingung As String
Dim Testschritte As String
Dim Ergebnis As String
Dim Nachbedingung As String
Worksheets("Flotte").Select
Worksheets("Flotte").Range("B8").Select
If Worksheets("Flotte").Range("B8").Offset(1, 0) <> "" Then
Worksheets("Flotte").Range("B8").End(xlDown).Select
End If
Ich weiß so zirka wie If-Statements funktionieren, aber ich weiß nicht wie ich die "doppelte Verschachtelung" hinkriege.. Ich meine, dass ja zum einen anhand des Werts in der Zelle Thema entschieden werden muss, in welches Tabellenblatt die Daten kopiert werden müssen & dann muss die If-Funktion mit, welche sagt, dass wenn die Zeile im Zieltabellenblatt schon beschrieben ist, eine Zeile weiter unten genutzt werden muss.
Ich hoffe Ihr versteht mein Problem und könnt mir irgendwie weiterhelfen! Anhand findet Ihr noch ein Bild von dem Formular.
wenn du dich ernsthaft mit VBA beschäftigen möchtest, solltest du nicht mit dem Makro-Editor arbeiten. Der erzeugt sehr viel Müll, zum Beispiel Select-Anweisungen, die zu weit über 95% überflüssig sind. Mehrere Arbeitsblätter mit gleichartigen Inhalten sollte man ebenfalls nicht verwenden.
Viele Grüße
Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
01.04.2020, 12:53 (Dieser Beitrag wurde zuletzt bearbeitet: 01.04.2020, 12:54 von Ole_Wald.
Bearbeitungsgrund: Falscher Name
)
Hallo Stefan,
Vielen Dank für deine Hilfe. Ich habe in der Zwischenzeit eine Lösung gefunden um anhand des Themas die Daten auf das jeweilige Tabellenblatt zu übertragen. Mein Problem ist jetzt nurnoch, dass ich das Programm dazu bringen muss die Daten untereinander zu schreiben, sollten die Zeilen schon belegt sein.
Ich schicke nochmal kurz den Code damit du siehst was ich geändert habe.
Code:
Sub Daten_zu_Protokoll()
Dim Test_ID As String
Dim Testbezeichnung As String
Dim Thema As String
Dim Release As String
Dim Sprint As String
Dim Vorbedingung As String
Dim Testschritte As String
Dim Ergebnis As String
Dim Nachbedingung As String
If Cells(7, 3).Value = "Flotte" Then
Worksheets("Flotte").Select
Worksheets("Flotte").Range("B8").Select
End If
If Cells(7, 3).Value = "Mitarbeiter" Then
Worksheets("Mitarbeiter").Select
Worksheets("Mitarbeiter").Range("B8").Select
End If
If Cells(7, 3).Value = "Accountverwaltung" Then
Worksheets("Accountverwaltung").Select
Worksheets("Accountverwaltung").Range("B8").Select
End If
If Cells(7, 3).Value = "Loginprozess" Then
Worksheets("Loginprozess").Select
Worksheets("Loginprozess").Range("B8").Select
End If
If Cells(7, 3).Value = "Registrierungsprozess" Then
Worksheets("Registrierungsprozess").Select
Worksheets("Registrierungsprozess").Range("B8").Select
End If
If Cells(7, 3).Value = "Unternehmensverwaltung" Then
Worksheets("Unternehmensverwaltung").Select
Worksheets("Unternehmensverwaltung").Range("B8").Select
End If
If Cells(7, 3).Value = "Kontrollen" Then
Worksheets("Kontrollen").Select
Worksheets("Kontrollen").Range("B8").Select
End If
If Cells(7, 3).Value = "Berichte" Then
Worksheets("Berichte").Select
Worksheets("Berichte").Range("B8").Select
End If
If Cells(7, 3).Value = "Notfall" Then
Worksheets("Notfall").Select
Worksheets("Notfall").Range("B8").Select
End If
If Cells(7, 3).Value = "Rechnung" Then
Worksheets("Rechnung").Select
Worksheets("Rechnung").Range("B8").Select
End If
If Cells(7, 3).Value = "Vorfinanzierung" Then
Worksheets("Vorfinanzierung").Select
Worksheets("Vorfinanzierung").Range("B8").Select
End If
If Cells(7, 3).Value = "Timocom" Then
Worksheets("Timocom").Select
Worksheets("Timocom").Range("B8").Select
End If
If Cells(7, 3).Value = "Tanken & Waschen" Then
Worksheets("Tanken & Waschen").Select
Worksheets("Tanken & Waschen").Range("B8").Select
End If
If Cells(7, 3).Value = "SSO Wedolo Familie" Then
Worksheets("SSO Wedolo Familie").Select
Worksheets("SSO Wedolo Familie").Range("B8").Select
End If
If Cells(7, 3).Value = "Magazin & Logxikon" Then
Worksheets("Magazin & Logxikon").Select
Worksheets("Magazin & Logxikon").Range("B8").Select
End If
If Cells(7, 3).Value = "Admin Funktionen" Then
Worksheets("Admin Funktionen").Select
Worksheets("Admin Funktionen").Range("B8").Select
End If
Ich gebe zu die If Lösung ist nicht sehr elegant, aber sie tut was sie soll. Hast du oder irgendjemand anderes eine Idee wie ich die Anweisung mit dem untereinander schreiben noch einbinden kann?
01.04.2020, 13:09 (Dieser Beitrag wurde zuletzt bearbeitet: 01.04.2020, 13:12 von Klaus-Dieter.)
Hallo,
hier eine optimierte Lösung für dein If-Problem. Um die (überflüssigen) Selectanweisungen habe ich mich jetzt nicht gekümmert, da du ja auch an dieser Stelle beratungsresistent zu sein scheinst.
Code:
Select Case Cells(7, 3).Value
Case Is = "Flotte"
Worksheets("Flotte").Select
Worksheets("Flotte").Range("B8").Select
Case Is = "Mitarbeiter"
Worksheets("Mitarbeiter").Select
Worksheets("Mitarbeiter").Range("B8").Select
Case Is = "Accountverwaltung"
Worksheets("Accountverwaltung").Select
Worksheets("Accountverwaltung").Range("B8").Select
Case Is = "Loginprozess"
Worksheets("Loginprozess").Select
Worksheets("Loginprozess").Range("B8").Select
Case Is = "Registrierungsprozess"
Worksheets("Registrierungsprozess").Select
Worksheets("Registrierungsprozess").Range("B8").Select
Case Is = "Unternehmensverwaltung"
Worksheets("Unternehmensverwaltung").Select
Worksheets("Unternehmensverwaltung").Range("B8").Select
Case Is = "Kontrollen"
Worksheets("Kontrollen").Select
Worksheets("Kontrollen").Range("B8").Select
Case Is = "Berichte"
Worksheets("Berichte").Select
Worksheets("Berichte").Range("B8").Select
Case Is = "Notfall"
Worksheets("Notfall").Select
Worksheets("Notfall").Range("B8").Select
Case Is = "Rechnung"
Worksheets("Rechnung").Select
Worksheets("Rechnung").Range("B8").Select
Case Is = "Vorfinanzierung"
Worksheets("Vorfinanzierung").Select
Worksheets("Vorfinanzierung").Range("B8").Select
Case Is = "Timocom"
Worksheets("Timocom").Select
Worksheets("Timocom").Range("B8").Select
Case Is = "Tanken & Waschen"
Worksheets("Tanken & Waschen").Select
Worksheets("Tanken & Waschen").Range("B8").Select
Case Is = "SSO Wedolo Familie"
Worksheets("SSO Wedolo Familie").Select
Worksheets("SSO Wedolo Familie").Range("B8").Select
Case Is = "Magazin & Logxikon"
Worksheets("Magazin & Logxikon").Select
Worksheets("Magazin & Logxikon").Range("B8").Select
Case Is = "Admin Funktionen"
Worksheets("Admin Funktionen").Select
Worksheets("Admin Funktionen").Range("B8").Select
End Select
Allerdings gehe ich davon aus, dass man das noch weiter optimieren könnte, dazu müsste man aber deine Datei kennen. Ich hatte jetzt keine Lust zu suchen, wie die Blattnamen in die Zelle C7 kommen. Da könnte man möglicherweise direkt drauf reagieren.
Viele Grüße
Klaus-Dieter Der Erfolg hat viele Väter, der Misserfolg ist ein Waisenkind Richard Cobden
Sub Daten_zu_Protokoll()
Dim Test_ID As String
Dim Testbezeichnung As String
Dim Thema As String
Dim Release As String
Dim Sprint As String
Dim Vorbedingung As String
Dim Testschritte As String
Dim Ergebnis As String
Dim Nachbedingung As String
Dim lngC As Long