PDA

Vollständige Version anzeigen : Kommentartexte aus externen Textdateien beziehen


okais
29.08.2017, 14:13
Hallo,
ich habe mehrere Kommentar. In diese soll nun automatisch ein Text aus einer externen Textdatei ausgegeben werden. Dies ist nötige das der Text je nach auswahl der dropdown liste variiert.
Hat jemand eine ahnung wie man so etwas programmieren kann?

Dasselbe würde ich gerne mit Bildern tun. Sprich das in den Kommentaren Bilder, welche in einenm externen Ordner abgelegt werden, angezeigt werden. Dies dient der Platzersparniss.

Danke für eure Hilfe.

MfG
Okais

Nepumuk
29.08.2017, 16:02
Hallo,

ich hab dir mal eine grundsätzlich funktionierende Version erstellt. Weitere Hilfe gibt es nur, wenn du eine Mustermappe, eine Textdatei mit Beispieltexten und ein paar Beispielbilder hoch lädst.

okais
30.08.2017, 07:35
Guten Morgen,
danke für die schnelle Antwort. Das beschreibt mein Problem schon mal sehr weit, aber leider noch nicht ganz.
Ich hab dir mal einen Ordner angehängt. Wäre dir sehr verbunden wenn du dir darüber ein bisschen den Kopf zerbrechen könntest. :D
Hoffe du kannst verstehen was ich in der Datei versuche zu erklären ^^
104647

Nepumuk
01.09.2017, 07:27
Hallo Okais,

hat ein bisschen gedauert aber jetzt ist es fertig. Teste mal:

okais
01.09.2017, 12:58
Hey, vielen Dank für deine Mühe. Ich kann nach vollziehen was du programmiert hast und hat in meiner Datei sehr gut funktioniert.
Nur habe ich jetzt folgendes Problem, dass ich Teilweise in meiner Dropdownliste aufwahlen habe zu denen keine Textdatei existiert. Hier wird mir dann leider ein Fehler angegeben... Wie kann ich diese Fehlermeldung ignorieren?
Desweitern würde ich doch gern die Bilder in einer separaten Spalte angezeigt bekommen. Wie ich die For-Schleife hierbei umschreiben muss ist mir ein Rätsel...
Anbei nochmal eine Datei wie es aussehen soll:eek:
Vielen Vielen Dank
MfG
104712

Nepumuk
01.09.2017, 15:09
Hallo Okais,

das mit der nicht vorhandenen Textdatei ist kein Problem. Wie soll das das mit den Bildern funktionieren? Soll in Zeile 22 dann das Bild 22 angezeigt werden oder gibt es einen anderen Zusammenhang?

okais
04.09.2017, 07:51
Ja genau, in Zeile 10 Bild 10, in Zeile 11 Bild 11 usw.
Die Zeilen variieren aber je nachdem wie groß dsa Dokument werden soll, sprich es kann einmal nur bis Zeile 2 oder doch bis Zeile 20 gehen.
Es können aber wieder wie bei den Texten die Bilder fehlen.
Gruß Okais

Nepumuk
05.09.2017, 12:01
Hallo Okais,

teste mal:

okais
05.09.2017, 12:22
Hallo Nepomuk,
nochmal danke für deine Geduld. Ich hab jetzt 2 Tage Zeit gehabt und bin auf die gleiche Lösung wie du gekommen.
Nun habe ich das Problem, dass ich in manchen Zellen das Wort "Bereich:" drinstehen habe. Der ":" lässt das Makro stoppen, da so kein Dateipfad angegeben werden kann.
Weißt du wie man sowas ignorieren kann?
Mit "ON Error Resume Next" stürzt mir immer Excel ab...
MfG

Nepumuk
05.09.2017, 13:46
Hallo Okais,

gibt es dazu eine Textdatei?

okais
05.09.2017, 14:17
Nein.
Es läuft jetzt so ab:
1: Dateipfad wird generiert (je nach Zeile unterschiedlich)
2: Prüfung ob zu diesem Dateipfad eine Textdatei existiert
3: Wenn ja, dann wird der Komemntar damit ausgefüllt und wenn nein, dann wird der kommentar gelöscht

Jetzt ist es bei den Zellen in denen "Bereich:" steht, es nicht mal zu kontrolle kommt, sondern bei der Generation des Pfades zur Fehlermeldung kommt. Dies liegt an dem Doppelpunkt. Es darf kein Doppelpunkt in einem Dateipfad stehen...
Nun müsste ich entweder diesen ignorieren (leider keine Ahnung wie ich das mache) oder in meinem Fall nur alle 4 Zeilen einen Kommentar einfügen (da weiß ich ebenfalls nicht weiter). Bisher hat dein/mein Programm jede Zelle in der Spalte 2 durchgearbeitet.
Hast du hierfür einen Tipp? :D

