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
GELÖST

Aus einer ausgewählten Zeile nur bestimmte Werte in eine neue Datei rauskopieren

Frage Entwicklung VB for Applications

Mitglied: Zorbas81

Zorbas81 (Level 1) - Jetzt verbinden

31.08.2009, aktualisiert 13:31 Uhr, 6642 Aufrufe, 18 Kommentare

Hallo liebe Excel-Profis,

momentan verzweifle ich gerade an einer Aufgabe die folgendermaßen lautet:

Eine Teile-Tabelle mit vielen Spalten und noch mehr Zeilen…..

Durch anklicken einer Zeile sollen die Werte aus Spalte 3 und Spalte 5 in eine bereits existierende Excel-Datei kopiert werden. Wert aus Spalte 3 soll in die neue Datei in Zelle A1 kopiert werden und der Wert aus Spalte 5 in Zelle B2 der neuen Datei.

Diese „neue“ Datei ist ja bereits beschrieben, und es soll sich immer wieder diese gleiche Datei öffnen, nach dem man eine Zeile der ersten Excel-Datei ausgesucht hat.

Über jegliche Hilfe bin ich Euch sehr dankbar.

Viele Grüße
Alex
Mitglied: bastla
31.08.2009 um 18:28 Uhr
Hallo Zorbas81!

Das Auslesen der Zellen ließe sich (ohne zu berücksichtigen, ob sich in der gewählten Zeile überhaupt Daten befinden) grundsätzlich so umsetzen :
01.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
02.
Zeile = Target.Row 
03.
MsgBox Cells(Zeile, 3).Value & vbCrLF & Cells(Zeile, 5).Value 
04.
End Sub
Dieser Code ist dabei dem Tabellenblatt zuzuordnen und nicht in ein Modul zu legen - dazu einfach nach Rechtsklick auf das Registerblatt der Tabelle per "Code anzeigen" in den VBA-Editor wechseln.

Wie es dann allerdings weitergehen soll, ist mir nicht ganz klar - zum Einen erwähnst Du eine "bereits existierende Excel-Datei", dann wieder soll "in die neue Datei" kopiert werden - was genau hast Du also vor?

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
01.09.2009 um 10:51 Uhr
Hallo Bastla,

der Wahnsinn, wie hilfsbereit du hier bist, Respekt!!
Und VIELEN DANK im Voraus für deine Hilfe (mal wieder ).

So und jetzt zu meinem Mini-Problemchen:

In der Teile-Tabelle sind ca. 400 unterschiedliche Teile untereinander aufgelistet.
In Spalte 3 steht zu jedem Teil die Benennung und in Spalte 5 zu jedem Teil die Versionsnummer. (evtl. noch Materialart usw. aber das kann ich ja dann nach belieben hinzufügen).

Hierzu muss jetzt pro Teil eine eigene Excel-Datei erstellt werden, in dem die Benennung und die Version enthalten sein muss. Somit ca. 400 einzelne Excel-Dateien.

Die Idee ist jetzt, Zeit zu sparen, in dem in der Urpsrungsdatei das jeweilige Teil (somit die entsprechende Zeile) angeklickt wird, und automatisch sich die neue Excel-Datei öffnet und die Benennung und Version hineinkopiert werden.
Somit wird das schneller befüllt und das spart unheimlich viel Zeit, denn das muss öfter gemacht werden im Laufe des Jahres.

Thats it!

Die einzige Sache die es dabei zu beachten gilt ist, dass diese neu erstellten Dateien alle gleich aussehen müssen, und hierzu habe ich ein Layout entworfen, und die Werte „Benennung“ und „Version“ sollen immer in die gleichen Zellen (A1 und B2) hineinkopiert werden.
Wie schafft man es jetzt, dass man eine Zeile anklickt, und sich immer die Datei mit meinem Layout öffnet, in der die Werte hineinkopiert werden müssen?
Kann man diese Datei irgendwo abspeichern, auf die das Makro dann zugreift?
So muss das doch gehen, oder?

Ich hoffe ich habe es einigermaßen verständlich erläutert Bastla…: -)

Freue mich über deine Antwort…

