Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Verschiedene Spalten mittels VBA in neuer Reihenfolge in neues Excel Importieren

Frage Microsoft Microsoft Office

Mitglied: onthetop79

onthetop79 (Level 1) - Jetzt verbinden

21.04.2012 um 01:18 Uhr, 9259 Aufrufe, 2 Kommentare

Hallo Zusammen

Ich bräuchte mal wieder Eure Hilfe. Ich muss auch hier zu Beginn gleich offen gestehen, dass ich mit VBA bis anhin nichts am Hut hatte. Jedoch keinen Weg sehe der für solche Problemstellungen daran vorbei führt.

Ich habe folgendes Problem:

Ich bekomme von verschiedenen Lieferanten Preislisten und Preisaktualisierungen als Excel. Da ich diese letztendlich in ein und der selben Formatierung und Reihenfolge haben muss und die Fehler Quelle bei händischen Copy/Paste Übungen relativ gross sind, möchte ich über VBA diese Daten zusammen ziehen können.

Als Vorlage habe ich ein Master aus welchem ich gerne die Quelldatei auswählen und anschliessend die Spaltenzuordnung bestimmen würde. Beim Import soll die Spalten Überschrift der Quelldatei weggelassen werden und die darunterstehenden Daten in der Masterdatei in die vorgewählte Spalte abgefüllt werden. Nach dem Import sollten die Daten in der Master Datei als neue Datei in einem definierten Pfad abgespeichert werden können.

Da die Spalten Reihenfolge in den Quelldatei immer unterschiedlich ist, müssen diese pro Importauftrag gewählt werden können. Die Masterdatei bleibt immer gleich.

Da diese Arbeiten immer öfters d.h z.Z Monatlich für ca. 10 verschiedenen Lieferantenpreislisten durchgeführt werden müssen, möchte ich so die Möglichkeit schaffen, diese Arbeiten intern delegieren zu können. Dies ist nur möglich wenn ich dies "Deppensicher" automatisieren kann.

Hat jemand von Euch schon solch ein VBA Script geschrieben oder könnte mir da jemand zur Hand gehen.
Mitglied: mak-xxl
21.04.2012 um 09:47 Uhr
Moin ganzoben79,

Zitat von onthetop79:
... Da die Spalten Reihenfolge in den Quelldatei immer unterschiedlich ist, müssen diese pro Importauftrag gewählt werden können. ...

Aber pro Lieferant haben die Tabellen immer die gleiche Struktur?

Da diese Arbeiten immer öfters d.h z.Z Monatlich für ca. 10 verschiedenen Lieferantenpreislisten durchgeführt
werden müssen, möchte ich so die Möglichkeit schaffen, diese Arbeiten intern delegieren zu können. Dies ist
nur möglich wenn ich dies "Deppensicher" automatisieren kann.

Wenn Du das per fester Verknüpfung (siehe Frage oben) realisieren kannst, reduziert sich das Ganze auf ein Öffnen der Mastertabelle -> Daten werden automatisch aktualisiert (Vorliegen aktueller Lieferantendateien vorausgesetzt) -> Makro an Schaltfläche für 'Speichern einer Kopie unter' ...

Freundliche Grüße von der Insel - Mario
Bitte warten ..
Mitglied: bastla
21.04.2012 um 16:24 Uhr
Hallo onthetop79!

Eine Umsetzung Deiner Vorstellungen in VBA würde etwa so aussehen:
01.
Sub Import() 
02.
Set Ziel = ThisWorkbook 
03.
ZielDatei = Ziel.FullName 
04.
ZielStartSpalte = 1 'Eintrag in Mastertabelle ab Spalte A 
05.
ZielStartZeile = 2 'Eintrag in Mastertabelle ab Zeile 2 
06.
QuellStartZeile = 2 'Daten aus Quelltabelle lesen ab Zeile 2 
07.
QuellEndZeile = 2000 'Daten aus Quelltabelle lesen bis Zeile 2000 
08.
 
09.
For Each WB In Workbooks 'alle offenen Mappen durchgehen 
10.
    If WB.Name <> Ziel.Name Then 'Mastertabelle nicht verarbeiten 
11.
        'anhand der Vorgaben Import-Routine aufrufen 
12.
        Importieren WB.Worksheets(1), QuellStartZeile, QuellEndZeile, Ziel.Worksheets(1), ZielStartSpalte, ZielStartZeile 
13.
        WB.Close False 'Mappe schließen, ohne zu speichern 
14.
        Exit For 'nur erste Mappe verarbeiten 
15.
    End If 
