![]() |
|
|
Banner und Co. |
![]() |
Ads |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
![]() Neuer Benutzer |
![]() Hallo Zusammen,
ich hätte folgendes Programm zu schreiben. Bin zwar kein blutiger Anfänger aber noch ziemlich unerfahren. Folgendes Problem: ich hab eine Powerpoint Datei mit 270 Seiten bei der auf jeder Seite eine Textfeld mit Teilenummer ist. Diese Teilenummer bekomme ich aus einer Exceldatei mit 270 Zeilen. Jetzt bekomme ich 5 Wochen später eine Exceldatei mit 280 Zeilen und eine paar aktualisierten Teilenummern. Nun möchte ich die Teilenummern von der PPT Datei und der neuen Excel Datei vergleichen. Sollte Sie vorhanden sein würde ich diese Folie in eine neue PPT-Datei 1 zu 1 kopieren wollen. Sollte die Teilenummer von der Excel nicht in der PPT-Datei vorkommen soll eine neue Folie erstellt werden und sollte eine Teilenummer nur in der PPT-Datei aber nicht mehr in der Excel Datei vorkommen soll die Seite gelöscht werden. Also was ich konkret brauche ist. Textfeldervergleich von PPT und Excel Duplizieren von Folien Löschen von Folien Erstellen einer neuen Folie Ich weiß ist sehr viel aber wäre Dankbar für ein paar Tipps zumindest zu eine paar Sachen ![]() Grüße Sammy |
![]() |
![]() ![]() |
![]() |
#2 |
![]() MOF Profi |
![]() Hallo,
du hast zumindest Mut, einen Versuch wäre es wert. Lade bitte in pptx und eine passende xlsx hoch. Alle Texte mit Ausnahme der Art.-Nr können durch Phantasie-Texte ersetzt werden, aber die Anzahl der shapes in ppt und falls mehrzeilig, auch das, sollten übereinstimmen. 2-3 slides werden reichen. Da es in ppt keinen Rekorder mehr gibt, ist VBA "etwas ungemütlich". mfg |
![]() |
![]() ![]() |
![]() |
#3 |
Threadstarter
![]() ![]() Neuer Benutzer |
![]() Hallo,
des eine wäre die "alte" PPT Datei (man sieht nur die Teilenummer) des andere wäre die Upgedatete Excel Datei mit 2 Zusätzlichen Teilen. Die beiden schon Vorhanden Seiten dürfen nicht verändert werden (da sind normal noch Bilder und alles dabei). und für die 2 neuen sollen neue Seiten erstellt werden. Grüße Sammy Geändert von AnfängerSammy (11.10.2018 um 12:58 Uhr). |
![]() |
![]() ![]() |
![]() |
#4 |
![]() MOF Profi |
![]() Hallo Sammy,
wer hat den diesen Präsentation, insbesondere die Textfelder konzipiert? Der nachfolgende Code sollte für alle Slides die Art.-Nr. auslesen und im Debug-Fenster anzeigen. Lasse den Code im Einzelschrittmodus F8 laufen, damit du sofortFehler erkennen kannst. Nur wenn dieser Test erfolgreich ist, kann es weiter gehen. Code: 'Type 19, 17 Sub Te1() With ActivePresentation For i = 1 To .Slides.Count For j = 1 To .Slides(i).Shapes.Count If .Slides(i).Shapes(j).Type = msoTextBox Then Debug.Print i, .Slides(i).Shapes(j).TextFrame2.TextRange.Text Exit For End If Next j Next i End With End Sub |
![]() |
![]() ![]() |
![]() |
#5 |
![]() Neuer Benutzer |
![]() Hallo Sammy,
Du beschreibst 4 verschieden Aufgabe. Also zerlege diese doch in VB-Code. 1. Textfeldervergleich von PP und XL Verbindung zu XL um die Daten auszulesen. XL.Daten in Variable speichern(Feld, eigenen Type oder Collection). PP Folien auslesen (wie Fennek11 beschrieben) aber auch in PP.Daten Variable speichern. Vergleichen der Teilenummer mit (If XL.daten = PP.Daten then... oder celect Case). Je nach Ergebnis werden dann folge Funktion ausgeführt. Call Duplizieren_von_Folien(folie as Slide) Call Löschen_von_Folien(folie as Slide) Call Erstellen_ einer_ neuen_Folie() Gruß Harald |
![]() |
![]() ![]() |
![]() |
#6 |
![]() MOF Profi |
![]() Hallo,
nach einigen Tests hoffe ich, alle notwendigen Komponenten zu haben. Hier der Code zum Übertrage der Daten von Excel: Code: Sub Daten_aus_Excel() Dim XL As Object Dim WB As Object Set XL = CreateObject("Excel.Application") XLS = ActivePresentation.Path & "BeispielExcel.xls" Set WB = XL.workbooks.Open(XLS) Ar = WB.sheets("Daten").Columns(1).specialcells(2) WB.Close 0 XL.Quit End Sub Insgesamt ist die fehlende Rückmeldung des Fragestellers eine Zumutung!. mfg |
![]() |
![]() ![]() |
![]() |
#7 |
![]() Neuer Benutzer |
![]() Hallo Fennek11
Beim Testen ist mir aufgefallen das der Aufbau der Tabelle überladen ist. Warum ein Textfeld in einer Tabelle positionieren? Spalte1 = Bezeichnung, Spalte2 = Werte aus Excel Das währe in VBA viel einfacher auszuwerten. Das Textfeld zu benennen ist ja eine gute Idee, aber beim kopieren - neue Folie, erstellt PP ein neues Textfeld und der Name ist dann wieder Textfeld xx. In Deinem Code hast Du jetzt die Teilenummern in ar kopiert. Da es eine Variant Variable ist, ist es ein Datenfeld. ar(zeile,spalte) Das wird aber wohl nicht ausreichen. Die Teilenummer wird zum Vergleich benötigt. Sollte aber die Folie kopiert werden, fehlen ja noch die weiteren Daten(Teilebenennung, Einsatztermin ect.). Zum Testen ist es aber OK. Nur irgendwie sollen die Daten ja weiter verarbeitet werden. Vielleicht so: Code: Option Explicit Sub Start() Dim ar As Variant ' Datenfeld mit Teilenummern Dim slid As Slide, teilNrPP As String Set slid = ActivePresentation.Slides(1) ar = Daten_aus_Excel teilNrPP = TextBoxFinden(slid) End Sub 'Sub Daten_aus_Excel() Function Daten_aus_Excel() As Variant Dim ar As Variant Dim XL As Object Dim WB As Object Dim XLS As String Set XL = CreateObject("Excel.Application") XLS = ActivePresentation.Path & "BeispielExcel.xls" Set WB = XL.workbooks.Open(XLS) ar = WB.sheets("Daten").Columns(1).specialcells(2) WB.Close 0 XL.Quit Daten_aus_Excel = ar End Function ' Findet die erste! TextBox in Folie. ' Rückgabe Inhalt der TextBox Function TextBoxFinden(slid As Slide) As String Dim i As Long For i = 1 To slid.Shapes.Count If slid.Shapes(i).Type = msoTextBox Then Exit For End If Next TextBoxFinden = slid.Shapes(i).TextFrame.TextRange.Text End Function Grüße Harald |
![]() |
![]() ![]() |