Viele Grüße aus Stuttgart,
Alex
Bitte warten ..
Mitglied: bastla
01.09.2009 um 11:00 Uhr
Hallo Alex!

Was spräche denn dagegen, alle 400 Dateien gleich in einem Scriptdurchlauf zu erstellen, anstatt sie "erst auf Anforderung" zu erzeugen?

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
01.09.2009 um 11:40 Uhr
Hallo Bastla,

klar, super Idee.
Aber was ist dann mit dem Dateinamen, unter dem die neu erstellte Datei abgespeichert wird?
Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?

Also, man gibt ein zielordner an, und es werden 400 Dateien automatisch abgespeichert.
Jede Datei hat somit die individuelle Benennung und Versionsnummer.

Ist sowas möglich?
Das würde ja dann ratzfatz gehen und spart unheimlich viel Zeit

Grüße
Alex
Bitte warten ..
Mitglied: bastla
01.09.2009 um 22:13 Uhr
Hallo Alex!
Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?
Man wird können ...

Welches Format haben Versionsnummer und Benennung - lassen sich daraus unmittelbar Dateinamen erzeugen, oder müssen zB Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden?
Dürfen/sollen übrigens bereits bestehende Dateien (beim nächsten Scriptlauf) überschrieben werden, bzw kann es zu Namenskollisionen kommen und wie soll dann verfahren werden?

Grüße
bastla
Bitte warten ..
Mitglied: Biber
01.09.2009 um 22:51 Uhr
Moin Alex und bastla,
Zitat von bastla:
> Kann man automatisch die Versionsnummer und Benennung als Dateinamen abspeichern lassen?
Man wird können ...
Aber nicht um jeden Preis müssen...
Welches Format haben Versionsnummer und Benennung - lassen sich
daraus unmittelbar Dateinamen erzeugen, oder müssen zB
Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden?
Dürfen/sollen übrigens bereits bestehende Dateien (beim
nächsten Scriptlauf) überschrieben werden, bzw kann es zu
Namenskollisionen kommen und wie soll dann verfahren werden?
Diese beiden angedeuteten Problemfelder sind ja nur die Spitze des Eisbären.

Eine Datenkonsistenz in einem Datenwust von einer Excel-Mutter-Tabelle (mit in der Praxis mehreren "aufzuhebenden" Versionen pro Jahr) und 400+x Unter-Exceltabellen durch ein Mini-IF-THEN-ELSE-Regelwerk zu gewährleisten.... hey! Soll ich mich dazu ausführlicher äußern?

Diese Datensammlung und -verwaltung schreit nach einer relationalen/normaliesierten DatenBANKlösung.
Mit 1:1 oder (mit Versionspflege) 1:n-beziehungen, Referentieller Integrität etc.

Oder gibt es irgendwelche Details, die das ausschließen?
@alex:
  • Was für Details außer Benennung und Versionsnr sollen den noch in diese Detail-Sheets reingeklimpert werden?
  • Wie sieht denn das Gesamtbild bzw. der ganze abzubildende Prozess aus?
  • Ist denn der Datenfluss so wie beschrieben wirklich eine Einbahnstrasse (von Stammdatentabelle zu Detail-Daten) oder fließen auch Daten zurück?

Ich mische mich nur ein, weil Du zwar momentan konstruktive Lösungsansätze bezogen genau auf Deine Fragen bekommst, aber nicht jede beantwortete Frage auch wirklich eine "Lösung" sein muss.

Grüße
Biber
Bitte warten ..
Mitglied: Zorbas81
02.09.2009 um 09:26 Uhr
Guten Morgen Bastla und Biber,

WOW, Danke!!! wie Ihr Euch damit beschäftigt. Weiß das sehr zu schätzen!

@bastla:
Folgende Attribute gibt es, die kopiert werden müssten (diesmal ganz exakt ):

Version: 4.001
Sachnummer: A23874563
Trafotyp: Spiegelteil
Benennung: Kotflügel
Material: Stahl
Materialdicke: 1,7
Bearbeiter: Mustermann
Verantwortung EP: Musterfrau

Und im Dateinamen soll immer stehen: Bsp: „A23874563_4.001_Spiegelteil“

