Excel 2003 - VB-Script "Zufall" - Zufallsgenerator
25.10.2016 15:11:07
PIO
für die Auswahl von Teillisten habe ich irgendwann mal das beiliegende VB-Script "Zufall" bekommen. Leider funktioniert es nicht mehr korrekt und der Ersteller des Script ist nicht mehr verfügbar.
Das Script steigt mit der Fehlermeldung "Laufzeitfehler '-2147417848 (80010108)': Die Methode 'Cells' für das Objekt '_Worksheet' ist fehlgeschlagen" aus.
Wenn ich über "Debuggen" in das Script einsteige, bleibt es bei ".Cells(i + zo, s + so) = Tabelle1.Cells(G(i), s)" hängen.
Nach Beendigung des Debuggers wird nur eine unvollständige Ausgabe erzeugt.
Was ist an der Methode ".Cells...." nicht mehr korrekt? Benötige hierfür einmal Eure Unterstützung, damit das Script wieder fehlerfrei durchläuft
Momentan sind im Script jeweils 250 Einträge als Teilliste aus der Gesamtliste von 1265 Einträgen (Tabelle1) hinterlegt.
Die ausgewählte Teilliste wird auf einem separaten Tabellen-Blatt (Datum Uhrzeit) abgelegt. Hat auch schon mal funktioniert
Wäre es möglich, wenn das Script gestartet wird, die Anzahl der auszuwählenden Datensätze in einer Eingabe-Box an das Script zu übergeben, damit man diese Änderung nicht im Script vornehmen muss?
Vielen Dank für Eure Hilfe und
GlG Pia Bird
In der beiliegenden Excel-Datei sind Beispieldatensätze und das VB-Script:
https://www.herber.de/bbs/user/109013.zip
Hier nun das Script:
Sub Zufall()
Dim G(250) As Integer
Dim vorhanden As Boolean
Dim a, i, s, z, x, q, wd As String
Dim so 'Spaltenoffset
Dim zo 'Zeilenoffset
Dim NewSheet As Sheets, nsNr
Dim Kopf(11) As String
Dim Anfang, Ende, Blatt As String
'Nachfrage, ob gezogen werden soll...
q = MsgBox("Soll eine neue Auswahl durchgeführt werden?", _
vbYesNo, "Neue Ziehung - " & Date)
If q vbYes Then Exit Sub
' Hier die Parameter einstellen, die relevant sind
Kopf(1) = "Anzahl"
Kopf(2) = "AuswahlNr" 'Spalte A
Kopf(3) = "Titel1" 'Spalte B
Kopf(4) = "Anrede" 'Spalte C
Kopf(5) = "Name" 'Spalte D
Kopf(6) = "Name2" 'Spalte E
Kopf(7) = "Geschlecht" 'Spalte F
Kopf(8) = "Plz" 'Spalte G
Kopf(9) = "Ort" 'Spalte H
Kopf(10) = "Strasse" 'Spalte I
Kopf(11) = "Haus_Nr" 'Spalte J
Blatt = "Tabelle1" 'In diesem Blatt stehen die Namen drin
a = 250 'Anzahl der zu ziehenden Namen
Anfang = 2 'Beginn der Einträge festlegen (Zeile)
'Das Ende der Einträge automatisch ermitteln
Ende = Sheets(Blatt).Range("A65536").End(xlUp).Row
'Alternativ kann das Ende auch explizit angegeben werden
'Ende = 3000
'Plausibilitätsprüfung
If Ende - Anfang