Anzeige
Archiv - Navigation
1936to1940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro läuft zu lange

Makro läuft zu lange
15.07.2023 10:19:57
Holger
Hallo und guten Morgen,

ich habe folgendes Problem das mein Makro zu lage läuft.
Es macht genau das was es machen soll, nur dauert es zu lange bis es fertig ist.
Ich habe nur für die erste Reihe den Code hier reingestellt, er wiederholt sich bis alle Checkboxen abgefragt sind.
Ich ändere dann nur die For I angaben wie folgt:
For i = 15 To 22;
For i = 23 To 30....... immer um 7 erhöt bis alle Checkboxen überprüft sind.
Ich hätte gerne eine Beispielmappe hochgeladen, nur leider ist diese für das Forum zu groß.


Private Sub CommandButton1_Click() 'Seite 1
Dim i
Dim zelladresse

Application.ScreenUpdating = False
'ActiveCell.Offset(0, 0).Activate

'Zelle = ActiveCell.Address
'Sheets("Sped.Plan").Visible = True
Sheets("Speditionen").Activate
ActiveCell.Offset(-6, 0).Activate
zelladresse = ActiveCell.Address

'neu einlesen
' Ab hier wiederholt sich der Code dieser Bereich wird nur durch andere Angaben in der For i geändert. ( immer 7 mehr )

With Me
Range(zelladresse).Select
For i = 1 To 7
If Controls("CheckBox" & i).Value = True Then
ActiveCell.Offset(-1, 8).Value = ("F") 'Controls("CheckBox" & i).Caption
Else: Controls("CheckBox" & i).Value = False
ActiveCell.Offset(-1, 8).Value = ("")
End If
ActiveCell.Offset(1, 0).Select
Next i
End With
With Me
Range(zelladresse).Select
For i = 8 To 14
If Controls("CheckBox" & i).Value = True Then
ActiveCell.Offset(-1, 9).Value = ("S")
Else: Controls("CheckBox" & i).Value = False
ActiveCell.Offset(-1, 9).Value = ("")
End If
ActiveCell.Offset(1, 0).Select
Next i
End With
' bis ihier wird es kopiert und die Angaben in For i angepasst.
'hier kommen die anderen Schleifen rein

MsgBox "Die Eingabe wurde gespeichert" _
& vbLf, vbOKOnly + vbInformation, "Huhu ich bins " & Environ("Username")
'Unload Me
'Spediplan.Show
Application.ScreenUpdating = True

End Sub

Ich hoffe das mein Problem verständlich ist.
Userbild

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro läuft zu lange
15.07.2023 10:31:55
Holger
So sieht die Tabelle aus in der die Einträge der Checkboxen gemacht werden.

Userbild

AW: Makro läuft zu lange
15.07.2023 10:36:50
RPP63
Moin!
Off topic!
Kenne ich, so habe ich vor 30 Jahren auch mit VBA angefangen.
Hat aber nicht lange gedauert, bis ich gemerkt habe, dass ich mich hoffnungslos verrannt hatte.
Dringender Rat meinerseits:
Dieses Userform ist nicht nur grottenhässlich, sondern dürfte auch dem Bediener kaum eine (Ausfüll-) Hilfe sein.
Ich würde den Workflow völlig überdenken.
[/off topic]

Musste ich einfach mal loswerden …

Gruß Ralf

Anzeige
AW: Makro läuft zu lange
15.07.2023 14:34:51
Hans W. Herber
Hallo Ralf,

Du hast recht: Dieses Forum ist potthässlich.
In der kommenden Woche wirst Du ein ganz neues Forum sehen. Die Funktionalität wird weitgehend beibehalten, die Programmierung und das Aussehen sind total neu konzipiert.

Ich erwarte eine Sturm von Entrüstung.

Gruß hans

AW: Makro läuft zu lange
15.07.2023 17:22:33
Pappawinni
Ja ist denn schon Weihnachten?

AW: Makro läuft zu lange
15.07.2023 18:27:20
RPP63
Da bin ich gespannt, Hans!
Ich habe nochmal nachgeschaut:
Ich habe weder den Code des TE noch dieses Forum als optisch/funktional schlecht bewertet.
Und ja!
Den Aufbau der Userform finde ich nicht nur schlecht, sondern im Sinne der Optik (und erst Recht der Usability) als grottenschlecht.
Ich erinnere mich an die ersten Farbmonitore, die auf Grund der üppigen Speicherausstattung der damaligen Grafikkarten mit folgenden Farben auskommen durften:
• black
• white
• red
• yellow
• green
• blue
• magenta
• cyan
Da gab es dann fantastische (Würg!) Farborgien, weil man ja zeigen wollte, was man hat. ;)
Aus dieser Urzeit haben sich diese 8 Farben bis heute in VBA gehalten; einfach ein vb vorweg …
Jetzt höre ich mit dem off topic aber endgültig auf.

Gruß Ralf

Anzeige
AW: Off Topic
16.07.2023 11:53:48
Pappawinni
"Die Schönheit hat sich der Funktionalität unterzuordnen."
Heißt nicht daß ein Forum nicht ansprechend gestaltet sein darf, aber wichtiger ist nun mal die Funktionalität. Was mich da immer wieder stört, dass man dieses blöde Kästchen anklicken muss, damit der Thread weiter als offen gekennzeichnet bleibt. Ich vergesse das regelmäßig. Eigentlich sollte der TO entscheiden, inwieweit er sein als erledigt betrachtet. Vielleicht wäre da ein Automatismus sinnvoll, der einen Thread automatisch schließt, wenn da ein paar Tage keine Aktion verzeichnet wird.
Aktuell verschwindet ein Thread auch dann automatisch im Archiv, wenn da noch Aktivitäten sind. Der TO kann dann seinen Thread nicht mehr einfach aufrufen. Da ist IMHO Verbesserungsbedarf.

Anzeige
Wunschliste
16.07.2023 22:21:49
Yal
Ich habe auch gedacht, ob es eine gute Idee wäre, die Schaltfläche "Absenden" zu doppeln und den zweiten als "Absenden + offen markieren", aber eine Möglichkeit, nachträglich den eigenen Beitrag offen zu bezeichnen, wäre auch gut.

Selbsteinstufung: diese sollte nur genutzt werden, um die Erklärung anzupassen. Das müsste aber den Antwortenden klar gemacht werden.
Müsste man vielleicht die Einstufung Excel, VBA, Power Query auseinander nehmen.

VG
Yal

AW: Makro läuft zu lange
16.07.2023 11:27:00
Yal
Oha! Große Ankündigung zwischen den Zeilen. Ich bin gespannt.

Und ja, natürlich, die Verfechter des "never change a running system" werden auf die Barricade steigen.

Hässlich finde ich den Forum keinesfalls. Alle notwendige Funktionalitäten sind vorhanden. Was braucht man mehr.

VG
Yal

Anzeige
AW: Makro läuft zu lange
16.07.2023 12:55:02
Herbert_Grom
Hallo Hans,

also mir gefällt dein Forum, so wie es ist und das bereits seit mind. 23 Jahren! Aus meiner Sicht bräuchte es keine optischen Änderungen. Ob technische Änderungen nötig sind, kann ich nicht beurteilen.

Was ich gerne geändert hätte, wäre, dass du die Level-Abfrage weg lässt, denn die gibt immer wieder Anlass zu Diskussionen und Verunglimpfungen. Ich habe meine Antworten noch nie nach dem Level gerichtet, sondern eine für mich machbare Lösung erarbeitet. Aber vielleicht bin ich da ja auch nicht repräsentativ.

Vielleicht kannst du auch das Datei hochladen vereinfachen, da haben manche auch ihre Probleme.

Ansonsten bin ich sehr gespannt, was es neues gibt. Gutes Gelingen!

Servus

Anzeige
AW: Makro läuft zu lange
15.07.2023 10:38:24
onur
If Controls("CheckBox" & i).Value = True Then
ActiveCell.Offset(-1, 9).Value = ("S")
Else: Controls("CheckBox" & i).Value = False
Wenn die Checkbox nicht angeklickt ist, dann ist sie nicht angeklickt ? Das ist genial ! ;)

AW: Makro läuft zu lange
15.07.2023 11:09:05
Holger
Hallo Onur,

das ist nicht genial, leider.
Die Checkboxen weren beim öffnen der Userform eingelesen und daraufhin ist es If Controls("CheckBox" & i).Value = True oder False.
Durch diesen Code muss ich beides ändern.
Aber Trozdem vielen Dank für deine Mühe.

@ Ralf wenn du meinen Code für "grotten schecht" hälst wäre es hilfreich wenn du einen beseren postet.
Einfach nur sagen das es schecht ist ist leider nicht Zielführen.
Und Ausserdem weiß ich das mein Code nicht gut ist, hätte ich mich sonst hier gemeldet.
Denk mal drüber nach.

Anzeige
AW: Makro läuft zu lange
15.07.2023 14:25:25
onur
Du hast es nicht verstanden: Checkboxen sind IMMER True oder False.
Wenn sie also nicht True sind, sind sie automatisch False und brauchen NICHT auf False gesetzt werden.
Ist wie "Wenn Licht an ist, mach das und das, wenn Licht aus ist, dann mache Licht aus.
Oder meinst du mit
Else: Controls("CheckBox" & i).Value = False
das
ElseIf Controls("CheckBox" & i).Value = False
Selbst wenn ja, reicht ELSE ohne den Rest der Zeile.

AW: Makro läuft zu lange
15.07.2023 14:27:10
Yal
Hallo zusammen,