Du hast mir übrigens extrem weiter geholfen^^

Nepumuk
05.09.2017, 15:07
Hallo Okais,

ändere die Prozedur so:

<div style="background-color:#FFFFFF; border-width:2px; border-style: groove; border-color:#ff9966; padding:4px;"><nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><span style="color:#000080"; >Option</span> <span style="color:#000080"; >Explicit</span><br /><br /><b><span style="color:#000080"; >Private</span> <span style="color:#000080"; >Sub</span> Worksheet_Change(<span style="color:#000080"; >ByVal</span> Target <span style="color:#000080"; >As</span> Range)</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> objRange <span style="color:#000080"; >As</span> Range, objCell <span style="color:#000080"; >As</span> Range<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> strPath <span style="color:#000080"; >As</span> <span style="color:#000080"; >String</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> strKommentText <span style="color:#000080"; >As</span> String, astrValues() <span style="color:#000080"; >As</span> <span style="color:#000080"; >String</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> ialngIndex <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> intFileNumber <span style="color:#000080"; >As</span> <span style="color:#000080"; >Integer</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = Intersect(Target, Columns(1))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objRange <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >For</span> Each objCell In objRange<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strPath = ThisWorkbook.Path & <span style="color:#800000"; >"Bild"</span> & objCell.Value & <span style="color:#800000"; >".gif"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> Dir$(strPath) &lt;&gt; vbNullString <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> objCell.Comment <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Call</span> objCell.AddComment<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Call</span> objCell.Comment.Shape.Fill.UserPicture(PictureFile:=strPath)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objCell.Comment <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Call</span> objCell.Comment.Delete<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Next</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = Intersect(Target, Columns(2))<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objRange <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >For</span> Each objCell In objRange<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strPath = ThisWorkbook.Path & <span style="color:#800000"; >""</span> & CleanFilename(objCell.Value) & <span style="color:#800000"; >".txt"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> Dir$(strPath) &lt;&gt; vbNullString <span style="color:#000080"; >Then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> objCell.Comment <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Call</span> objCell.AddComment<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ialngIndex = 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Call</span> Reset<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intFileNumber = FreeFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Open</span> strPath <span style="color:#000080"; >For</span> <span style="color:#000080"; >Input</span> <span style="color:#000080"; >As</span> #intFileNumber<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Do</span> <span style="color:#000080"; >Until</span> EOF(intFileNumber)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Input</span> #intFileNumber, strKommentText<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ialngIndex = ialngIndex + 1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Redim</span> <span style="color:#000080"; >Preserve</span> astrValues(1 <span style="color:#000080"; >To</span> ialngIndex)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;astrValues(ialngIndex) = strKommentText<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Loop</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Close</span> #intFileNumber<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Call</span> objCell.Comment.Text(Text:=Join(astrValues, vbNewLine))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Else</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> <span style="color:#000080"; >Not</span> objCell.Comment <span style="color:#000080"; >Is</span> <span style="color:#000080"; >Nothing</span> <span style="color:#000080"; >Then</span> <span style="color:#000080"; >Call</span> objCell.Comment.Delete<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Next</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Set</span> objRange = <span style="color:#000080"; >Nothing</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >End</span> <span style="color:#000080"; >If</span><br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /><br /><b><span style="color:#000080"; >Private</span> <span style="color:#000080"; >Function</span> CleanFilename(<span style="color:#000080"; >ByVal</span> pvstrFilename <span style="color:#000080"; >As</span> <span style="color:#000080"; >String</span>) <span style="color:#000080"; >As</span> <span style="color:#000080"; >String</span></b><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> lngAsciiCode <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >For</span> lngAsciiCode = 0 <span style="color:#000080"; >To</span> 31<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, Chr$(lngAsciiCode), vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Next</span><br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"="</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"/"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"["</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"]"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, Chr$(34), vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >":"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >";"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >","</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"?"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"*"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >""</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"&lt;"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"&gt;"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;pvstrFilename = Replace(pvstrFilename, <span style="color:#800000"; >"|"</span>, vbNullString)<br />&nbsp;&nbsp;&nbsp;&nbsp;CleanFilename = pvstrFilename<br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Function</span></b><br /></span></nobr></div>

okais
06.09.2017, 12:18
Super Danke, hat gut funktioniert. Habe jetzt keine Probleme mehr und mei Programm steht.
Danke Nepumuk!!