Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
640to644
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
640to644
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Schleife mit Button abbrechen VBA
24.07.2005 17:01:27
Wolfgang
Hallo,
mit folgendem Makro werden Zufallszahlen (ug=Untergrenze, og=Obergrenze) im festgelegten Bereich der Spalte A (zeist=Zeilenstart, zeizi=Zeilenziel) erzeugt. Klappt auch.
Wenn ich bei doppelten Zahlen eine Neuberechnung durchführen lasse (nochmal:) dauert es bei sehr großen Zahlen sehr lange, das Löschen der doppelten Zahlen möchte ich vermeiden. Ich habe schon vorgegeben, daß die Zufallszahlen 3 x größer als die Zeilenanzahl sind, hilft aber nur bei kleineren Zahlen.
Ich habe deshalb versucht einen Abbruch-Button zu setzen, der die Schleife abbrechen soll. Leider reichen meine VBA-Bastelkenntnisse nicht aus z.B. den gefundenen Code: bAbort = False / Do / mein Makro / DoEvents / Loop Until bAbort = True in das Makro zu integrieren.
Den Abbruch mittels Esc / Strg Unterb möchte ich umgehen, da der VBA-Editor nicht geöffnet werden soll.
Würde mich sehr freuen, wenn mir geholfen werden kann.
Schönen Tag wünscht Wolfgang
Option Explicit
Private bAbort As Boolean

Private Sub CommandButton1_Click()
Dim zuf, og, ug As Double
Dim zeist, zeizi, spst, spzi, s, t, Zaehler, Zeile As Integer
On Error Resume Next
ug = Me.TextBox1.Value
og = Me.TextBox2.Value
zeist = Range((Me.TextBox3)).Row
zeizi = Range(Me.TextBox4).Row
spst = Range((Me.TextBox3)).Column
spzi = Range(Me.TextBox4).Column
If CheckBox2 = True Then
Range("A:A").Clear
End If
nochmal:
For s = zeist To zeizi
For t = spst To spzi
zuf = Int((og - ug + 1) * Rnd + ug)
Cells(s, t).NumberFormat = "0"
Cells(s, t) = zuf
Next t
Next s
If CheckBox2 = True Then
If og - ug < (zeizi - zeist) * 3 Then
MsgBox "Es müssen die Daten verändert werden,"
Exit Sub
End If
Zeile = Cells(Cells.Rows.Count, 1).End(xlUp).Row
For Zaehler = Zeile To 1 Step -1
If WorksheetFunction.CountIf(Columns(1), Cells(Zaehler, 1)) > 1 Then GoTo nochmal
Next Zaehler
End If
End Sub


Private Sub cmdAbort_Click()
bAbort = True
End Sub


Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub


Private Sub CommandButton3_Click()
On Error Resume Next
Range(Me.TextBox3.Text, Me.TextBox4.Text).Clear
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife mit Button abbrechen VBA
24.07.2005 17:19:43
Reinhard
Hi Wolfgang,
ich habe den Code jetzt nur sehr kurz überflogen aber frag mich trotzdem warum der so lang sein muss.
Ansonsten, du musst doch nur, wo genau auch immer sowas wie
if abort=true then exit sub
einbauen *denk*
Gruß
Reinhard
AW: Schleife mit Button abbrechen VBA
24.07.2005 17:41:33
Wolfgang
Vielen Dank für die schnelle Antwort.
Ich habe versucht an allen möglichen Stellen so etwas einzubauen, ich müßte jedoch noch DoEvents einbauen, sonst kann man den Button doch nicht betätigen, oder ?
Ist der Code zu lang ? Besteht doch nur aus dem Auslesen der Eingaben, Ermittlung der Zahlen, und Abfrage, ob doppelte Werte ausgeschlosen werden sollen,
Wenn es möglich wäre könntest Du den Code ja mal kurz überfliegen.
Würde mich freuen.
Gruß Wolfgang
Anzeige
AW: Schleife mit Button abbrechen VBA
24.07.2005 19:59:38
Christoph
Hi Wolfgang,
probier's mal so:
Gruß
Christoph
PS:
zur Info: Deine Deklaration
Dim zuf, og, ug As Double
Dim zeist, zeizi, spst, spzi, s, t, Zaehler, Zeile As Integer
deklariert nur ug als Double und Zeile als Integer, alle anderen Variablen sind Variant

nochmal:
For s = zeist To zeizi
For t = spst To spzi
zuf = Int((og - ug + 1) * Rnd + ug)
Cells(s, t).NumberFormat = "0"
Cells(s, t) = zuf
If bAbort Then Exit Sub
DoEvents
Next t
Next s

AW: Schleife mit Button abbrechen VBA
24.07.2005 20:20:15
Wolfgang
Hallo Christoph,
vielen Dank, es klappt jetzt.
Das mit der Deklaration habe ich noch nicht gewußt, jetzt muß ich alle meine Makros umschreiben. Bist Du Dir zu 100% sicher?
Gruß Wolfgang
Anzeige
ja, bin ich...
24.07.2005 21:11:27
Christoph
Hi Wolfgang,
das ist ein beliebter Fehler, der sich wahrscheinlich durch Kopieren von Code-Schniepseln aus dem Internet hartnäckig hält.
Ob du jetzt alle Makros umschreiben musst? Variant frisst halt mehr RAM und kann zur Laufzeit den Typ wechseln. Da kann's Probleme geben.
Bevor du jetzt 300 Codes überarbeitest, verstehe das eher als Tipp für die Zukunft.
Noch ein Tipp:
Du kannst die Typkennzeichen verwenden, statt den Variablentyp auszuschreiben.
Gruß
Christoph
hier ein Auszug aus der Microsoft-Library:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcn7/html/vacondeclarationsyntax.asp
In Visual Basic 6.0, you can declare variables of different types in the same statement, but you must specify the data type of each variable or it defaults to Variant. The following example shows multiple declarations and their resulting data types:
Dim I, J As Integer ' I is Variant, J is Integer.
Dim L As Integer, M As Integer ' L is Integer, M is Integer.
Dim N As Integer, X As Double ' N is Integer, X is Double.
Anzeige
AW: ja, bin ich...
24.07.2005 23:22:00
Wolfgang
Hallo Christoph,
leider stimmt das mit der Deklaration wirklich.
Habe schon mit umschreiben begonnen, allerdings ohne die verküzte Variante.
Nochmals vielen Dank.
Gruß Wolfgang

17 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige