Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1656to1660
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

Richtiges Makro automatisch auswählen

Richtiges Makro automatisch auswählen
28.11.2018 10:01:36
MarC
Hi alle,
ich habe ein Userform in dem zwei Buttons sind mit denen ich zwei unterschiedöjch aufgrbaute CSV Dateien importiere. Das Problem ist wenn ich die beiden unterschiedlichen CSV Dateien auf dem Desktop habe und diese importieren will weiß ich nicht welchen Dee beiden Buttons im Userform verwenden soll. Das weiß ich nur wenn ich mir davor immer die CSV Dateien anschaue.
Ist es möglich das man per vba die ersten drei Spalten Namen der CSV anschaut und anhand von dem Ergebnis dann automatisch den richten Import code auswählt?

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Richtiges Makro automatisch auswählen
28.11.2018 10:05:39
Armin
Hallo,
lade einmal die zwei csv-Dateien und auch Dein Sheet mit hoch. Dann sehen wir weiter.
Gruß Armin
AW: Richtiges Makro automatisch auswählen
28.11.2018 10:24:23
Matthias
Hallo
wenn ich die beiden unterschiedlichen CSV Dateien auf dem Desktop habe und diese importieren will weiß ich nicht welchen der beiden Buttons im Userform verwenden soll.
dann werde die beiden Dateien ja unterschiedliche Dateinamen haben, oder?
Gruß Matthias
AW: Richtiges Makro automatisch auswählen
28.11.2018 10:33:46
MarC
Ja die haben unterschiedliche dateiennamen. Der Dateiname ist aber nur eine lange Nummer und ich bekomme die beiden Dateien immer per email vom Server ohne Kommentar das bedeutet ich muss sie mir davor immer anschauen
Anzeige
als Idee ...
28.11.2018 10:40:42
Matthias
Hallo
Nur so als Idee.
Evtl. lässt sich ja anhand der Dateieigenschaften eine Auswahl treffen.
Welche der beiden Dateien wurde wann geschickt oder wann zuletzt gespeichert.
Das kannst Du natürlich nur selbst ermitteln.
Gruß Matthias
AW: als Idee ...
28.11.2018 10:46:42
MarC
Ne anhand der Information weiß doch nicht was drin steht. Der Zeitpunkt ist dabei uninteressant
sorry, keine weitere Idee ...
28.11.2018 11:04:59
Matthias
Ok, versuch mal Dein Glück weiter mit Armin.
Ich hab keine weitere Idee.
AW: sorry, keine weitere Idee ...
28.11.2018 11:10:34
Armin
Hallo,
wenn Du kein Upload machen willst kann Dir wahrscheinlich keiner Helfen.
Gruß Armin
AW: Richtiges Makro automatisch auswählen
28.11.2018 11:07:47
PeterK
Hallo
Lies einfach die erste Zeile deiner Datei aus und endscheide dann welches Makro Du verwendest

Dim mytext as string
open dateiname for input as #1
line input #1, mytext
close #1
analysiere mytext und entscheide welches Makro

Anzeige
AW: Richtiges Makro automatisch auswählen
28.11.2018 11:18:02
MarC
Danke Peter, so in etwa habe ich es mir vorgestellt. Aber kann man das nicht bla selber entscheiden lassen?
Die erste Zeile der beiden CSV Dateien ist immer gleich aufgebaut. In der einen CSV Datei steht in Spalte 1 ID, Spalte 2 Product, die in der anderen CSV Datei steht immer in Spalte 1 Hersteller, in der zweiten Produkt usw...
So gesehen müsste man dann doch nur abfragen was steht in Cell(1,1). Wenn in cell(1,1) ID steht dann nimm den vba code wenn in cell(1,1) Hersteller steht dann nimm den anderen code zum einlesen.
Geht das nicht irgendwie so?
AW: Richtiges Makro automatisch auswählen
28.11.2018 11:30:13
PeterK
Hallo
Wenn Du keine unterschiedlichen Import Optionen für die beiden Datein verwendest, hast Du die Lösung ja bereits selbst gefunden.
Anzeige
AW: Richtiges Makro automatisch auswählen
28.11.2018 11:34:08
Daniel
naja das ist doch ganz einfach:
If myText like "ID?Poduct*"
hier der Code zum Import der einen Datei
ElseIf myText Like "Hersteller?Produkt*" then
hier der Code zum Import der anderen Datei
Else
Msgbox "CSV-Datei konnte nicht identifziert werden"
End if
Gruß Daniel
Nicht so einfach
28.11.2018 19:13:49
MaRc
Hi Daniel danke dir und allen anderen für die Hilfe, aber ganz so einfach ist es doch nicht. Ich habe versucht eine vorgelagerte IF-Abfrage zu implementieren, aber der Code wird nie komplett ausgeführt.
Und da ich mir nicht erklären kann woran das liegt, habe ich eine Beispiel Datei erstellt. In der Datei ist ein Button welcher ein Userform öffnet. In dem UserForm muss ich dann eine CSV Datei auswählen und auf speichern klicken, wodurch die Datensätze importiert werden.
Wenn ich speichern drücke sollte der Code erkennen ob es der Typ1 oder Typ2 der CSV datei ist und die datenn anschließend einlesen. Leider funktioniert die IF-Abfrage nicht. In meiner Beispieldatei habe ich die IF-Abfrage entfernt, weil ich glaube das sie vll an der falschen stelle stand oder gänzlich falsch war. Ich hoffe du oder jemand anders können mir bei meinem Problem helfen.
https://www.herber.de/bbs/user/125737.xlsm
Anzeige
AW: Nicht so einfach
29.11.2018 13:10:58
Zwenn
Hallo Marc,
ich habe jetzt nur kurz in Deine Datei geschaut. Warum rufst Du nicht direkt den Öffnen-Dialog auf und importierst die ausgesuchte CSV-Datei? Dein eigener Dialog stellt doch gar keine weitere Funktionalität zur Verfügung.
In Deiner Prozedur Speichern_Click() hast Du unten einen With Sheets("Cache")-Block. Da fehlt nach meiner Einschätzung der Punkt vor Rows("6:50000").Select.
Du verwendest eine Cache-Tabelle, um Deine importierten Daten zu bereinigen. Die könntest Du Dir komplett sparen, wenn Du meinen Vorschlag mit dem Import in ein Array übernimmst. Dann kannst Du aus dem Array nämlich nur die Daten übernehmen, die Du auch brauchst und der Rest verfällt einfach. Dein Startbutton aus der Tabelle Dashboard kann auch in die Datenbank-Tabelle. Dann hast Du nur noch eine einzige Tabelle, in der alles ist was Du brauchst. Das ist Geschmackssache. Ich finde es einfach übersichtlicher. Ausser Du hast noch andere Dinge, für die Du ein Dashboard benötigst.
Die Beispielmappe ist schonmal hilfreich. Es wäre aber sehr gut, wenn Du auch je eine CSV-Datei jeder Sorte zur Verfügung stellen kannst. Die kannst Du hier als .txt Datei hochladen. Falls Du Daten verarbeitest, die Du nicht veröffentlichen willst, kannst Du Fake-Daten in die Dateien schreiben. Aber achte darauf, dass das Format der CSV-Dateien nicht verändert wird. Also, kein anderes Trennzeichen usw. Die Anzahl der Spalten sollte stimmen und die Datenfelder sollten Werte mit den richtigen Formaten enthalten. Also Spalten, die in Deinen echten CSVs Zahlen enthalten, sollten auch in der Fake-Datei Zahlen enthalten, usw. Was erhalten bleiben sollte, ist ist das Unterscheidungs-Kriterium, um dass es hier ja eigentlich geht.
Viele Grüße,
Zwenn
Anzeige
AW: Nicht so einfach
01.12.2018 10:08:07
MarC
Morgen Zwenn,
du hast vollkommen recht, das manche Sachen unnötig sind, aber das liegt daran das ich das Grundkonstrukt nicht programmiert, sondern nur abgeändert habe, weil meine VBA Kenntnisse begrenzt sind. Warum ich den Öffnen Dialog nicht direkt aufrufe kann ich dir nicht sagen die Datei ist schon ein Jahr alt und ich weiß nicht mehr was ich mir dabei gedacht habe.
Die Cache Tabelle verwende ich, weil ich früher immer Probleme mit der Aufbereitung meiner Daten hatte. Wenn aus deiner Sicht die Tabelle keinen Sinn macht und den ganzen Ablauf bremst werde ich versuchen die irgendwie wegzubringen.
Dein Vorschlag mit dem Array hört sich gut an aber ich kann das selber nicht umsetzen. Des Weiteren weiß ich auch nicht ob ich damit CSV Dateien abarbeiten kann die 8MB groß sind, läuft der Speicher dann nicht irgendwann über?
Also ich bin für jeden Vorschlag offen um die Unterscheidung der beiden CSV Dateien umzusetzen, genauso freue ich mich auch über denkeanstöße die den Programmablauf beschleunigen und übersichtlicher machen. Aber ich benötige für die U_msetzung etwas hilfe.
Anzeige
AW: Richtiges Makro automatisch auswählen
28.11.2018 11:16:57
Daniel
Hi
naja, das Problem ist, dass du die Datei öffnen musst, um zu schauen was drin steht.
Wenn du wirklich unterschiedliche Import-Codes brauchst und die Unterschiede sich auf den zweiten Teil des Importes (dem Aufteilen in Spalten) auswirken, kannst du auch so vorgehen:
Importiere die CSV-Dateien erstmal so, dass der Inhalt einer Zeile in eine Zelle geschrieben und nicht auf Spalten aufgeteilt wird, dazu im Import alle Trennzeichen abwählen oder bei fester Breitenur eine Spalte angeben.
dann kannst du die erste Zeile analysieren und prüfen, welcher Fall vorliegt.
dann führst du das DATEN - DATENTOOLS - TEXT IN SPALTEN aus, um die Inhalte auf Spalten zu verteilen.
dabei kannst du dann je nach Ergebnis der Analyse der ersten Zeile unterschiedliche Codes verwenden.
solange da pro Zeile nicht mehr als 32.000 Zeichen zusammen kommen (mehr kannst du nicht in eine Zelle schreiben), wäre das eine Möglichkeit.
ansonsten müsstest du dir die Funktionen OPEN und LINEINPUT anschauen.
Damit könntest du erstmal die erste Zeile der CSV-Datei in einen Textstring einlesen und diesen auswerten, bevor du den Import startest.
Gruß Daniel
Gruß Daniel
Anzeige
AW: Richtiges Makro automatisch auswählen
28.11.2018 12:29:18
Zwenn
Hallo MarC,
ich würde zunächst die Spalten und Zeilenzahl der zu importierenden CSV-Datei ermitteln. Auf Basis der beiden Werte dann ein String-Array dimensionieren und die ausgewählte Datei erstmal in das Array laden. Anhand des Array-Elments(0,0) kannst Du dann entscheiden, um was für eine CSV es sich handelt und den Array-Inhalt so verarbeiten, wie Du willst. Während der Verarbeitung kannst Du die Datenformate so zuweisen, wie Du es brauchst.
Funktion zum ermitteln der Zeilen in einer CSV-Datei:
(An strFile wird der Dateiname der CSV-Datei inklusive
vollständigem Pfad und Dateiendung Übergeben)

Function GetNumberOfRowsInCsvFile(ByVal strFile As String) As Long
'Uwe Fabig - 13.02.2013, 11:30
'Quelle:
'https://www.xing.com/communities/posts/anzahl-zeilen-einer-textdatei-ermitteln-1002110449
Dim fso As Object
Dim ts As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(strFile)
ts.ReadAll
GetNumberOfRowsInCsvFile = ts.Line
Set fso = Nothing
Set ts = Nothing
End Function

Funktion zum ermitteln der Spalten in einer CSV-Datei:
(An strFile wird der Dateiname der CSV-Datei inklusive
vollständigem Pfad und Dateiendung Übergeben
An strDelimeter wird das Trennzeichen übergeben, welches
in der CSV-Datei verwendet wird)

Function GetNumberOfColumnsInCsvFile(strFile As String, strDelimeter As String) As Long
Dim strFirstRow As String
Dim arrElemente() As String
Open strFile For Input As #1
Line Input #1, strFirstRow
Close #1
arrElemente = Split(strFirstRow, strDelimeter)
GetNumberOfColumnsInCsvFile = UBound(arrElemente)
End Function

Viele Grüße,
Zwenn
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige