Collapse column

Autor Thema: Excel VBA debuggen  (Gelesen 577 mal)

Offline Reza

  • Newbie
  • *
  • Beiträge: 5
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2016
Excel VBA debuggen
« am: Februar 13, 2018, 21:16:56 Nachmittag »
Moin Excel-Experten,

leider hab ich ein kleines....ja nenn ich es mal so.... Problem.
Ich versuche gerade für die Arbeit eine Excel-Datei zu erstellen, mit der Fehler im Betrieb gemeldet werden können.
Im Prinzip, soll die Datei geöffnet werden und der Button für die Eingabe gedrückt werden. Dann soll sich die Maske mit
den Eingabefeldern öffnen. Die Eingaben sollen erfolgen und die soll dann per Knopfdruck gespeichert werden.

Die 2. Funktion die erfüllt sein soll, ist die Selektion und Filterung der eingegebenen Daten. Das heißt auf der Startseite soll ein
2. Button mit Tabelle sein, der zu den Eingaben führt und auch wieder mit einer Maske die vorher eingegebenen Daten selektiert und
anzeigt.
Ich habe dazu schon grob einen Datei erstellt und mir auch schon das ein oder andere aus verschiedenen Internetforen zusammen gesucht.
Leider reichen meine doch relativ eingeschränkten Kenntnisse nicht weiter aus, um die anstehenden Probleme zu lösen. Vielleicht
kann es einer oder mehrere von euch.


Zur Beschreibung: Die Eingabe Maske hat 10 Eingabefelder und 4 Comandbuttons und ein Listenfeld in dem die Daten angezeigt werden.

Option Explicit
Option Compare Text

Private Const iCONST_ANZAHL_EINGABEFELDER As Integer = 10


Private Const lCONST_STARTZEILENNUMMER_DER_TABELLE As Long = 2

Private Sub CommandButton1_Click()
      Call EINTRAG_ANLEGEN
End Sub
Private Sub CommandButton2_Click()
      Call EINTRAG_LOESCHEN
End Sub


Private Sub CommandButton3_Click()
      Call EINTRAG_SPEICHERN
End Sub


Private Sub CommandButton4_Click()
      Unload Me
End Sub


Private Sub ListBox1_Click()
      Call EINTRAG_LADEN_UND_ANZEIGEN
End Sub


Private Sub UserForm_Activate()
      If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 1
   
End Sub


Private Sub UserForm_Initialize()
      Call LISTE_LADEN_UND_INITIALISIEREN
End Sub


' ************************************************************************************************
' VERARBEITUNGSROUTINEN
' ************************************************************************************************

'
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
    Dim lZeile As Long
    Dim lZeileMaximum As Long
    Dim i As Integer
   
     
      For i = 1 To iCONST_ANZAHL_EINGABEFELDER
          Me.Controls("TextBox" & i) = ""
      Next i

      ListBox1.Clear
      ListBox1.ColumnCount = 10
     
     
      ListBox1.ColumnWidths = "0;;;;;;;;;"
     
     
     
      lZeileMaximum = Tabelle1.UsedRange.Rows.Count
     
      For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
         
         
          If IST_ZEILE_LEER(lZeile) = False Then
             
         
              ListBox1.AddItem lZeile
             
             
              ListBox1.List(ListBox1.ListCount - 1, 1) = CStr(Tabelle1.Cells(lZeile, 1).Text)
              ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle1.Cells(lZeile, 2).Text)
              ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle1.Cells(lZeile, 3).Text)
              ListBox1.List(ListBox1.ListCount - 1, 4) = CStr(Tabelle1.Cells(lZeile, 4).Text)
              ListBox1.List(ListBox1.ListCount - 1, 5) = CStr(Tabelle1.Cells(lZeile, 5).Text)
              ListBox1.List(ListBox1.ListCount - 1, 6) = CStr(Tabelle1.Cells(lZeile, 6).Text)
              ListBox1.List(ListBox1.ListCount - 1, 7) = CStr(Tabelle1.Cells(lZeile, 7).Text)
              ListBox1.List(ListBox1.ListCount - 1, 8) = CStr(Tabelle1.Cells(lZeile, 8).Text)
              ListBox1.List(ListBox1.ListCount - 1, 9) = CStr(Tabelle1.Cells(lZeile, 9).Text)
              ListBox1.List(ListBox1.ListCount - 1, 10) = CStr(Tabelle1.Cells(lZeile, 10).Text)
         
          End If
         
      Next lZeile
     
End Sub

Private Sub EINTRAG_LADEN_UND_ANZEIGEN()
    Dim lZeile As Long
    Dim i As Integer
     
     
      For i = 1 To iCONST_ANZAHL_EINGABEFELDER
          Me.Controls("TextBox" & i) = ""
      Next i
     
      If ListBox1.ListIndex >= 0 Then
             
          lZeile = ListBox1.List(ListBox1.ListIndex, 0)
         
          For i = 1 To iCONST_ANZAHL_EINGABEFELDER
              Me.Controls("TextBox" & i) = CStr(Tabelle1.Cells(lZeile, i).Text)
          Next i
             
      End If
     
