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

Excel Liste mit vba auslesen und drucken

Frage Entwicklung VB for Applications

Mitglied: speedy132

speedy132 (Level 1) - Jetzt verbinden

23.02.2015, aktualisiert 25.02.2015, 1176 Aufrufe, 27 Kommentare, 3 Danke

Hallo miteinander,

Folgendes Problem:

Ich habe eine Mitarbeiterliste mit Unterweisungsplan. Jetzt möchte ich einzelne MA markieren evtl. durch ein X in einer Zelle und durch drücken auf einen Button sollen die Namen des MA nacheinander in ein Formular für Arbeitssicherheit oder Brandschutz an einer bestimmten Stelle eingefügt werden und sofort ausgedruckt werden. Also MA Max Muster wird mit einem X versehen und durch drücken auf den Button wird der Name evtl. noch Abteilung übernommen, im Formular an der entsprechenden Stelle eingetragen und sofort gedruckt. Danach der nächste MA usw. bis alle markierten ausgedruckt sind.

Habe bisher in Word einen Serienbrief erstellt und da die MA festgelegt. Aber es müsste doch auch in Excel möglich sein mittels vba dieses hinzubekommen.
Kann mir da jemand helfen….???

Herzlichen Dank
27 Antworten
Mitglied: 114757
23.02.2015 um 16:28 Uhr
Moin,
klar geht das alles, aber MS Access ist für solche Sachen (Reports) eigentlich wesentlich besser geeignet ...

Gruß jodel32
Bitte warten ..
Mitglied: speedy132
23.02.2015 um 16:42 Uhr
Hi,

habe nur die Access runtime drauf. Also keine Möglichkeit mit Access zu arbeiten.
Bitte warten ..
Mitglied: colinardo
23.02.2015, aktualisiert um 18:33 Uhr
Hallo speedy132, Willkommen auf Administrator.de!
Hier ein einfaches Beispiel an dem du dir die Vorgehensweise ab schauen kannst: create_word_reports_from_excel_264305.zip (Das Beispiel besteht aus einer Excel-Datei und einer Word-Vorlage, beide Dateien in ein Verzeichnis entpacken und die Excel-Datei öffnen)
Im Beispiel wählst du die Mitarbeiter aus, und klickst dann auf einen Button um daraus die Reports in Word zu drucken. Dazu wird der Status der Zeile durch das "X" ausgewertet, dann ein Word Dokument anhand eines Vorlagendokuments erstellt, darin die Textmarken durch die Daten aus Excel ersetzt und zum Schluss ausgedruckt.
Das ganze erfolgt unsichtbar für den User, bei Bedarf z.B. für Debugzwecke kannst du dies sichtbar schalten (siehe Code)
Weitere Kommentare sind im Code hinterlegt.

Wird zusätzliche Hilfe benötigt, kann dies nach Absprache via PM gegen eine Aufwandsentschädigung erfolgen.

Viel Erfolg.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Bitte warten ..
Mitglied: speedy132
24.02.2015 um 15:41 Uhr
Hi,

super herzlichen Dank.

Hat soweit alles funktioniert und ich habe es in einigen Dokumenten schon umgesetzt.
Jetzt stehe ich allerdings vor einen weiteren Problem...

Ich habe jetzt eine Vorlage erstellt in der ich die Textmarken mehrmals ansteuern möchte, da ich 5 Unterweisungsdokumente hintereinander in die richtige Reihenfolge gesetzt habe.
Die Tabellenzellen für den MA, Abteilung, Vorgesetzten habe ich mit einer Textmarke gesetzt (erst Textmarke erstellt und dann mit Querverweis Verweistyp Textmarke positioniert). Dabei kommen die Textmarken ja 5 mal vor.
Durch den Button in Excel steuer ich über vba ja den Zugriff auf das Dokument und den Ausdruck. Die Textmarken werden aber nicht gefüllt, bzw. nur die letzte Textmarke im Dokument...
Bitte warten ..
Mitglied: colinardo
24.02.2015, aktualisiert um 16:14 Uhr
Bei diesem Beispiel werden die Textmarken nach dem Befüllen entfernt, deswegen das Verhalten. Es gibt ja zwei Arten von Textmarken (Position und Range). Entweder du setzt das Bookmark erneut wie z.B. hiermit
01.
Dim rngBM As Range, strBookmark As String 
02.
'Name des Bookmarks 
03.
strBookmark = "NamederTextmarke" 
04.
'Range des Bookmarks speichern 
05.
Set rngBM = Bookmarks(strBookmark).Range 
06.
'Text des Bookmarks setzen 
07.
rngBM.Text = "BlaBla" 
08.
'Bookmark neu mit gleichem Namen erstellen 
09.
Bookmarks.Add strBookmark, rngBM
oder du nutzt stattdessen Formularfelder, welche sich mit der .Formfields() Collection ansprechen lassen. Diese lassen sich ebenfalls über Feldfunktionen verknüpfen.
FormFields("NameDesFeldes").Result = "Daten"
Grüße Uwe
Bitte warten ..
Mitglied: speedy132
24.02.2015 um 16:30 Uhr
Danke für die schnelle Antwort,

allerdings bekomme ich das damit überhaupt nicht hin. Weiss nicht wie ich das in dem bestehenden Code einbauen soll. Funktioniert nicht.....
Bitte warten ..
Mitglied: colinardo
24.02.2015, aktualisiert um 16:39 Uhr
Zitat von speedy132:
allerdings bekomme ich das damit überhaupt nicht hin. Weiss nicht wie ich das in dem bestehenden Code einbauen soll.
Funktioniert nicht.....
ok, na dann mal wieder zu Fuß

Hier der Ausschnitt aus dem Code ... / Zeilen 8 bis 11
01.
'..... 
02.
'... 
03.
For Each cell In rngSelection 
04.
    If LCase(cell.Value) = "x" Then 
05.
        'Neues Dokument von der Vorlage erstellen 
06.
        Set objDoc = objWord.Documents.Add(REPORT_TEMPLATE) 
07.
        'Textmarken durch Daten der Spalten in Excel ersetzen 
08.
        strBMName = "Name" 
09.
        Set rngBM = objDoc.Bookmarks(strBMName).Range 
10.
        rngBM.Text = .Range("A" & cell.Row).Value 
11.
        objDoc.Bookmarks.Add strBMName, rngBM 
12.
        ' ... usw für die anderen Bookmarks 
13.
         
14.
        'Dokument drucken 
15.
        objDoc.PrintOut 
16.
        'Dokument nicht speichern und schließen 
17.
        objDoc.Close False 
18.
    End If 
19.
Next 
20.
'.... 
21.
'...
Bitte warten ..
Mitglied: speedy132
24.02.2015 um 17:07 Uhr
also habe entsprechend daas ganze 4 mal in den code eingebaut für die 4 Textmarken.
Diese werden jetzt auch gefüllt, allerdings werden die Textmarken jetzt beim 2.ten Aufruf in Word doppelt beschrieben und beim 3.ten Aufruf 3xbeschrieben etc.
Ich denke da müsste irgendwo im Code etwas geschlossen werden...

strBMName = "Name"
Set rngBM = objDoc.Bookmarks(strBMName).Range
rngBM.Text = .Range("A" & cell.Row).Value
objDoc.Bookmarks.Add strBMName, rngBM

strBMOberAbteilung = "OberAbteilung"
Set rngBM = objDoc.Bookmarks(strBMOberAbteilung).Range
rngBM.Text = .Range("B" & cell.Row).Value
objDoc.Bookmarks.Add strBMOberAbteilung, rngBM

strBMVorgesetzter = "Vorgesetzter"
Set rngBM = objDoc.Bookmarks(strBMVorgesetzter).Range
rngBM.Text = .Range("D" & cell.Row).Value
objDoc.Bookmarks.Add strBMVorgesetzter, rngBM

'Textmarken durch Daten der Spalten in Excel ersetzen
strBMGeburtsdatum = "Geburtsdatum"
Set rngBM = objDoc.Bookmarks(strBMGeburtsdatum).Range
rngBM.Text = .Range("E" & cell.Row).Value
objDoc.Bookmarks.Add strBMGeburtsdatum, rngBM
Bitte warten ..
Mitglied: colinardo
24.02.2015, aktualisiert um 17:14 Uhr
Zitat von speedy132:
also habe entsprechend daas ganze 4 mal in den code eingebaut für die 4 Textmarken.
Diese werden jetzt auch gefüllt, allerdings werden die Textmarken jetzt beim 2.ten Aufruf in Word doppelt beschrieben
Ich weiß hier ja gar nicht was du genau machen willst bzw. vorhast. Und warum du ein Dokument mehrfach öffnest. In meinem Codebeispiel werden keine Dokumente gespeichert sondern nur zum Drucken befüllt und dann verworfen !!
Du lieferst einfach zu wenig Infos was du wie angepasst hast.

Für mehr Support siehe den Hinweis in meinem ersten Post.

Grüße Uwe
Bitte warten ..
Mitglied: speedy132
24.02.2015 um 17:22 Uhr
Eigentlich eine ganz einfache Geschichte...
Ich habe mehrere Word-Dokumente (Unterweiungspläne Brandschutz, Erste Hilfe etc.) in denen sollen an bestimmten Stellen die Daten aus Excel eingefügt werden.
Name, Abteilung, Vorgesetzter, Geburtsdatum.

In Word habe ich Textmarken erstellt und diese in den Tabellenzellen mit Hilfe des Querverweise zugeordnet.

Abteilung: {REF OberAbteilung}
Name: {REF Name}

In Excel habe ich eine Mitarbeiterliste und dort soll durch drücken auf den Button die Daten in die entsprechenden Textmarken in Word gesetzt werden und das Dokument wird dann ausgedruckt.

funktioniert ja auch fast, bis auf das jetzt bei den Textmarken die Daten dann 2x bzw 3x drin stehen.
Bitte warten ..
Mitglied: speedy132
24.02.2015 um 17:23 Uhr
Die Word Dokumente habe ich zu einem Dokument zusammengefasst...
Bitte warten ..
Mitglied: colinardo
24.02.2015, aktualisiert um 18:11 Uhr
In Word habe ich Textmarken erstellt und diese in den Tabellenzellen mit Hilfe des Querverweise zugeordnet.
bis auf das jetzt bei den Textmarken die Daten dann 2x bzw 3x drin stehen
D.h du möchtest jetzt alle Mitarbeiter in ein einzelnes Dokument einfügen ?? Dann muss das nämlich anders aufgebaut werden und kann so in der Art nicht funktionieren.
Für diesen Fall hier noch ein Beispiel: create_report_all_in_one_template_264305.zip

In deinem Eingangspost war ich davon ausgegangen das für jeden Mitarbeiter ein extra Dokument erstellt wird.
Zitat von speedy132:
im Formular an der entsprechenden Stelle eingetragen und sofort gedruckt. Danach der nächste MA usw. bis alle markierten ausgedruckt sind.

Und normalerweise werden Textmarken eine Position zugewiesen und nicht nur einfach erstellt, damit ließe sich das Verhalten erklären, wenn du alle an der selben stelle erstellt hast... Sieh dir einfach mein Demo-Dokument mal an und lass dir unter Einfügen > Texmarken die Markenpositionen anzeigen.
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 08:29 Uhr
Ist schon richtig, für jeden Mitarbeiter einen einzelnen Ausdruck bzw. ein extra Dokument.
Die Lösung ist ja schon greifbar nahe, du bist echt gut...

Also nochmal zur Erklärung.

Ein Dokument mit 5 Seiten.
Seite 1 Brandschutz:
eine Tabelle mit 2 spalten.
Spalte 1: Abteilung
Spalte 2: Textmarke {REF OberAbteilung}
nächste Zeile
Spalte 1: Name
Spalte 2: Textmarke {REF Name}

Seite 2 Erste Hilfe:
wieder die Tabelle mit 2 Spalten
Spalte 1: Abteilung
Spalte 2: Textmarke {REF OberAbteilung}
nächste Zeile
Spalte 1: Name
Spalte 2: Textmarke {REF Name}

Seite 3 Energie:
wieder die Tabelle

Seite 4 Arbeitssicherheit:
wieder die Tabelle

Die Textmarken sollen jetzt mit den Daten des MA aus Excel gefüllt werden
Abteilung: Verwaltung
Name: Max Muster

Durch den Button möchte ich das die Textmarken in Word mit dem MA gefüllt werden (alle 5 Seiten mit einem MA), dann ausgedruckt werden und anschließend der nächste markierte MA usw.
Bitte warten ..
Mitglied: colinardo
25.02.2015, aktualisiert um 09:41 Uhr
OK das ist mal eine vernünftige Erklärung, warum nicht gleich so
Ohne viel Worte zu verlieren ,sieh dir dazu diese Demo an .. .(Druckfunktion etc. habe ich zur Demo mal auskommentiert, so dass du dir die Reports ansehen kannst)
excel_create_word_report_with_links_264305.zip

Grüße Uwe
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 11:09 Uhr
herzlichen Dank,

aber irgendwie bin ich zu blöd dafür....

Also ich habe das Array angepasst:
arrBookmarks = Array("txtName", "txtAbteilung", "txtVorgesetzter", "txtGeburtsdatum")

arrSpalten = Array("A", "B", "D", "E") - Dort sind die notwendigen Daten enthalten

Habe das angepasst Set rngSelection = .Range("F3:F" & .Cells(Rows.Count, 4).End(xlUp).Row)

Soweit gut...

Jetzt in word:
Habe dort die 4 Textmarken erstellt
txtAbteilung
txtVorgesetzter
txtVorgesetzter
txtGeburtsdatum

Dannn diese Textmarken über Querverweis den entsprechenden Positionen zugeordnet.

Abteilung {REF txtAbteilung}
etc.

Sowohl auf Seite 1 als auch in Seite 2 etc.

Beim ausführen kommt es jetzt zu einer Fehlermeldung "Anwednungs- oder objektdefinierter Fehler"

Ich glaube der Fehler liegt in Word bei den Textmarken. Wie hast du die in Word die Verknüpfung auf die obigen Felder hinbekommen?
Wie hast du [txtName] angelegt? einfach geschrieben oder ist das über ein Feld erstellt ????
Bitte warten ..
Mitglied: colinardo
LÖSUNG 25.02.2015, aktualisiert um 12:12 Uhr
Wie hast du [txtName] angelegt? einfach geschrieben oder ist das über ein Feld erstellt ????
Den Text [txtName] markiert, dann auf den Tab Einfügen > Textmarke einen Namen vergeben, feddich!

Der Text im Dokument ist beliebig, dient nur der Darstellung...
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 12:12 Uhr
Du bist echt i.O....

Super und herzlichen Dank für die Unterstützung.

Auf allen 5 Seiten steht jetzt der Mitarbeiter mit Abteilung und Vorgesetzten....

Ich denke somit ist mein Problem gelöst


DANKE
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 13:44 Uhr
ich hätte dazu noch eine Frage...

