17.10.2017, 11:53
Hallo,
ich sitze an einer Tabelle die nach Eingabe einer Nummer Bilder einfügt.
Vom Prinzip hab ich das Ganze mit meinen quasi nicht vorhandenen VBA-Kenntnissen auch hinbekommen, leider gibt es aber noch einige Fehler/Schwachstellen die ich gerne ausbügeln würde.
Grobes Prinzip: Man kann in die Zellen B3:B6 eine Zeichenkombination eingeben wodurch im Tabellenblatt die zugehörigen Bilder an bestimmten Positionen eingefügt werden (die jeweiligen Bildlinks holt sich das Makro aus den Zellen D1:G1).
Soweit so gut, das habe ich mit 2 Modulen hinbekommen.
Nun aber treten folgende Fehler auf:
-Schreibt man etwas in die Zellen B3:B6, wird der Fehler 13 gemeldet ("Typen unverträglich")
Nach beenden des Debuggers und erneuter Eingabe wird das Bild dann allerdings eingefügt.
-Löscht man einen der Einträge aus B3:B6, kommt Laufzeitfehler 1004 ("Die Insert-Eigenschaft des Picture-Objects kann nicht zugeordnetet werden")
-Sind beispielsweise die Felder B3:B5 schon ausgefüllt und man fügt etwas in B6 ein wird jedes Bild viermal eingefügt.
Wünschenswert wäre es zusätzlich, dass die Bilder gelöscht werden, sobald in der jeweiligen B3:B6-Zelle nichts steht. Ich habe gelesen dass sowas prinzipiell mit "ActiveSheet.Pictures.Delete" möglich ist - habe aber keine Ahnung wo und wie ich das in meine Makros einbauen müsste.
Ich habe mal beispielhaft eine kleine Mappe angefügt, in der das Prinzip deutlich wird.
Hier noch die beiden Makros als Text:
Steht direkt in der Tabelle:
Als Modul:
PS: Excel-Version 2003
ich sitze an einer Tabelle die nach Eingabe einer Nummer Bilder einfügt.
Vom Prinzip hab ich das Ganze mit meinen quasi nicht vorhandenen VBA-Kenntnissen auch hinbekommen, leider gibt es aber noch einige Fehler/Schwachstellen die ich gerne ausbügeln würde.
Grobes Prinzip: Man kann in die Zellen B3:B6 eine Zeichenkombination eingeben wodurch im Tabellenblatt die zugehörigen Bilder an bestimmten Positionen eingefügt werden (die jeweiligen Bildlinks holt sich das Makro aus den Zellen D1:G1).
Soweit so gut, das habe ich mit 2 Modulen hinbekommen.
Nun aber treten folgende Fehler auf:
-Schreibt man etwas in die Zellen B3:B6, wird der Fehler 13 gemeldet ("Typen unverträglich")
Nach beenden des Debuggers und erneuter Eingabe wird das Bild dann allerdings eingefügt.
-Löscht man einen der Einträge aus B3:B6, kommt Laufzeitfehler 1004 ("Die Insert-Eigenschaft des Picture-Objects kann nicht zugeordnetet werden")
-Sind beispielsweise die Felder B3:B5 schon ausgefüllt und man fügt etwas in B6 ein wird jedes Bild viermal eingefügt.
Wünschenswert wäre es zusätzlich, dass die Bilder gelöscht werden, sobald in der jeweiligen B3:B6-Zelle nichts steht. Ich habe gelesen dass sowas prinzipiell mit "ActiveSheet.Pictures.Delete" möglich ist - habe aber keine Ahnung wo und wie ich das in meine Makros einbauen müsste.
Ich habe mal beispielhaft eine kleine Mappe angefügt, in der das Prinzip deutlich wird.
Hier noch die beiden Makros als Text:
Steht direkt in der Tabelle:
Zitat:Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("G2") Then Call Bildvariabel
If Target = Range("G3") Then Call Bildvariabel
If Target = Range("G4") Then Call Bildvariabel
If Target = Range("G5") Then Call Bildvariabel
End Sub
Als Modul:
Zitat:Sub Bildvariabel()
Dim url
Dim urla
Dim urlb
Dim urlc
Sheets("Start").Select
url = Range("D1").Value
urla = Range("E1").Value
urlb = Range("F1").Value
urlc = Range("G1").Value
ActiveSheet.Pictures.Insert(url).Select
With Selection
.top = Range("B13").top
.left = Range("B13").left
.Width = Range("A1:O1").Width
.height = .Width * 3 / 3
End With
ActiveSheet.Pictures.Insert(urla).Select
With Selection
.top = Range("X13").top
.left = Range("X13").left
.Width = Range("A1:O1").Width
.height = .Width * 3 / 3
End With
ActiveSheet.Pictures.Insert(urlb).Select
With Selection
.top = Range("B61").top
.left = Range("B61").left
.Width = Range("A1:O1").Width
.height = .Width * 3 / 3
End With
ActiveSheet.Pictures.Insert(urlc).Select
With Selection
.top = Range("X61").top
.left = Range("X61").left
.Width = Range("A1:O1").Width
.height = .Width * 3 / 3
End With
End Sub
PS: Excel-Version 2003