16.
Next 
17.
Dateiname = "Import" 
18.
Eingabe = InputBox("Bitte den Namen für das Speichern der übernommenen Daten angeben!", "Speichern ...", Dateiname) 
19.
If Eingabe <> "" Then Dateiname = Eingabe 
20.
Ziel.SaveAs Dateiname, xlNormal 
21.
Workbooks.Open ZielDatei 
22.
'Ziel.Close 'falls die neue Datei automatisch geschlossen werden soll, ersten Apostroph entfernen 
23.
End Sub 
24.
 
25.
Sub Importieren(ByVal QT As Worksheet, ByVal QSZ As Long, ByVal QEZ As Long, ByVal ZT As Worksheet, ByVal ZS As Long, ByVal ZZ As Long) 
26.
i = 1 'mit der als 1. zu importierenden Spalte beginnen 
27.
With QT 
28.
    Do 
29.
        Set c = .Rows(QSZ - 1).Find(i, , xlValues, xlWhole) 'nach Spalte mit Überschrift 1 suchen 
30.
        If c Is Nothing Then Exit Do 'wenn Spaltennummer nicht gefunden wurde, ist der Import abgeschlossen 
31.
        'Zellen aus der gefundenen Spalte von Zeile "QuellStartZeile" bis Zeile "QuellEndZeile" in die Mastertabelle kopieren 
32.
        .Range(.Cells(QSZ, c.Column), .Cells(QEZ, c.Column)).Copy ZT.Cells(ZZ, ZS + i - 1) 'Zellen aus der gefundenen Spalte von Zeile 
33.
        i = i + 1 'Nummer für Importspalte hochzählen 
34.
    Loop 
35.
End With 
36.
End Sub
Dieses Makro zunächst in die Masterdatei einfügen und diese speichern (Dateityp ab Excel 2007: "Excel-Arbeitsmappe mit Makros").

Danach kann die Importdatei einfach geöffnet und bearbeitet werden. Angenommen habe ich, dass die Daten ab Zeile 2 beginnen (in Zeile 1 stehen die Spaltenüberschriften / Feldnamen) - falls nicht, Zeile 6 des Makros anpassen. In der Zeile über der ersten Datenzeile (also defaultmäßig Zeile 1) kannst Du dann ganz einfach die gewünschte Spaltenreihenfolge festlegen, indem Du die Überschriften durch die Zahlen 1, 2, 3 .. ersetzt. Spalten, die nicht übernommen werden sollen, behalten die bisherige Spaltenüberschrift.

Wenn Du dann das Makro ausführst, werden die Spalten in dieser vorgegebenen Reihenfolge in die Masterdatei (ab der in den Zeilen 4 und 5 des Makros angegebenen Position) übernommen. Danach wird nach dem neuen Dateinamen gefragt und unter diesem Namen gespeichert. Die neue Dateie (auf Wunsch - siehe Zeile 22) und die Importdatei werden geschlossen sowie die "Original"-Masterdatei wieder geöffnet.

Verarbeitet wird übrigens immer die erste gefundene offene Arbeitsmappe (aber natürlich nicht die Masterdatei) - es sollten daher nur die Masterdatei und die Importdatei beim Start des Makros geöffnet sein.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
gelöst Excel VBA - Inhalte und Dateiname von txt-Dateien automatisch in Excel importieren (2)

Frage von Booster07 zum Thema Microsoft Office ...

Webentwicklung
Zahlenwerte von Webseite nach Excel importieren (5)

Frage von AKChris zum Thema Webentwicklung ...

Batch & Shell
CSV-Datei nach Excel importieren (5)

Frage von mrvfbnummer2 zum Thema Batch & Shell ...

VB for Applications
gelöst VBA Excel Skript - Hilfe! (1)

Frage von Compu2017 zum Thema VB for Applications ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Windows Server

Exchange 2010 Active Directory und Windows Server 2016

(4)

Erfahrungsbericht von Herbrich19 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Internet
gelöst Mitarbeiter surft auf unerwünschter Seite - Wie damit umgehen? (41)

Frage von sabines zum Thema Internet ...

Netzwerke
Wie erstelle ich ein Intranet (19)

Frage von Leonardnet zum Thema Netzwerke ...

Netzwerke
VPN-Server einrichten PPTPD-Einrichtung gescheitert (15)

Frage von MIlexx zum Thema Netzwerke ...

LAN, WAN, Wireless
gelöst Eintägige Netzwerkunterbrechung trotz Backupleitung (15)

Frage von iAmbricksta zum Thema LAN, WAN, Wireless ...