Microsoft Excel

Herbers Excel/VBA-Archiv

Schleife gesucht

Betrifft: Schleife gesucht von: Chris
Geschrieben am: 08.11.2014 00:49:31

Hallo Liebe VBA Freunde. Ich habe ein Makro, dass eine html-Datei erzeugt. Das Grundgerüst dafür habe ich in einem Forum gefunden. Das funktioniert auch alles super. Jetzt will ich aber den Inhalt von 500Excelzellen in dem html-code unterbringen (im Excel sind das 500 lokale Links zu Grafiken, die dann im html als solche angezeigt werden sollen). Das funktioniert auch mit folgendem Code, allerdings nur für die ersten 4 und nicht 500 Zellen, da ich hoffe, dass man das auch mit einer Schleife lösen kann, habe ich mir noch erspart, 500 mal einen string zu definieren, zuzuweisen und auszugeben.

Dim a As String
Dim b As String
Dim c As String
Dim d As String

a = Range("b1").Value
b = Range("b2").Value
c = Range("b3").Value
d = Range("b4").Value

fsinhalt.write a
fsinhalt.write b
fsinhalt.write c
fsinhalt.write d
Ich würde mich über Hilfe freuen. Vielen Dank und gute Nacht!

  

Betrifft: 1. gehe ich davon aus, dass du uns einige ... von: Luc:-?
Geschrieben am: 08.11.2014 02:04:38

…CodeZeilen vom PgmAnfang unterschlagen hast, Chris,
denn es fehlt u.a. Deklarierung und Setzen von fsinhalt, sowie die Open- und Close-Befehle für den Text-Stream.
2. benötigst du eigentlich nur eine Variable und einen Write-Befehl, wenn du mit zwischen­geschalteten vbLf arbeiten würdest.
3. würde ich die Erzeugung der Links nicht dem Selbstlauf überlassen (falls du das nicht auch wieder weggelassen hast).
4. kann das dann alles zyklisch vorbereitet wdn, indem du For Each xZ In Range("B1:B500") … Next xZ benutzt und xZ.Value dann geschickt (ggf mehrfach) in einen als Constante vorbereiteten HTML-Link-Text einfügst (ggf mit Replace) und den dann einer einzigen Text­Variablen unter Verwendung von vbLf als Verbindungs­Zeichen hinzu­fügst (keine Angst, die Variable kann elend lange Texte aufnehmen!).
5. musst du abschließend nur noch den Variablen­Inhalt in die geöffnete Datei schreiben und diese schließen.
Da du Etliches weggelassen hast, nehme ich an, dass du mit meiner Beschreibung zurechtkommst… ;-]
Morrn, Luc :-?


  

Betrifft: AW: 1. gehe ich davon aus, dass du uns einige ... von: Chris
Geschrieben am: 08.11.2014 07:02:01

Hallo Luc,
vielen Dank für Deine Antwort. Ich hatte gehofft, dass der Codeausschnitt reicht. Hier nun der Gesamte Code. Kurz noch zum Verständnis. Das vorherige Kopieren von Tabelle 1 auf Tabelle2 dient dazu, dass Tabelle zwei nur Zellen enthält, die auf Tabelle 1 geflitert wurden. Die Prozedur zum Erzeugen der html Dtaei ist wie gesagt nicht mein geistiges Werk, sodern aus einem Forum. Vielen Dank für weitere Hilfe

Sub makro1()

Worksheets("Tabelle2").Cells.Clear
Sheets("Tabelle1").Select
Range("A2:A2000").Select
    Selection.Copy
    Sheets("Tabelle2").Select
    Range("A1").Select
    ActiveSheet.Paste

Sheets("Tabelle2").Select

Dim fsDatei As Object
Dim fsinhalt As Object

Set fsDatei = CreateObject("Scripting.FileSystemObject")
fsDatei.CreateTextFile "C:\Users\Desktop\test03.html"

Set fsDatei = fsDatei.getfile("C:\Users\Desktop\test03.html")

Set fsinhalt = fsDatei.OpenAsTextStream(2, -2)

fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf & vbLf

Sheets("Tabelle1").Select

Dim a As String
Dim b As String
Dim c As String
Dim d As String

a = Range("b1").Value
b = Range("b2").Value
c = Range("b3").Value
d = Range("b4").Value

fsinhalt.write a
fsinhalt.write b
fsinhalt.write c
fsinhalt.write d

fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf
fsinhalt.write "" & vbLf
fsinhalt.write ""
fsinhalt.Close

End Sub



  

Betrifft: Dass das eine HTML-Datei wdn soll, erkennt ... von: Luc:-?
Geschrieben am: 08.11.2014 17:27:45

…man nur am DateiNamen test03.html, Chris,
sonst ist nichts HTML-Typisches zu erkennen, weder HEAD noch BODY oder die Einbindung von Links mit <a href="linkAdresse">linkAnzeigeText</a>! So wird das nur eine TextDatei, die der Browser viell in eine gültige HTML-Datei transferiert, wenn er gut ist.
Hatte ich nicht von einer Variablen geschrieben, die mittels Verbindung der einzelnen HTML-gerechten Links per vbLf (⇐Zeilenumbruch!) alle aufnehmen kann…? Und was ist so schwer daran, jetzt noch den Zyklus hier einzubauen? Wenn du meinst, auf eine HTML-gerechte LinkForm verzichten zu können, weil das alles auch so fktioniert, musst du doch nur die reinen xZ.Values mittels Verbindung über vbLf aneinanderreihen. Falls dir das nicht gefällt, kannst du auch auf dieses Aneinander­reihen verzichten und innerhalb des Zyklus gleich schreiben, also fsinhalt.write xZ. Dann muss nach dem Zyklus nur noch fsinhalt.Close folgen.
Was dein vollständiges Pgm jetzt zeigt, hatte ich (natürlich bis auf das Copy-Vorspiel) schon vorausgesetzt, allerdings erwartet, dass noch irgendwas mit den Links passiert. Da das nicht der Fall ist, wird daraus nur eine einfache Auflistung. Ob die dann auch linkfähig ist…? Mit HTML hat das jedenfalls nichts zu tun. Wenn man eine HTML-Seite mit VBA erzeugen will, sollte man sich mit beidem auskennen. Und der Einsatz von zyklischer Verarbeitung („Schleifen“) gehört zu den Pgmierungs­Grund­lagen und damit jedem Grundkurs.
Ein Bsp für die Erzeugung einer HTML-Seite (hier allerdings als Vorstufe für die Erzeugung einer komprimierten HTML-Datei .chm) war früher bei Klick auf den ForumsKopf-Button XL2CHM einsehbar. Seit einiger Zeit fktioniert der aber (nur bei mir?) nicht mehr → evtl mal den ForumsBetreiber fragen…
Gruß + schöWE, Luc :-?


  

Betrifft: AW: 1. gehe ich davon aus, dass du uns einige ... von: Chris
Geschrieben am: 09.11.2014 08:35:32

For Each xZ In Range("a1:a500")
a = xZ.Value
fsinhalt.write a
Next xZ


Danke, ohne den vielen, verwirrenden Text drum herum hätte ich es womöglich auch früher hinbekommen :) Das macht die Prozedur doch um einiges schlanker.

Gruß, Chris


  

Betrifft: Der war deine Schuld, da nicht klar war, ... von: Luc:-?
Geschrieben am: 09.11.2014 17:06:56

…wie dadurch/-raus eine HTML-Datei entstehen soll, Chris;
übrigens fsinhalt.write xZ.Value reicht auch.
Luc :-?


  

Betrifft: AW: Schleife gesucht von: Chris
Geschrieben am: 08.11.2014 21:00:46

Hallo Luc,
ich verstehe leider nicht, was Du mir mit Xz usw sagen willst. Der html Code, den Du vermisst kommt übrigens aus den Zellen, die eingelesen werden (b1, b2, etc.). Dort ist in jeder Zelle ein html-code, der eine bestimmte Grafik ausgibt und einen Zeilensprung einfügt.


Ich werde es aber jetzt einfach so machen, dass ich 500 mal schreibe, das ist mit etwas Excel Autoausfüllen und Txt-Editor über suchen und ersetzen ja sehr schnell gemacht. Ich hoffe, nur, dass das die Prozedur nicht komplett lahmlegt. Sicherlich kann man den html text auch einmal definieren und nur die Grafik1 jgp, Grafik2 jpg, etc. in den Zellen definieren, aber ich bin ja schon mal froh, dass die Prozedur das macht, was ich will.

Vielleicht noch bei Interesse beinhalten die ca. 500 Grafiken Ausschnitte aus einem Gesetztestext, von denen aber über die Seletion nur bestimmte rausgefiltert werden sollen und als html ausgegeben werden sollen. Da ich diesen Vorgang sehr oft mit verschiedensten Filterungen machen muss, habe ich mich für die Variante entschieden, das zu automatisieren. Am Ende hängen an der Filterung noch weitere features, die das Makro aber nicht interessieren sollen.

Man wählt quasi vorn über Daten, Filtern z.B. nur §5, §7 und §289 aus und bekommt dann ein zusammenhängendes Dokument, mit genau den drei Gesetzesausschnitten nahtlos untereinander um es ausdrucken zu können.

Wie gesagt, danke für die Hilfe, ich hoffe, dass ich es mit der oben beschriebenen Methode auch sinnvoll hinbekomme.


Schönes We


  

Betrifft: Ich hatte dir dafür einen einfachen 'For Each'- von: Luc:-?
Geschrieben am: 09.11.2014 00:15:57

…Zyklus angegeben, der die LaufVariable xZ verwendet, die im Zyklus die jeweilige Zelle referenziert, Chris;
das kann man alles in der VBE-Hilfe und auf diversen Plattformen im Internet nachlesen. Auch vom Forumsbetreiber stammt (ursprünglich) ein entsprd WikiBook.
Luc :-?


 

Beiträge aus den Excel-Beispielen zum Thema "Schleife gesucht"