Bilddatei aus Userform oder Datenbank über string zusammensetzten
Hallo zusammen,
ich habe keine Ahnung wie ich mein Problem in der Überschrift genau beschreiben soll. Die ausführliche Problemstellung hier:
Es gibt ein Unserform in dem jede Menge Bilder liegen, die einfach img1 - x benannt wurden.
Jetzt möchte ich diese BIlder aus dem Userform in ein Bild, das IMG genannt wird, im Tabellenblatt unterbringen.
Prinzipiell also:
Tabelle1.IMG.Picture = usrfrmBild.img1 .Picture
Das funktioniert sogar soweit.
Nun liegen im Userform ja Bilder 1 - X
Über eine Datenbankabfrage ergibt sich nun, dass für den Anwendungsfall Bild Nummer 4 genommen werden soll:
In der Datenbank ist jedoch nur die BildID (1-X) hinterlegt.
Ich muss nun also irgendwie mit der über ein Recordset abgegriffenen BildID 4 das Userform-Bild abgreifen:
Ich habe versucht den rechten Teil als String zusammen zu führen - geht auch logischerweise (strImage = "usrfrmBild.img" & rst.Fields("BildID").value &" .Picture"), aber die Zuweisung an Tabelle1.IMG.Picture schlägt damit fehl.
Natürlich könnte ich jetzt eine Case Anweisung oder zig IF's nehmen, ich wollte das aber irgendwie eleganter lösen, weil beim hinzufügen von BildID's in der Datenbank (x+1), bzw. dann auch in dem Userform die realen Bilder (IMG x+1) dann auch jedesmal die nachfolgende Anweisung mit ausgebaut werden müsste, was den Code im Laufe der Zeit immer länger werden lässt.
...
Ich hoffe ich konnte mein Problem verständlich beschreiben und ihr habt eine Lösung...
Danke sehr für eure Mühe!
ich habe keine Ahnung wie ich mein Problem in der Überschrift genau beschreiben soll. Die ausführliche Problemstellung hier:
Es gibt ein Unserform in dem jede Menge Bilder liegen, die einfach img1 - x benannt wurden.
Jetzt möchte ich diese BIlder aus dem Userform in ein Bild, das IMG genannt wird, im Tabellenblatt unterbringen.
Prinzipiell also:
Tabelle1.IMG.Picture = usrfrmBild.img1 .Picture
Das funktioniert sogar soweit.
Nun liegen im Userform ja Bilder 1 - X
Über eine Datenbankabfrage ergibt sich nun, dass für den Anwendungsfall Bild Nummer 4 genommen werden soll:
Tabelle1.IMG.Picture = usrfrmBild.img4 .Picture
In der Datenbank ist jedoch nur die BildID (1-X) hinterlegt.
Ich muss nun also irgendwie mit der über ein Recordset abgegriffenen BildID 4 das Userform-Bild abgreifen:
Tabelle1.IMG.Picture = usrfrmBild.img & rst.Fields("BildID").value
Ich habe versucht den rechten Teil als String zusammen zu führen - geht auch logischerweise (strImage = "usrfrmBild.img" & rst.Fields("BildID").value &" .Picture"), aber die Zuweisung an Tabelle1.IMG.Picture schlägt damit fehl.
Natürlich könnte ich jetzt eine Case Anweisung oder zig IF's nehmen, ich wollte das aber irgendwie eleganter lösen, weil beim hinzufügen von BildID's in der Datenbank (x+1), bzw. dann auch in dem Userform die realen Bilder (IMG x+1) dann auch jedesmal die nachfolgende Anweisung mit ausgebaut werden müsste, was den Code im Laufe der Zeit immer länger werden lässt.
IF rst.Fields("BildID").value = 1 then
Tabelle1.IMG.Picture = usrfrmBild.img1 .Picture
ElseIf rst.Fields("BildID").value = 2 then
Tabelle1.IMG.Picture = usrfrmBild.img2 .Picture
ElseIf rst.Fields("BildID").value = X then
Tabelle1.IMG.Picture = usrfrmBild.imgX .Picture
ElseIf rst.Fields("BildID").value = X+1 then
Tabelle1.IMG.Picture = usrfrmBild.imgX+1 .Picture
...
Ich hoffe ich konnte mein Problem verständlich beschreiben und ihr habt eine Lösung...
Danke sehr für eure Mühe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 373017
Url: https://administrator.de/forum/bilddatei-aus-userform-oder-datenbank-ueber-string-zusammensetzten-373017.html
Ausgedruckt am: 04.04.2025 um 08:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
meine Glaskugel sagt, das es sich um Access-VBA handelt. In dem Fall schau Dir mal die EVAL-Funktion an.
Grüße
Friemler
meine Glaskugel sagt, das es sich um Access-VBA handelt. In dem Fall schau Dir mal die EVAL-Funktion an.
Grüße
Friemler
Moin.
EVAL... pfui :P
Schau mal hier: http://www.ozgrid.com/VBA/control-loop.htm
wenn ich mich recht Erinnere kannst du auch direkt über Me.Controls["ControlName"] auf das Control im Form zugreifen.
lg,
Slainte
EVAL... pfui :P
Schau mal hier: http://www.ozgrid.com/VBA/control-loop.htm
wenn ich mich recht Erinnere kannst du auch direkt über Me.Controls["ControlName"] auf das Control im Form zugreifen.
lg,
Slainte
Schon klar,
EVAL
ist Quick 'n Dirty und wenn Fehler im auszuführenden Code sind wird es haarig. Aber um einen Einzeiler auszuführen ist das doch wohl tolerabel... Grüße
Friemler
Schon klar, EVAL ist Quick 'n Dirty und...
Kennst du den kleinen Bobby Tables? Das ist der Neffe vom Eval
Kenn' ich, aber der Vergleich hinkt etwas. Beim guten Bobby wird User Input in eine SQL-Anweisung "injiziert", beim hiesigen Anwendungsfall wird das Ergebnis einer Datenbankabfrage zur Erzeugung von VBA-Code verwendet. Wenn die Datenbank natürlich "bösartigen" VBA-Code als Ergebnis für die Abfrage eine Bild-ID zurückliefert, hat man als Entwickler sowieso etwas falsch gemacht...
Hallo,
in Excel gibt es keine
Ich mache nicht viel mit VBA und kann somit nicht sagen, ob folgendes funktioniert. Ansonsten mal auf der von @SlainteMhath verlinkten Seite stöbern.
Evtl. muss zuerst noch per Typecast in den passenden Datentyp konvertiert werden, damit Du die
Erklärungsversuch: In der Form gibt es eine Collection
Grüße
Friemler
in Excel gibt es keine
EVAL
-Anweisung, die mit der von Access vergleichbar wäre. Du musst also die Lösung von @SlainteMhath nehmen.Ich mache nicht viel mit VBA und kann somit nicht sagen, ob folgendes funktioniert. Ansonsten mal auf der von @SlainteMhath verlinkten Seite stöbern.
visuelleDarstellung.ImgAbHa.Picture = usrfrmBild.Controls("img" & rst.Fields("BildID").value).Picture
Evtl. muss
usrfrmBild.Controls("img" & rst.Fields("BildID").value)
Picture
-Eigenschaft auch benutzen kannst.Erklärungsversuch: In der Form gibt es eine Collection
Controls
, über die alle Bedien- bzw. Steuerelemente (eben die Controls) per Name angesprochen werden können (der Name kann als Index für die Collection verwendet werden). Da der Name als String angegeben werden muss, kann er dynamisch zur Laufzeit "zusammengebaut" werden.Grüße
Friemler