Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Copy funktioniert nur einmal


Betrifft: Copy funktioniert nur einmal von: Toblerowner
Geschrieben am: 03.10.2019 09:47:13

Guten Tag

Ich habe keine Grundbasis was VBA anbelangt, habe mir aber angefangen etwas zusammenzubasteln. Mein Code ist deswegen auch nicht sehr elegant...

Man soll sich über die Userform2 mit Benutzername und Passwort einloggen. Ist der Benutzer in der Mappe "Account" in der Reihe 3 vorhanden und stimmt mit dem Passwort aus Reihe 2 überein, sollen die darunterliegenden Zellen kopiert und in der Mappe "Quelle" eingefügt werden. Das funktioniert auch, aber nur einmal! Anschliessend muss ich die Arbeitsmappe erneut öffnen, da er ansonsten den Kopiervorgang nicht wiederholt. Wie man sieht habe ich (erfolglos) versucht mein Problem mit leeren der Variablen und des Zwischenspeichers zu lösen.

Private Sub CommandButton1_Click()

Sheets("Account").Cells(1, 2).Value = LoginBenutzername.Text
Sheets("Account").Cells(1, 3).Value = LoginPasswort.Text

Benutzer1 = Sheets("Account").Range("B1")
If Benutzer1 = 0 Then
    MsgBox "Bitte Benutzernamen eingeben"
    Exit Sub
    End If

On Error Resume Next
Benutzer2 = Sheets("Account").Range("A3:Z3").Find(What:=Benutzer1, LookIn:=xlValues).Column
'MsgBox "Benutzer bei:" & Benutzer2
If Benutzer2 > 0 Then
    Resume
Else
    MsgBox "Benutzername und/oder Passwort falsch"
    Exit Sub
End If

Passwort1 = Sheets("Account").Range("C1")
If Passwort1 = 0 Then
    MsgBox "Bitte Passwort eingeben"
    Exit Sub
End If

On Error Resume Next
Passwort2 = Sheets("Account").Range("A4:Z4").Find(What:=Passwort1, LookIn:=xlValues).Column
'MsgBox "Passwort bei:" & Passwort2
If Passwort2 > 0 Then
    Resume
Else
    MsgBox "Benutzername und/oder Passwort falsch"
    Exit Sub
End If


If Benutzer2 = Passwort2 Then
    
    GoTo Login

Else
    MsgBox "Benutzername und/oder Passwort falsch"
    Exit Sub
End If

Login:
    'MsgBox "LOGIN!!!"
    'Sheets("Quelle").Range("A1:A100").Clear
    MsgBox Benutzer2
    Sheets("Account").Range(Cells(5, Benutzer2), Cells(105, Benutzer2)).Copy Sheets("Quelle").  _
_
Range("A1:A100")
    Application.CutCopyMode = False
    Benutzer1 = Empty
    Benutzer2 = Empty
    Password1 = Empty
    Password2 = Empty
    UserForm2.Hide
    UserForm1.Show
End Sub

  

Betrifft: AW: Copy funktioniert nur einmal von: GerdL
Geschrieben am: 03.10.2019 11:37:39

Moin,

du kopierst 101 Zellen in einen Bereich mit 100 Zellen.
Sheets("Account").Range(Sheets("Account").Cells(5, Benutzer2), Sheets("Account").Cells(105, Benutzer2)).Copy Sheets("Quelle"). _
Range("A1:A101")

Versuche den Code ohne Fehlerunterdrückung zu schreiben.
Dim X As Range
Set X = Sheets("Account").Range("A4:Z4").Find(What:=Passwort1, LookIn:=xlValues)
If Not X Is Nothing Then Password2= X.Column

Gruß Gerd


  

Betrifft: AW: Copy funktioniert nur einmal von: ChrisL
Geschrieben am: 03.10.2019 11:40:57

Hi

In Ergänzung zu Gerd, hier ein alternativer Lösungsvorschlag.

