Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1724to1728
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

Belegung mit Zufallswerten funktioniert nur bei erstem Durchlauf

Belegung mit Zufallswerten funktioniert nur bei erstem Durchlauf
22.11.2019 21:55:31
Tobias
Hallo zusammen,
ich habe mir ein Skript aufgezeichnet, welches den Import einer CSV Datei implementiert. Da ich dies mehrfach hintereinander ausführen muss und Excel im Makro einen hardcodierten Namen für die Query benutzt, habe ich diesen Namen durch eine Variable "random" ausgetauscht, die mit einem Zufallswert belegt wird. Falls genau diese Zahl schon einmal verwendet wurde, soll die Fehlerbehandlung greifen.
Nur leider habe ich in dem Skript jetzt zwei Fehler. Bei ".ListObject.DisplayName = random" bricht er mit einer nichtssagenden Fehlermeldung ab. Starte ich das Skript dann neu, ist "random" immer noch mit dem alten Wert belegt. Dementsprechend fliegt er dann bei der Zuweisung des Query-Namens schon auf die Schnauze.
Beides kann ich mir nicht erklären, vor allem aber nicht, warum die random Variable nicht neu belegt wird.
Aber seht selbst:
Sub Import_CSV()
' Import_CSV Makro
' Eventuell anfällig weil automatisch aufgezeichnet und weil Name (in der ersten zeile des  _
Skripts) hardcodiert ist
Dim random As Integer
' Sprungmarke, falls die zufällige Zahl zur Tabellenbennenung bereits verwendet wurde
neueZahl:
random = Int((10000 * Rnd) + 1)
On Error GoTo neueZahl
random = Int((10000 * Rnd) + 1)
ActiveWorkbook.Queries.Add Name:=random, Formula:= _
"let" & Chr(13) & "" & Chr(10) & "    Quelle = Csv.Document(File.Contents(""C:\Users\ _
Privat\Desktop\Inhalt\Datafeeds\temp\1.txt""),[Delimiter="";"", Columns=99, Encoding=1252,  _
QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Typ ändern"" = Table.TransformColumnTypes(Quelle,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type tex" & _
"t}, {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""  _
_
Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type  _
text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}, {""Column17"", type text}, {""Column18"", typ" & _
"e text}, {""Column19"", type text}, {""Column20"", type text}, {""Column21"", type  _
text}, {""Column22"", type text}, {""Column23"", type text}, {""Column24"", type text}, {"" _
Column25"", type text}, {""Column26"", type text}, {""Column27"", type text}, {""Column28"", type text}, {""Column29"", type text}, {""Column30"", type text}, {""Column31"", type text}, {""Colum" & _
"n32"", type text}, {""Column33"", type text}, {""Column34"", type text}, {""Column35"", _
_
type text}, {""Column36"", type text}, {""Column37"", type text}, {""Column38"", type text}, {" _
"Column39"", type text}, {""Column40"", type text}, {""Column41"", type text}, {""Column42"", type text}, {""Column43"", type text}, {""Column44"", type text}, {""Column45"", type text}" & _
", {""Column46"", type text}, {""Column47"", type text}, {""Column48"", type text}, {""  _
_
Column49"", type text}, {""Column50"", type text}, {""Column51"", type text}, {""Column52"",  _
type text}, {""Column53"", type text}, {""Column54"", type text}, {""Column55"", type text}, {""Column56"", type text}, {""Column57"", type text}, {""Column58"", type text}, {""Column59"", " & _
"type text}, {""Column60"", type text}, {""Column61"", type text}, {""Column62"", type   _
_
text}, {""Column63"", type text}, {""Column64"", type text}, {""Column65"", type text}, {"" _
Column66"", type text}, {""Column67"", type text}, {""Column68"", type text}, {""Column69"", type text}, {""Column70"", type text}, {""Column71"", type text}, {""Column72"", type text}, {""Co" & _
"lumn73"", type text}, {""Column74"", type text}, {""Column75"", type text}, {"" _
Column76"", type text}, {""Column77"", type text}, {""Column78"", type text}, {""Column79"",  _
type text}, {""Column80"", type text}, {""Column81"", type text}, {""Column82"", type text}, {""Column83"", type text}, {""Column84"", type text}, {""Column85"", type text}, {""Column86"", type te" & _
"xt}, {""Column87"", type text}, {""Column88"", type text}, {""Column89"", type text}, { _
_
""Column90"", type text}, {""Column91"", type text}, {""Column92"", type text}, {""Column93"",  _
type text}, {""Column94"", type text}, {""Column95"", type text}, {""Column96"", type text}, {""Column97"", type text}, {""Column98"", type text}, {""Column99"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #" & _
"""Typ ändern"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=random; _
Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [random]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = random
.Refresh BackgroundQuery:=False
End With
ActiveSheet.ListObjects(random).ShowHeaders = False
ActiveSheet.ListObjects(random).ShowTableStyleRowStripes = False

PS: Das ganze Problem mit den Random Zahlen könnte ich vielleicht vermeiden, wenn ihr für folgendes eine Idee habt. Mir ist dazu leider noch keine schlauere Lösung eingefallen:
Ich ziehe mir automatisiert Daten. Dazu habe ich mir ein Makro (nicht VBA) gebaut, dass allerdings immer jeweils nur einen Datensatz pro Durchlauf erzeugt, in Word entsprechend formatiert (Da die Daten aus Fließtext extrahiert werden) und im CSV-Format in die Datei 1.txt schreibt. Diese Datei wird durch das Makro in Excel importiert. Anschließend müsste ich dann den jeweiligen Datensatz in einem seperaten Tabellenblatt zwischenspeichern und nach dem kompletten Durchlauf alle einzelnen Datensätze irgendwie zusammenbringen. Die Datensätze haben übrigens immer die selbe Struktur.
Vielen Dank im Voraus für jede Hilfe :D
Beste Grüße
Tobi

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Belegung mit Zufallswerten funktioniert nur bei erstem Durchlauf
22.11.2019 23:18:25
onur
"Dazu habe ich mir ein Makro (nicht VBA) gebaut" - Wie denn sonst, wenn nicht VBA?
"bricht er mit einer nichtssagenden Fehlermeldung ab" - mit WELCHER denn? Was für DICH nichtssagend ist, muss nicht ....
Was glaubst du eigentlich, was HIER passiert:
random = Int((10000 * Rnd) + 1)
On Error GoTo neueZahl
random = Int((10000 * Rnd) + 1)

?
On Error? Welchen Fehler erwartest du denn genau?
Wo ist der Rest des Codes?
Wo ist die Sprungmarke?
Hast du mal "RND VBA" gegoogelt, damit du weisst, wie man den Befehl genau benutzt?
Das sin einige der Fragen, die mir spontan einfallen, wenn ich deinen Post lese.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige