Thema Datum  Von Nutzer Rating
Antwort
Rot Fehler im Makro?
03.07.2019 14:37:52 Chris
NotSolved
03.07.2019 16:07:39 Gast1139
NotSolved
03.07.2019 16:12:00 Gast37060
NotSolved
04.07.2019 08:17:06 Chris
NotSolved
04.07.2019 09:15:02 Chris
NotSolved

Ansicht des Beitrags:
Von:
Chris
Datum:
03.07.2019 14:37:52
Views:
726
Rating: Antwort:
  Ja
Thema:
Fehler im Makro?

Hi Leute,

mein Makro stürzt ständig ab, bzw. lädt die UserForm nicht mehr, muss Excel dann komplett neu starten.

Könnt ihr mir evtl sagen woran das liegen könnte?

Habe schon verschiedene Parameter wieder herausgenommen, die ich geändert habe, leider jedoch keine BEsserung.

Das ganze lief schon einmal :-/ komme einfach nicht auf den Fehler.

Option Explicit
Option Compare Text

' ************************************************************************************************
' KONSTANTEN / PARAMETRISIERUNG
' ************************************************************************************************

'Wie viele TextBoxen sind auf der UserForm platziert?
Private Const iCONST_ANZAHL_EINGABEFELDER As Integer = 14

'In welcher Zeile starten die Eingaben?
Private Const lCONST_STARTZEILENNUMMER_DER_TABELLE As Long = 4




' ************************************************************************************************
' EREIGNISROUTINEN DER USERFORM
' ************************************************************************************************

'Neuer Eintrag Schaltfläche Ereignisroutine
Private Sub CommandButton1_Click()
    Call EINTRAG_ANLEGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Löschen Schaltfläche Ereignisroutine
Private Sub CommandButton2_Click()
    Call EINTRAG_LOESCHEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Speichern Schaltfläche Ereignisroutine
Private Sub CommandButton3_Click()
    Call EINTRAG_SPEICHERN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub

'Beenden Schaltfläche Ereignisroutine
Private Sub CommandButton4_Click()
    Unload Me
End Sub





Private Sub CommandButton5_Click()

Dim varBild As Variant
varBild = Application.GetOpenFilename("Bilddateien (*.JPG;*.bmp;*.cur;*.wmf;*.ico), *.JPG;*.bmp;*.cur;*.wmf;*.ico")
If Not varBild = False Then
  Image1.Picture = LoadPicture(varBild)
End If

End Sub

'Klick auf die ListBox Ereignisroutine
Private Sub ListBox1_Click()
    Call EINTRAG_LADEN_UND_ANZEIGEN 'Aufruf der entsprechenden Verarbeitungsroutine
End Sub


'Diese Ereignisroutine wird beim Anzeigen der UserForm ausgeführt
Private Sub UserForm_Activate()
    If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 '1. Eintrag selektieren
End Sub

'Startroutine, wird ausgeführt bevor die Eingabemaske angezeigt wird
Private Sub UserForm_Initialize()
        Call LISTE_LADEN_UND_INITIALISIEREN 'Aufruf der entsprechenden Verarbeitungsroutine
        
        
    'Anzeige von Monaten in Combobox
With ComboBox2
    
    .AddItem "Feuerlöscher"
    .AddItem "Flurförderfahrzeug"
    .AddItem "Leiter/Tritt"
    .AddItem "Brandschutztüre"
    .AddItem "Lastaufnahmemittel"
    .AddItem "Rolltor"
    .AddItem "Aufzug"
    .AddItem "Verbandskasten"
    .AddItem "Brandmeldeanlage"
    .AddItem "Rauch- & Wärmeabzugsanlage"
    .AddItem "Orstsfeste Betriebsmittel"
    .AddItem "Orstveränderliche Betriebsmittel"
    .AddItem "Feststellanlage"
    .AddItem "Heizung"
    .AddItem "Gefährdungsbeurteilung"
            
   End With
   
With ComboBox5
    
    .AddItem "Kg"
    .AddItem "Gramm"
    .AddItem "Liter"
    
    
   End With
   
 With ComboBox6
    
    .AddItem "Hauptverwaltung 1"
    .AddItem "Hauptverwaltung 2"
    .AddItem "Logistikzentrum"
    .AddItem "Integral Villa"
    .AddItem "Sonstige"
       
   End With
   
 With ComboBox7
    
    .AddItem "UG"
    .AddItem "EG"
    .AddItem "1. Etage"
    .AddItem "2. Etage"
    .AddItem "3. Etage"
    .AddItem "4. Etage"
    .AddItem "5. Etage"
       
   End With
   
End Sub



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

'Diese Routine wird aufgerufen um die Liste (ListBox1) zu leeren, einzustellen und neu zu füllen
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
  Dim lZeile As Long
  Dim lZeileMaximum As Long
  Dim i As Integer
  
    'Alle TextBoxen leer machen
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        Me.Controls("ComboBox" & i) = ""
    Next i

    ListBox1.Clear 'Liste leeren
    
    '4 Spalten einrichten
    'Spalte 1: Zeilennummer des Datensatzes
    'Spalte 2: Name (Spalte A)
    'Spalte 3: Telefon (Spalte B)
    'Spalte 4: E-Mail (Spalte C)
    ListBox1.ColumnCount = 4
    
    'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
    '"<Breite Spalte 1>;<Breite Spalte 2>;<Breite Spalte 3>;<Breite Spalte 4>"
    ListBox1.ColumnWidths = "0;30;;;;;;;;;;50;"
    'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
    
    'Um eine Schleife für alle Datensätze zu erhalten benötigen wir die letzte verwendete Zeile
    lZeileMaximum = Tabelle1.UsedRange.Rows.Count 'Benutzer Bereich auslesen
    
    For lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE To lZeileMaximum
        
        'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
        If IST_ZEILE_LEER(lZeile) = False Then
            
            'Spalte 1 der Liste mit der Zeilennummer füllen
            ListBox1.AddItem lZeile
            
            'Spalten 2 bis 4 der Liste füllen
            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)
        
        End If
        
    Next lZeile
    
End Sub

Private Sub EINTRAG_LADEN_UND_ANZEIGEN()
  Dim lZeile As Long
  Dim i As Integer
    
    'Eingabefelder resetten
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        Me.Controls("ComboBox" & i) = ""
    Next i
    
    'Nur wenn ein Eintrag selektiert/markiert ist
    If ListBox1.ListIndex >= 0 Then
           
        'Die Zeilennummer des Datensatzes steht in der ersten ausgeblendeten Spalte der Liste,
        'somit können wir direkt zugreifen.
        lZeile = ListBox1.List(ListBox1.ListIndex, 0)
        
        For i = 1 To iCONST_ANZAHL_EINGABEFELDER
            Me.Controls("ComboBox" & 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
 
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
   
    'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes
    lZeile = ListBox1.List(ListBox1.ListIndex, 0)
    
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        Tabelle1.Cells(lZeile, i) = Me.Controls("ComboBox" & i)
    Next i
    
    'Der Benutzer könnte die angezeigten Werte in der Liste geändert haben,
    'daher aktualisieren wir den ausgewählten Eintrag entsprechend.
    ListBox1.List(ListBox1.ListIndex, 1) = ComboBox1
    ListBox1.List(ListBox1.ListIndex, 2) = ComboBox2
    ListBox1.List(ListBox1.ListIndex, 3) = ComboBox3
    
End Sub

Private Sub EINTRAG_LOESCHEN()
 Dim lZeile As Long
  
    'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet
    If ListBox1.ListIndex = -1 Then Exit Sub
  
    'Beim Löschen fragen wir zuerst den Benutzer noch einmal sicherheitshalber:
    If MsgBox("Sie möchten den markierten Datensatz wirklich löschen?", _
              vbQuestion + vbYesNo, "Sicherheitsabfrage!") = vbYes Then
  
        'Nur wenn er mit <JA> antwortet, löschen wir auch!
  
        'Zum Löschen benötigen wir die Zeilennummer des ausgewählten Datensatzes
        lZeile = ListBox1.List(ListBox1.ListIndex, 0)
        
        'Die ganze Zeile wird nun gelöscht
        Tabelle1.Rows(CStr(lZeile & ":" & lZeile)).Delete
        
        'Und den Eintrag in der Liste müssen wir auch noch entfernen
        ListBox1.RemoveItem ListBox1.ListIndex
    
    End If
    
End Sub

Private Sub EINTRAG_ANLEGEN()
 Dim lZeile As Long
    
    lZeile = lCONST_STARTZEILENNUMMER_DER_TABELLE
    'Schleife bis eine leere ungebrauchte Zeile gefunden wird
    Do While IST_ZEILE_LEER(lZeile) = False
        lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    Loop
    
    'Nach Durchlauf dieser Schleife steht lZeile in der ersten leeren Zeile von Tabelle1
    Tabelle1.Cells(lZeile, 1) = CStr("Neu")
    
    'Und neuen Eintrag in die UserForm eintragen
    ListBox1.AddItem lZeile
    ListBox1.List(ListBox1.ListCount - 1, 1) = CStr("Neu")
    ListBox1.List(ListBox1.ListCount - 1, 2) = ""
    ListBox1.List(ListBox1.ListCount - 1, 3) = ""
    
    'Den neuen Eintrag markieren mit Hilfe des ListIndex
    ListBox1.ListIndex = ListBox1.ListCount - 1
    'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen
    
    'Und dem Benutzer direkt noch den Cursor in das erste Eingabefeld stellen und alles vorselektieren,
    'so kann der Benutzer direkt loslegen mit der Dateneingabe.
    TextBox1.SetFocus
    TextBox1.SelStart = 0
    TextBox1.SelLength = Len(TextBox1)
    
End Sub


' ************************************************************************************************
' HILFSFUNKTIONEN
' ************************************************************************************************

'Ermittelt, ob eine Zeile in Benutzung ist...
Private Function IST_ZEILE_LEER(ByVal lZeile As Long) As Boolean
  Dim i As Long
  Dim sTemp As String
  
    'Hilfsvariable initialisieren
    sTemp = ""
    
    'Um zu erkennen, ob eine Zeile komplett leer/ungebraucht ist
    'verketten wir einfach alle Spalteninhalte der Zeile miteinander.
    'Ist die zusammengesetzte Zeichenkette aller Spalten leer,
    'ist die Zeile nicht genutzt...
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        sTemp = sTemp & Trim(CStr(Tabelle1.Cells(lZeile, i).Text))
    Next i
    
    'Rückgabewert festlegen
    If Trim(sTemp) = "" Then
        'Die Zeile ist leer
        IST_ZEILE_LEER = True
    Else
        'Die Zeile ist mindestens in einer Spalte gefüllt
        IST_ZEILE_LEER = False
    End If
    
End Function

Danke schon mal im Voraus, vll. fällt euch ja ein gravierender Fehler auf.

Lg Chris


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Fehler im Makro?
03.07.2019 14:37:52 Chris
NotSolved
03.07.2019 16:07:39 Gast1139
NotSolved
03.07.2019 16:12:00 Gast37060
NotSolved
04.07.2019 08:17:06 Chris
NotSolved
04.07.2019 09:15:02 Chris
NotSolved