Für die Dateinamensvergabe müssen somit keine Sonderzeichen ausgefiltert oder Namensbestandteile gekürzt werden!

Und zu deiner zweiten Frage:
„Dürfen/sollen übrigens bereits bestehende Dateien (beim nächsten Scriptlauf) überschrieben werden, bzw kann es zu Namenskollisionen kommen und wie soll dann verfahren werden?“

Kann der Zielordner nicht jedes Mal neu bestimmt werden?
Dann gebe es ja keinen Konflikt mit Überschreibungen und Namenskollisionen dürfte es dann auch nicht geben, da jedes Teil in dieser Kombination nur einmal vorkommt.

@ Biber:

Zu deiner ersten Frage: „Wie sieht denn das Gesamtbild bzw. der ganze abzubildende Prozess aus“?

Stammliste öffnen – Makro starten und Zielordner auswählen – und nun werden ca. 400 Excel Dateien im Zielordner abgespeichert mit dem jeweils zusammengesetzten Dateinamen (siehe oben).

Das wars, mehr nicht!

Zur zweiten Frage: „Ist denn der Datenfluss so wie beschrieben wirklich eine Einbahnstrasse (von Stammdatentabelle zu Detail-Daten) oder fließen auch Daten zurück?“

Jep, nur in eine Richtung. Die Dateien werden erstellt und damit ist die Sache erledigt


Danke im Voraus für Eure Bemühungen...

Viele Grüße
Alex
Bitte warten ..
Mitglied: Zorbas81
02.09.2009 um 12:57 Uhr
Hi Bastla,

Antwort siehe ganz unten .
Bitte warten ..
Mitglied: Zorbas81
04.09.2009 um 10:31 Uhr
Hallo Bastla,

hast du mich vergessen? ))
oder bist im wohlverdienten Urlaub?


Viele Grüße

Alex
Bitte warten ..
Mitglied: bastla
04.09.2009 um 15:05 Uhr
Hallo Alex!

Sorry - aber Letzteres schon gar nicht - ich hoffe, am Wochenende etwas mehr Zeit zu haben.
Nur, um den Ablauf nochmals klar zu stellen:

Du hast eine Vorlage, in deren Zellen A1 und B2 der Wert aus Spalte 3 bzw Spalte 5 der jeweiligen Zeile eingefügt werden soll.

Gespeichert werden soll dann unter einem zusammengesetzten Dateinamen, dessen Teile aus welchen Spalten zu entnehmen sind?

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
04.09.2009 um 16:27 Uhr
Ich grüße dich Bastla

der Einfachheit halber hatte ich zu Beginn geschrieben A1 und B2.
Ich wollte nicht, dass mir alles vorgekaut wird

In Wirklichkeit sind die Daten in ganz anderen Spalten, aber das könnte ich ja dann alleine umändern

Aber nachfolgend schreibe ich es dir mal ganz exakt auf, der Vollständigkeit halber

Daten der Stammdatei:

Version: 4.001 Spalte 14
Sachnummer: A23874563 Spalte 13
Trafotyp: Spiegelteil Spalte 64
Benennung: Kotflügel Spalte 16
Material: Stahl Spalte 41
Materialdicke: 1,7 Spalte 42
Bearbeiter: Mustermann Spalte 21
Verantwortung EP: Musterfrau Spalte20

und in meine bereits existierende Datei (Zieldatei) sollen diese Werte in folgende Zellen kopiert werden:

Version: 4.001 Spalte: 2 Zeile: 5
Sachnummer: A23874563 Spalte: 2 Zeile: 3
Trafotyp: Spiegelteil Spalte: 2 Zeile: 6
Benennung: Kotflügel Spalte: 2 Zeile: 4
Material: Stahl Spalte: 4 Zeile: 3
Materialdicke: 1,7 Spalte: 4 Zeile: 4
Bearbeiter: Mustermann Spalte: 4 Zeile: 5
Verantwortung EP: Musterfrau Spalte: 6 Zeile: 4

So, das sind die exakten Werte Bastla

