Makierung kopieren; Fehler auffangen

  • Excel

Es gibt 35 Antworten in diesem Thema. Der letzte Beitrag () ist von Manü.

    Makierung kopieren; Fehler auffangen

    Hallo zusammen,



    ich habe eine Tabelle von der ich eine makierte Spalte (mit x in die zweite Zeile) in eine andere kopieren möchte. Das klappt soweit ganz gut.

    Nun habe ich das Problem, dass manchmal der Benutzer dieses Programmes vielleicht kein x eingibt oder in zwei Spalten eines.

    Meine Idee war sowas in die Richtung

    Visual Basic-Quellcode

    1. 'ElseIf zelle = "" Then
    2. 'MsgBox "Bitte geben Sie ein x ein"


    Nur, dass das dann eben die komplette Range (B2:Z2) durchsucht und da natürlich freie Zellen findet.



    Hat jemand eine Idee? Ich wäre für jede Hilfe sehr dankbar :)
    Ahoi,

    wenn er die gesamte Range durchsucht, dann setze doch ein boolschen Wert, der auf 1 gesetzt wird, wenn ein x vorhanden ist.
    Sobald das x dann gefunden wurde, brichst du die Schleife ab und fragst ab ob der Wert 1 ist.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Super das hilft mir schonmal.

    Jetzt habe ich allerdings das Problem, dass falls kein x eingegeben wird mir 20 mal die Massagebox aufploppt. Ich habe hier mal den Code eingefügt. Dort steht auch noch das weitere Problem, dass es nicht erst ab Zeile drei einfügt. Ist wsl total banal aber ich komme gerade nicht drauf.

    Visual Basic-Quellcode

    1. Sub in_x_kopieren()
    2. Dim zelle As Range, zeile As Long
    3. For Each zelle In Range("C2:Z2")
    4. If zelle = "x" Then
    5. Problem = True
    6. zeile = zelle.Column
    7. 'Hier noch das Problem, dass nicht erst ab Zeile 3 eingefügt wird
    8. Range("A3:A400").Copy Destination:=Sheets("Tabelle2").Cells(3, zeile).End(xlUp)
    9. 'Problem abfangen wenn kein x
    10. ElseIf Problem = False Then
    11. MsgBox "Bitte geben Sie ein x ein"
    12. End If
    13. Next
    14. Range("2:2").ClearContents
    15. End Sub




    Liebe Grüße und vielen Dank :)
    Ist doch klar, dass die Msg-Box ständig kommt wenn du das alles mit in der schleife hast.
    die Schleife ist erstmal nur dafür Zuständig zu schauen ob und wo ein x steht.
    Die Prüfung Problem true / false ist kommt nach der Schleife, genauso wie die restliche Verarbeitung.
    Hatte ich aber geschrieben.

    Deine Struktur ist auch schon völlig konfus.
    Es ist ziemlich sinnfrei innerhalb einer If einen Wert zu setzten der im zugehörigen ElseIf - Zweig abgefragt wird.
    Ich verstehe auch gerade den gesamten sinn nicht dahinter.
    Wenn irgendeine Zelle in Zeile 2 von C - Z ein x Eingetragen hat
    dann kopiere die Zellen A3 bis A400 ind Tabelle 2 ...
    Entweder ich steh gerade ganz auf dem Schlauch oder ich versteh dein Problem nicht.

    Zumal wenn du sagst der User soll ein x eingeben, ist doch völlig egal wo ein x steht er soll doch eh alles kopieren
    ?(
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Es soll nur die Zeile kopiert werden, die dieses x enthält. Das funktioniert so auch.

    Ja das mit der Schleife habe ich übersehen...

    Hast du eine Idee, wie man es abfangen kann, falls der Bediener zwei x eingegeben hat? Also die Überprüfung.

    Manü schrieb:

    Sobald das x dann gefunden wurde, brichst du die Schleife ab...

    So wird aber nur das 1. x geholt ... Du könntest nun einen weiteren boolschen wert nehmen
    in der Schleife abfragen ist problem == 1 und enthält die zelle ein x dann setze die neue 1
    oder du nimmst eine int-variable und setzt die +1 somit weißt du sogar wieviele x überflüssig vergeben wurden
    dabei darfst du dann natürlich die schleife nicht abbrechen.
    nach der Schleife wertest du die beiden Variablen aus und gibts eine dementsprechende Meldung
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Ich muss dir sagen, VBA ist bei mir schon eine ganze weile her.
    Und Zeit ist bei mir gerade etwas mangelware ;)

    Daher würde ich sagen versuch es umzusetzen und wir schauen dann mal deinen Code an.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Momentan meckert der Debugger mal wegen Next (angeblich ohne For) oder mal, dass ein End if fehlen würde.

    Findet jemand den Fehler bzw. weiß auch ob das so überhaupt funktioniert wie ich das will?

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub x_kopieren()
    3. Dim zelle As Range, zeile As Long
    4. Dim Fehler As Boolean
    5. Dim Problem As Boolean
    6. For Each zelle In Range("C2:Z2")
    7. If zelle = "x" Then
    8. Fehler = True
    9. zeile = zelle.Column
    10. Columns(zeile).Copy Destination:=Sheets("Kopieren").Cells(3, 1).End(xlUp)
    11. If zelle = "x" And Fehler = True Then
    12. Problem = True
    13. ElseIf Fehler = False Then
    14. Fehler = False
    15. End If
    16. Next
    17. 'Problem abfangen wenn kein x
    18. If Fehler = False Then
    19. MsgBox "Bitte geben Sie ein x ein"
    20. End If
    21. 'Problem abfangen wenn mehr als 1 x
    22. If Problem = True Then
    23. MsgBox "Überprüfen Sie Ihre x-Eingabe"
    24. End If
    25. Range("A2:Z2").ClearContents
    26. End Sub
    Für dein IF in Zeile 7 fehlt ein EndIf.

    Die Verarbeitung bei dieser Abfrage ist blödsinn. Fehler wird false, wenn fehler False ist.
    Demnach wird mein Hut erst Grün wenn mein Hut Grün ist.

    Visual Basic-Quellcode

    1. ElseIf Fehler = False Then
    2. Fehler = False

    Deklariere Fehler bereits mit False, dann sparst du dir das.

    Warum ist

    Visual Basic-Quellcode

    1. zeile = zelle.Column
    ist es eine Row oder eine Column ?

    Es wird immer kopiert sobald mindestens ein x enthalten ist. Bei mehreren x
    wird jede Column mit einem x kopiert. Der Kopiervorgang muss wahrscheinlich eher in

    Visual Basic-Quellcode

    1. If zelle = "x" And Fehler = True Then

    Ich würde den Kopiervorgang aber ganz aus der Schleife rauslassen, wenn eh nur eine x-Column kopiert werden soll.
    Das kannst du nach der Schleife machen, wenn alles i.O. ist. Die Schleife, ist also nur dazu da, um herauszufinden, ob es überhaupt
    ein x gibt und ob fälschlicherweise mehrere x da sind.

    Wenn du die Variablen Fehler und Problem besser bezeichnen würdest, würdest du vielleicht auch schneller durch
    deinen eigenen Code steigen. Und andere sich auch.
    Verwirrend ist, warum ist Fehler = True wenn das x gefunden wird ? Ist es nicht eigentlich richtig, wenn ein x gefunden wird ?
    Falsch ist es doch erst, wenn ein 2. x gefunden wird.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    Hey, Danke schonmal für die Hilfe.

    Das mit der Formatierung ist wohl beim kopieren verrutscht. Bezeichnungen habe ich jetzt mal geändert. Das Problem liegt jetzt bei dem zweiten Boolean. Ich sag ja ich bin eigentlich VBA Anfänger...Achso und ja es soll die Spalte kopiert werden. Vielen Dank nochmal für eure Hilfe.

    Visual Basic-Quellcode

    1. Sub x_kopieren()
    2. Dim zelle As Range, zeile As Long
    3. Dim Istx As Boolean
    4. Dim Zweix As Boolean
    5. For Each zelle In Range("C2:Z2")
    6. If zelle = "x" Then
    7. Istx = True
    8. End If
    9. If zelle = "x" And Istx = True Then
    10. Zweix = True
    11. End If
    12. Next
    13. If Istx = False Then
    14. MsgBox "Bitte geben Sie ein x ein"
    15. End If
    16. If Zweix = True Then
    17. MsgBox "Überprüfen Sie Ihre x-Eingabe"
    18. End If
    19. If Zweix = False Then
    20. zeile = zelle.Column
    21. Columns(zeile).Copy Destination:=Sheets("Kopieren").Cells(3, 1).End(xlUp)
    22. End If
    23. Range("A2:Z2").ClearContents
    24. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jay15“ ()

    Jay15 schrieb:

    If Zweix = False Then
    zeile = zelle.Column
    Columns(zeile).Copy Destination:=Sheets("Kopieren").Cells(3, 1).End(xlUp)
    End If

    hier ist noch ein kleiner haken ... wenn nun kein x angegeben ist, wird trotzdem versucht die column zu kompieren.
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de