Wenn ich jetzt in Excel die Liste durchgehe muss ich ja bei jedem MA ein X eintragen.
Wie geht es, dass beim drücken der linken Maustaste in dieser Spalte ein x automatisch erscheint???
Bitte warten ..
Mitglied: colinardo
25.02.2015, aktualisiert um 14:40 Uhr
Zitat von speedy132:
Wie geht es, dass beim drücken der linken Maustaste in dieser Spalte ein x automatisch erscheint???
indem du folgenden Code in den Codeabschnitt des Arbeitsblattes einfügst (Rechtsklick auf den Tab des Arbeitsblattes > Code anzeigen). Der Range bei dem das passieren soll, ist natürlich in Zeile 2 an deine Spalte anzupassen ...
01.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
02.
    If Not Application.Intersect(Range("D3:D10000"), Target) Is Nothing Then 
03.
        If Target.Cells(1).Value = "" Then 
04.
            Target.Cells(1).Value = "X" 
05.
        ElseIf Target.Cells(1).Value = "X" Then 
06.
            Target.Cells(1).Value = "" 
07.
        End If 
08.
     End If 
09.
End Sub
Grüße Uwe
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 14:13 Uhr
soweit gut...
hat geklappt...

wenn ich jetzt in der Spalte einen Bereich markiere um mit der Entf-Taste die gesetzten X zu löschen dann kommt es zu einem Fehler.
Da müsste wohl noch ein Zusatz rein....
Bitte warten ..
Mitglied: colinardo
25.02.2015 um 14:41 Uhr
Sorry, korrigiert ... war gerade abgelenkt ....
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 14:50 Uhr
OK, Danke aber wo ist die Korrektur?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 25.02.2015, aktualisiert um 15:31 Uhr
Zitat von speedy132:

OK, Danke aber wo ist die Korrektur?
im letzten Post geändert müssen das hier ja nicht bis zum Exzess mit Code zuschütten ....
Bitte warten ..
Mitglied: speedy132
25.02.2015 um 15:31 Uhr
super, herzlichen Dank
Bitte warten ..
Mitglied: speedy132
26.02.2015 um 11:46 Uhr
Ich habe da noch eine andere Sache....

wie kann ich Excel dazu bringen, das wenn ich die Kalenderwoche eines Datums ermittel, er mir dann automatisch den Zeitraum dieser Kalenderwoche angibt.

Beispiel:

Zelle A1 = heute() (aktuelles Datum)
Zelle A2 = Kalenderwoche (A1) - 9
Jetzt möchte ich darunter die Angabe haben:
Zelle A3: 23.02 - 27.02.2015

Was muss ich in A3 scheiben?
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.02.2015, aktualisiert um 14:54 Uhr
Zitat von speedy132:
Ich habe da noch eine andere Sache....
Eigentlich gehört das dann auch in einen neuen Thread...
=TAG(A1-WOCHENTAG(A1;3))&"."&MONAT(A1-WOCHENTAG(A1;3))&"."&JAHR(A1-WOCHENTAG(A1;3))&" - "& TAG(A1-WOCHENTAG(A1;3)+4)&"."&MONAT(A1-WOCHENTAG(A1;3)+4)&"."&JAHR(A1-WOCHENTAG(A1;3)+4)
Kürzer kannst du es dir machen, indem du die wiederkehrenden Elemente entweder in eine zwischenzelle oder einen Namen mit den Formeln definierst.
Bitte warten ..
Mitglied: speedy132
27.02.2015 um 08:58 Uhr
Hallo Uwe,

ich habe einen neuen Thread gestartet. Da hat mir Eisbein schon einen Hilfestellung gegeben, aber evtl weisst du da noch etwas besseres bzw. eine andere Lösung.

Kannst du da mal schauen:
Excel Liste mit Datenüberprüfung anlegen und anschließend selektieren ????

Herzlichen Dank
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Windows Netzwerk
gelöst Excel Liste soll Partnerfirma zugänglich gemacht werden (3)

Frage von Knorkator zum Thema Windows Netzwerk ...

VB for Applications
gelöst VBA: Wert von einer Website (pdf-Dokument) auslesen und in Excel kopieren (16)

Frage von Stern123 zum Thema VB for Applications ...

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 ...