Und der Dateiname setzt sich aus Sachnummer, Version und Trafotyp zusammen.
Die Werte kann man doch entweder aus der Stammliste entnehmen oder aus der fertig befüllten Zieldatei, oder?
Die exakte Angabe der Spalte/Zeile hab ich ja oben geschrieben (von beiden Dateien).

Und so ungefähr sollte der Dateiname aussehen: Bsp: „A23874563_4.001_Spiegelteil.xls

Ausser dem Zielordner, wo die Dateien hineingespeichert werden, muss man doch auch die Zieldatei auswählen, oder?
Denn diese enthält ja noch andere Daten, die ja nicht angefasst werden! Oder kann man das nur mit einer Pfadangabe machen?

Wie dem auch sei, ich wünsche Dir ein wunderschönes Wochenende Bastla.
Tausend Dank für die Mühe, die du da hineinsteckst. Respekt!

Wenn du Mal in Stuttgart vorbeikommst, würde Dir liebendgern ein/zwei Bierchen ausgeben.

Bis nächste Woche dann...

Viele Grüße
Alex
Bitte warten ..
Mitglied: bastla
04.09.2009 um 22:57 Uhr
Hallo Alex!
Ausser dem Zielordner, wo die Dateien hineingespeichert werden, muss man doch auch die Zieldatei auswählen, oder?
Denn diese enthält ja noch andere Daten, die ja nicht angefasst werden! Oder kann man das nur mit einer Pfadangabe machen?
Eigentlich war ich bisher davon ausgegangen, dass es eine Vorlage (wäre das die "Zieldatei"?) gibt, die mit den entsprechenden Werten befüllt und dann unter dem (aus einigen dieser Werte) zusammengesetzten Dateinamen in einem vorgegeben Ordner gespeichert werden soll ...

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
05.09.2009 um 11:00 Uhr
Schönen guten Morgen Bastla!

Ich hoffe ich habe dich nicht verwirrt

Damit wir uns mit den Dateinamen nicht verwurschteln, nachfolgend eine Erläuterung

Datei mit allen 400 Zeilen (Quelle): "Stammliste"
Zieldatei vor der Überschreibung: "Vorlage"
Zieldatei nach der Überschreibung: "Zieldatei"
Ordner, in dem alle 400 Dateien landen: "Zielordner"


Die "Vorlage" hat ja bereits beschriebene Zellen, und die sollen bleiben. Für alle 400 Zieldateien ist es die gleiche Vorlage!

Die "Zieldatei" ist das Resultat, nachdem das Makro die "Vorlage" mit den Werten aus der "Stammliste" befüllt hat (Bsp: „A23874563_4.001_Spiegelteil).

Das wars schon!


Ich hoffe ich konnte das einigermaßen verständlich erläutern

Ein schönes Wochenende noch Bastla!

Grüße aus Stuttgart,

Alex
Bitte warten ..
Mitglied: bastla
05.09.2009 um 19:57 Uhr
Hallo Alex!

Etwas zum Testen: Speichere das folgende Script in einem Modul der "Stammliste.xls" und starte es von dieser Datei aus:
01.
Sub ErzeugeEinzeldateien() 
02.
 
03.
Vorlage = "D:\Vorlage.xls" 
04.
Zielordner = "D:\Einzeldateien" 
05.
Set Quelle = ThisWorkbook.Worksheets("Tabelle1") 
06.
AbZeile = 2 
07.
 
08.
Zieldatei = Array("B3", "B5", "B6") 
09.
 
10.
Zuordnungen = Array( _ 
11.
"14>B5", _ 
12.
"13>B3", _ 
13.
"64>B6", _ 
14.
"16>B4", _ 
15.
"41>D3", _ 
16.
"42>D4", _ 
17.
"21>D5", _ 
18.
"20>F4" _ 
19.
20.
 
21.
ZieldateiMax = UBound(Zieldatei) 
22.
Workbooks.Open Filename:=Vorlage 
23.
Zeile = AbZeile 
24.
Check = CInt(Split(Zuordnungen(0), ">")(0)) 
25.
Do While Quelle.Cells(Zeile, Check) <> "" 
26.
    For Each Zuordnung In Zuordnungen 
27.
        Z = Split(Zuordnung, ">") 
28.
        Range(Z(1)).Value = Quelle.Cells(Zeile, CInt(Z(0))).Value 
29.
    Next 
30.
    Zieldateiname = Range(Zieldatei(0)) 
31.
    For i = 1 To ZieldateiMax 
32.
        Zieldateiname = Zieldateiname & "_" & Range(Zieldatei(i)) 
33.
    Next 
34.
     
35.
    ActiveWorkbook.SaveAs Filename:=Zielordner & "\" & Zieldateiname & ".xls" 
36.
    Zeile = Zeile + 1 
37.
Loop 
38.
ActiveWorkbook.Close 
39.
MsgBox "Fertig." 
40.
End Sub
Um noch Optimierungspotenzial zu lassen wird der Zielordner im Script als Konstante angegeben und es wird auch nicht geprüft, ob er bereits existiert (was allerdings Voraussetzung für das Speichern darin ist ).

Weitere Annahmen: Die Stammdaten stehen in der "Tabelle1" der Stammliste und die "Vorlage.xls" ist so gespeichert, dass beim Öffnen bereits die gewünschte Tabelle aktiv ist.

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
06.09.2009 um 15:34 Uhr
Hallo Bastla!

WOW! Mir fehlen die Worte, wirklich!!
Das ist wirklich unglaublich was du hier drin leistest! (zum wiederholten Mal sogar!)

Ich freue mich wahnsinnig das morgen früh gleich auszuprobieren.
Hab diese Dateien bei der Arbeit leider nur. Aber sobald ich das getestet habe schreibe ich hier wieder rein...

Nochmals tausend DANK! Bastla! RESPEKT!

Wünsche Dir noch einen schönen Sonntag...
Bis morgen früh
Ich melde mich mit einem Feedback ob alles geklappt hat

Viele liebe Grüße
Alex
Bitte warten ..
Mitglied: Zorbas81
07.09.2009 um 13:48 Uhr
Einen wunderschönen Guten Tag Bastla!

Oh ja, meine gute Laune hat einen Grund, und zwar ist dein Code einsame Spitzenklasse!!! Du bist der Wahnsinn!!
Danke,Danke Danke !!! Es funktioniert EINWANDFREI!!!!!!!!!

Die Lösung mit den Konstanten ist Prima!
Natürlich könnte man hier auch eine Art Abfrage machen, bei der man dann den Zielordner jedes mal auswählen kann,
aber mein Gott, eine eierlegende Wollmilchsau brauchen wir ja für so eine Aufgabe auch nicht!

Jedenfalls hast Du mir zum x-ten Mal wieder wahnsinnig geholfen Bastla, ich verneige mich vor Dir! Respekt !

Und nochmals VIEEELEN DANK!!

Wünsche Dir noch einen guten Start in die Woche!!!

Viele liebe Grüße

Alex
Bitte warten ..
Mitglied: bastla
07.09.2009 um 14:08 Uhr
Hallo Alex!

Ich freu' mich ja auch, wenn Du Dich freust , aber trotzdem noch eine Erinnerung an Bibers Einwände:

Ohne im Detail zu wissen, was Du mit den einzelnen Tabellen so bewerkstelligst - eigentlich sieht das nach einer typischen Datenbankanwendung aus (wo Du dann anstelle von 400 vermutlich nur sehr kurze Zeit aktuellen Einzeldateien nur jeweils ein Formular / einen Bericht benötigen würdest und darin immer den aktuellen Datenstand vorfinden könntest) ...

Grüße
bastla
Bitte warten ..
Mitglied: Zorbas81
07.09.2009 um 16:23 Uhr
Hallo Bastla!

Klar, Ihr habt Recht, aber die Herrschaften hier brauchen keine Berichte, sondern diese einzelnen Excel-Dateien, da diese weiterbearbeitet und an verschiedene Personen verschickt werden.

Somit ist die jetzige Lösung "PERFEKT" ! Thx again ;)

Bin glücklich und zufrieden )

In diesem Sinne Bastla, machs gut...

Viele Grüße
Alex
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Batch & Shell
Bash Script soll neue Datei erzeugen (2)

Frage von SpeakerST zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...