Private Sub CommandButton1_Click()
With Worksheets("Account")

    If TextBox1 = "" Then
        MsgBox "kein Benutzer eingegeben"
        Exit Sub
    ElseIf TextBox2 = "" Then
        MsgBox "kein PW eingegeben"
        Exit Sub
    ElseIf WorksheetFunction.CountIf(.Rows(3), TextBox1) = 0 Then
        MsgBox "Benutzer nicht registriert"
        Exit Sub
    ElseIf .Cells(4, Application.Match(TextBox1, .Rows(3), 0)) <> TextBox2 Then
        MsgBox "Passwort falsch"
        Exit Sub
    End If
    
    MsgBox "alles OK, es darf kopiert werden"
    
End With
End Sub
cu
Chris


  

Betrifft: AW: Copy funktioniert nur einmal von: Toblerowner
Geschrieben am: 03.10.2019 17:09:39

Herzlichen Dank für die Hilfe!
Nun habe ich noch das Problem, dass es nur funktioniert, solange ich in der Arbeitsmappe "Account" bin. Sobald ich in einer anderen Arbeitsmappe bin, bekomme ich den Laufzeitfehler 1004, verstehe aber nicht warum?

Login:
    Sheets("Quelle").Range("A1:A100").Value = Sheets("Account").Range(Cells(5, Benutzer2),  _
Cells(104, Benutzer2)).Value
    UserForm2.Hide
    UserForm1.Show
    Exit Sub



  

Betrifft: AW: Copy funktioniert nur einmal von: ChrisL
Geschrieben am: 03.10.2019 17:18:13

Hi

Bitte, aber leider hast du die Antworten scheinbar nicht angenommen.

Dein Fehler sollte sich anhand des Hinweises von Gerd auflösen. Und wenn du meinen Ansatz nehmen würdest, bräuchte es kein Goto Login mehr.
https://de.wikipedia.org/wiki/Spaghetticode

Und da ich sowieso schon rum meckere, gleich noch folgender Hinweis :)
Datei = Mappe
Reiter = Blatt resp. Tabellenblatt

cu
Chris


  

Betrifft: AW: Copy funktioniert nur einmal von: ChrisL
Geschrieben am: 03.10.2019 18:42:14

Hi

Vielleicht so...

Private Sub CommandButton1_Click()
Dim Benutzer2 As Integer

With Worksheets("Account")
 
     If TextBox1 = "" Then
         MsgBox "kein Benutzer eingegeben"
         Exit Sub
     ElseIf TextBox2 = "" Then
         MsgBox "kein PW eingegeben"
         Exit Sub
     ElseIf WorksheetFunction.CountIf(.Rows(3), TextBox1) = 0 Then
         MsgBox "Benutzer nicht registriert"
         Exit Sub
     ElseIf .Cells(4, Application.Match(TextBox1, .Rows(3), 0)) <> TextBox2 Then
         MsgBox "Passwort falsch"
         Exit Sub
     End If
     
     Benutzer2 = Application.Match(TextBox1, .Rows(3), 0)
     Sheets("Quelle").Range("A1:A100").Value = _
           .Range(.Cells(5, Benutzer2), .Cells(104, Benutzer2)).Value
     
End With
End Sub

"Entleeren" (x=empty) empfiehlt sich übrigens bei Objekt-Variablen (z.B. Set x = Range). Hier nicht nötig.

cu
Chris


  

Betrifft: AW: Copy funktioniert nur einmal von: Werner
Geschrieben am: 04.10.2019 17:09:39

Hallo,

das liegt an der "unsauberen" Referenzierung auf das Blatt "Account".

Um korrekt zu Referenzieren muss vor jedem Range-Objekt (Range, Cells...) immer auch das entsprechende Tabellenblatt mit angegeben werden. Sonst ist wie bei deinem Code nur bei Range auf das Blatt "Account" referenziert, bei den beiden Cells aber auf das aktuell aktive Blatt.

Also bei deinem Code:

Login:
Sheets("Quelle").Range("A1:A100").Value = _
Sheets("Account").Range(Sheets("Account").Cells(5, Benutzer2), _
Sheets("Account").Cells(104, Benutzer2)).Value
UserForm2.Hide
UserForm1.Show
Exit Sub
Oder du benutzt, wie von ChrisL vorgeschlagen, eine With - End With. Dabei wird auf das im With angegebene Tabellenblatt referenziert, indem vor den Range-Objekten (Range, Cells...) ein Punkt gesetzt wird.

Gruß Werner


Beiträge aus dem Excel-Forum zum Thema "Copy funktioniert nur einmal"