End Sub

Private Sub EINTRAG_SPEICHERN()
   Dim lZeile As Long
   Dim i As Integer
   
      If ListBox1.ListIndex = -1 Then Exit Sub
     
      lZeile = ListBox1.List(ListBox1.ListIndex, 0)
     
      For i = 1 To iCONST_ANZAHL_EINGABEFELDER
          Tabelle1.Cells(lZeile, i) = Me.Controls("TextBox" & i)
      Next i
   
     
     
      ListBox1.List(ListBox1.ListIndex, 0) = TextBox1
      ListBox1.List(ListBox1.ListIndex, 1) = TextBox2
      ListBox1.List(ListBox1.ListIndex, 2) = TextBox3
      ListBox1.List(ListBox1.ListIndex, 3) = TextBox4
      ListBox1.List(ListBox1.ListIndex, 4) = TextBox5
      ListBox1.List(ListBox1.ListIndex, 5) = TextBox6
      ListBox1.List(ListBox1.ListIndex, 6) = TextBox7
      ListBox1.List(ListBox1.ListIndex, 7) = TextBox8
      ListBox1.List(ListBox1.ListIndex, 8) = TextBox9
      ListBox1.List(ListBox1.ListIndex, 9) = TextBox10
     
   
     
End Sub

Private Sub EINTRAG_LOESCHEN()
   Dim lZeile As Long
   
     
      If ListBox1.ListIndex = -1 Then Exit Sub
   
     
      If MsgBox("Sie möchten den markierten Datensatz wirklich löschen?", _
                vbQuestion + vbYesNo, "Sicherheitsabfrage!") = vbYes Then
   
         
          lZeile = ListBox1.List(ListBox1.ListIndex, 0)
         
         
          Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
         
         
          ListBox1.RemoveItem ListBox1.ListIndex
     
      End If
     
End Sub

Private Sub EINTRAG_ANLEGEN()
   Dim lZeile As Long
     
      lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE
     
      Do While IST_ZEILE_LEER(lZeile) = False
          lZeile = lZeile + 1
      Loop
     
     
      Tabelle1.Cells(lZeile, 1) = CStr("")
     
     
      ListBox1.AddItem lZeile
      ListBox1.List(ListBox1.ListCount - 1, 1) = CStr("" & lZeile)
      ListBox1.List(ListBox1.ListCount - 1, 2) = CStr("" & lZeile)
      ListBox1.List(ListBox1.ListCount - 1, 3) = CStr("" & lZeile)
      ListBox1.List(ListBox1.ListCount - 1, 4) = CStr("" & lZeile)
      ListBox1.List(ListBox1.ListCount - 1, 5) = CStr("" & lZeile)
      ListBox1.List(ListBox1.ListCount - 1, 3) = ""
      ListBox1.List(ListBox1.ListCount - 1, 4) = ""
      ListBox1.List(ListBox1.ListCount - 1, 5) = ""
      ListBox1.List(ListBox1.ListCount - 1, 6) = ""
      ListBox1.List(ListBox1.ListCount - 1, 7) = ""
      ListBox1.List(ListBox1.ListCount - 1, 8) = ""
      ListBox1.List(ListBox1.ListCount - 1, 9) = ""
   
     
      ListBox1.ListIndex = ListBox1.ListCount - 1
     
      TextBox1.SetFocus
      TextBox1.SelStart = 0
      TextBox1.SelLength = Len(TextBox1)
     
End Sub


Private Function IST_ZEILE_LEER(ByVal lZeile As Long) As Boolean
    Dim i As Long
    Dim sTemp As String
   
     
      sTemp = ""
   
      For i = 1 To iCONST_ANZAHL_EINGABEFELDER
          sTemp = sTemp & Trim(CStr(Tabelle1.Cells(lZeile, i).Text))
      Next i
     
   
      If Trim(sTemp) = "" Then
         
          IST_ZEILE_LEER = True
      Else
       
          IST_ZEILE_LEER = False
      End If
     
End Function





Für die 2 Maske zur Filterung habe ich leider noch nichts, außer das es auch 10 Ausgabefenster sein müssen und diese auch in einem Listenfeld
angezeigt werden.

Dafür habe ich mal 2 Screenshots zum besseren Verständnis angehängt....
Das alles ist natürlich nicht in Stein gemeißelt, wenn ihr Verbesserungen oder strukturiertere Vorschläge habt, immer raus damit.
Gleiches gilt für die Optik.

LG und vielen Dank an alle Mitdenker/Helfer/Ideengeber/Weitergeber/Unterstützer und und und :)


P.S. hab den Code nochmal als Anhang mitgeschickt, weil ich gesehen habe, das er hier mit Smilys angezeigt wird.

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.