genau gelesen hat Ralf nicht gesagt, dass dein Code schlecht ist, sondern dass Formular, die keine wesentlichen Mehrwert liefern, im allgemeinen selten gut sind. Dass diese auch noch optisch nicht zu seinem Geschmack passen, lassen wir offen.

Mit Datenüberprüfung und Ereignis-Prozeduren kann man tatsächlich viel abfangen, was Anwender-Beschränkung und Eingabequalität angeht. Ein Formular zu programmieren ist immer teurer: erst beim entstehen, dann beim anpassen.

Daher ist oft eine bessere Lösung, die Eingabe direkt im Blatt kontrolliert zu ermöglichen.
(Habe noch nicht ganz die 30 Jahre Erfahrung, aber bald. Am WE lese ich den Forum nur über Smartphone, daher auch kein Code)

VG
Yal

Anzeige
AW: Makro läuft zu lange
15.07.2023 14:41:37
onur
Wenn man in die Früh- oder Spät-Spalte direkt ein "X" hineinsetzt, braucht man auch keine einzige Checkbox und somit auch keinen Code.
Ich weiss nicht, wozu überhaupt die Checkboxen gut sein sollen.
Das passiert, wenn man Optik vor Funktion setzt, aber nicht in der Lage ist, die dadurch entstehenden Probleme selber zu lösen.

AW: Makro läuft zu lange
15.07.2023 12:29:20
Piet
Hallo

ich habe zu deinem Code einige Fragen, und geben dir einen Tipp wie ich den Code aufbauen würde. Ganz OHNE Select!
Wenn man eine feste Zelle hat, als ActiveCell, kann man von da aus mit Cells(i, 8) alle anderen Zellen erreichen!
Teste es bitte mal, ggf musst du zu i noch eine feste Zahl addieren oder subtrahieren. Oder arbeite mit Offset(i, 8)

Du setzt zu beginn die ActiveCelle immer um Offset(-6, 0) zurück. Kannst du da nicht mal über das Blatt hinaus schiessen??
Günstiger wäre es sicher eine feste Adresse anzugeben. In dem Fall könntest du auch ActiveCell.Offset(i.8) durch Range("xxx").Offset(i, 8) ersetzen.

mfg Piet

  • Sheets("Speditionen").Activate
    '** keine feste Adresse??
    ActiveCell.Offset(-6, 0).Activate
    Application.ScreenUpdating = False

    'neu einlesen
    ' Ab hier wiederholt sich der Code dieser Bereich wird nur durch andere Angaben in der For i geändert. ( immer 7 mehr )

    With Me
    For i = 1 To 7
    If .Controls("CheckBox" & i).Value = True Then
    ActiveCell.Cells(i, 8).Value = "F"
    Else
    ActiveCell.Cells(i, 8).Value = ""
    End If
    Next i
    End With
    With Me
    For i = 8 To 14
    If .Controls("CheckBox" & i).Value = True Then
    ActiveCell.Cells(i, 9).Value = ("S")
    Else
    ActiveCell.Cells(i, 9).Value = ("")
    End If
    Next i
    End With


  • Anzeige
    AW: Makro läuft zu lange
    15.07.2023 12:35:11
    Piet
    nachtrag

    ich rücke im Code For Next und If Anweisungen immer ein. Dient nur der optischen Übersicht.
    Man erkennt so schneller welche Befehle zu welchem Code Teil gehören. Muss jeder selbst entscheiden.

    mfg Piet

    AW: Makro läuft zu lange
    15.07.2023 14:23:44
    Daniel
    Die Select/Selection zu vermeiden und die Zellen direkt zu referenzieren ist der erste schritt.
    Der nächste Schritt wäre, die Anzahl der einzelnen Zellzugriffe zu reduzieren und Zellen wenn möglich nicht einzeln, sondern im Block zu bearbeiten.

    In diesem Fall kann man zuerst alle Zellen zusammen leeren, und dann nur das "F" oder "S" eintragen, wenn der Haken gesetzt ist:

    Aus
    For i = 1 To 7
        If .Controls("CheckBox" & i).Value = True Then
            ActiveCell.Cells(i, 8).Value = "F"
        Else
            ActiveCell.Cells(i, 8).Value = ""
        End If
    Next
    Wird:
    ActiveCell.Cells(1, 8).Resize(7).ClearContents
    For i = 1 To 7
        If .Controls("CheckBox" & i).Value = True Then ActiveCell.Cells(i, 8).Value = "F"
    Next
    Gruß Daniel

    Anzeige
    AW: Makro läuft zu lange
    15.07.2023 16:10:09
    Holger
    Hallo an alle,

    vielen Dank schon mal.
    Ich überdenke jetzt mal ob es mit den Checkboxen überhaupt die beste Lösung ist.
    Die Antworten haben mir sehr gut geholfen, da merkt man die Erfahrung hier im Forum die mir noch fehlt.

    vielen Dank an alle.

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige