Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bilder einfügen laut Pfad

Bilder einfügen laut Pfad
11.11.2020 12:12:13
Thomas
Hallo!
Ich nutze seit langem diesen VBA Code um aus einer Spalte N (hier steht der Pfad) Bilder in die Spalte O einzufügen. Das funktioniert auch super, aber leider nur "28 Bilder auf einen Schlag". Nun muss ich aber 5000 Bilder einfügen und so ist das etwas unpraktisch. Gibt es da eine Möglichkeit um mehr Bilder in einem Rutsch einzufügen?

Private Sub Worksheet_Change(ByVal Target As Range)
'* H. Ziplies                                     *
'* 24.11.07                                       *
'* erstellt von Hajo.Ziplies@web.de               *
'* http://Hajo-Excel.de/
Dim StBild As String                                                ' Variable für Bildname
Dim InI As Integer                                                  ' Schleifenvariable
Dim RaBereich As Range                                              ' Bereich der  _
Wirksamtkeit
Dim RaZelle As Range                                                ' Zelle die in der  _
Schleife bearbeitet wird
'   Bereich der Wirksamkeit
Set RaBereich = Range("n2:n200000")
Set RaBereich = Intersect(RaBereich, Range(Target.Address))         ' nur die Zellen Prüfen  _
_
_
die im überwachten Bereich liegen
If Not RaBereich Is Nothing Then                                    'falls nicht gefunden    _
_
_
wird sub verlassen
For Each RaZelle In RaBereich                                   ' Schleife über alle  _
veränderten Zellen im überwachten Bereich
Application.EnableEvents = False                            ' Reaktion auf Eingabe   _
_
_
abschalten
'           Text "kein Bild" löschen
RaZelle.Offset(0, 1) = ""
Application.EnableEvents = True                             ' Reaktion auf Eingabe   _
_
_
einschalten
StBild = "Bild " & RaZelle.Address(False, False)            ' Bildname erstellen
'           altes Bild löschen von jinx
For InI = ActiveSheet.Shapes.Count To 1 Step -1
If ActiveSheet.Shapes(InI).Name = StBild Then
ActiveSheet.Shapes(InI).Delete
Exit For
End If
Next
If RaZelle.Value  "" Then                                 ' es wurde ein  _
Dateiname eingegeben
'               Bildname
StBild = StPfad & Format(RaZelle.Value) & ""
If Dir(StBild) = "" Then                                ' Prüfen ob Datei  _
vorhanden
Application.EnableEvents = False                    ' Reaktion auf Eingabe   _
_
_
abschalten
Target.Offset(0, 1) = "kein Bild"
Application.EnableEvents = True                     ' Reaktion auf Eingabe   _
_
_
einschhalten
Else
'                   einfügen ohne select von  Bert Körn
'                   Ausdruck.AddPicture(FileName, Verknüpfung, in Mappe speichern,
'                   Pos. Links, Pos. Oben, Breite, Höhe)
'                   von Klausimausi64 Bildname
'                   erstes Offset Pos. Links 0 Zeilen und eine Spalte nach rechts
'                   zweites Offset Pos. Oben 0 Zeilen tiefer und 0 Spalten nach rechts
With ActiveSheet.Shapes.AddPicture(StBild, True, True, RaZelle.Offset(0, 1). _
_
_
Left + 1, _
RaZelle.Offset(0, 0).Top + 1, Width:=ActiveCell.Width - 2, Height:=  _
_
_
ActiveCell.Height - 2)
.OnAction = "Bild_BeiKlick"         ' Makro im Modul BeiKlick
.Name = "Bild " & RaZelle.Address(False, False) ' Bildname festlegen
.Placement = xlMoveAndSize ' von Zell-Position und -Größe abhängig
End With
End If
End If
Next RaZelle
End If
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bilder einfügen laut Pfad
11.11.2020 12:43:20
Tobias
Hallo Thomas,
auf den ersten Blick sehe ich nichts warum das auf 28 Bilder auf einen Schlag begrenzt sein sollte.
Gibt er denn einen Fehler oder hört er einfach auf?

Set RaBereich = Intersect(RaBereich, Range(Target.Address))

Den Bereich finde ich komisch, aber bin mir unsicher wie dein Worksheet genau aussieht.
Schöne Grüße
Tobias
AW: Bilder einfügen laut Pfad
11.11.2020 12:49:56
Thomas
Hi!
Danke für die schnelle Antwort! Der Bereich ist nicht von mir, das ist vom Verfasser.
In meinem Worksheet stehen in Spalte N 5000 Pfade, die werden über eine Formel aus Zelle A1 und Spalte M zum Pfad kombiniert. Ich markiere dann 50 Zellen in Spalte N und kopiere hier die Formel rein, das VBA tickert dann nach unten durch und hört dann nach 28 Bildern auf. Eine Fehlermeldung kommt da leider keine ...
Sonst noch eine Idee?
SG Thomas
Anzeige
AW: Bilder einfügen laut Pfad
11.11.2020 13:08:16
Tobias
Was passiert denn so?
Set RaBereich = Intersect(RaBereich, Range("N2:N100")

AW: Bilder einfügen laut Pfad
11.11.2020 13:15:50
Thomas
da kommt: Fehler beim Kompilieren: Syntaxfehler
da fehlt nur noch ne klammer hinten dran. owt
11.11.2020 13:22:59
ralf_b
AW: Bilder einfügen laut Pfad
11.11.2020 13:24:27
Tobias
Eine klammer ) fehlt ... sry
Set RaBereich = Intersect(RaBereich, Range("N2:N100"))

AW: Bilder einfügen laut Pfad
11.11.2020 13:46:27
Thomas
... das wird extrem langsam, der checkt dann wohl auch die ausgeblendeten Zeilen ....
AW: Bilder einfügen laut Pfad
11.11.2020 12:55:37
ralf_b
Hallo,
Wie gehst du denn genau vor? Markierst du 28 Zellen in Spalte N und dann wird das automatisch abgearbeitet? Dieses Makro überprüft den Bereich, der sich geändert hat. Wenn etwas davon in Spalte n liegt,dann wird dieser Bereich abgearbeitet. Wenn man das jetzt auf deine 5000 aufbohren will, müßten dann andere Grenzen gesetzt werden. Man könnte die letzte belegte Zeile in Spalte N ermitteln und bis dahin alles abklappern. Oder man fragt eine Zeilenummer per Eingabebox ab. Wie hättest du es denn gern?
Anzeige
AW: Bilder einfügen laut Pfad
11.11.2020 13:01:51
Thomas
Hi!
Wie geschrieben, ich markiere 50 Zellen, füge per Formel die Pfade zum Bild ein, das VBA legt los und nach 28 Bildern ist Schluss. Ich würde gerne zb 500 Zellen markieren & einfügen, dann könnte ich das in 10 Abschnitten machen.
SG
Thomas
AW: Bilder einfügen laut Pfad
11.11.2020 13:17:59
ralf_b
Kann es sein das du eine ausgeblendete Zeile hast, an welcher die Schleife abbricht, weil dort keine Formel drin ist?
AW: Bilder einfügen laut Pfad
11.11.2020 13:18:01
ralf_b
Kann es sein das du eine ausgeblendete Zeile hast, an welcher die Schleife abbricht, weil dort keine Formel drin ist?
AW: Bilder einfügen laut Pfad
11.11.2020 13:39:30
Thomas
Ja, da sind Zeilen ausgeblendet, die Formel füge ich dann immer ober "sichtbare Zellen markieren" und dann einfügen ein. Excel fügt aber trotz ausgeblendeter Zeilen Bilder ein, nur halt immer nur 28. Ausgeblendete Zeilen können von Bilderzelle zu Bilderzelle mal 2 Zeilen oder 20 sein.
Anzeige
ich bin raus
11.11.2020 14:07:17
ralf_b
sorry, ich sehe kein Problem im Code.
AW: Bilder einfügen laut Pfad
11.11.2020 13:54:53
Nepumuk
Hallo Thomas,
ich habe das Makro soweit wie möglich aufgeräumt. Teste mal:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const ON_ACTION As String = "Bild_BeiKlick"
    Const NO_PICTURE As String = "kein Bild"
    
    Dim strPath As String
    Dim strName As String
    Dim objShape As Shape
    Dim objRange As Range
    Dim objCell As Range
    
    Set objRange = Intersect(Target, Range("N2:N200000"))
    
    If Not objRange Is Nothing Then
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        For Each objCell In objRange
            
            objCell.Offset(0, 1).Value = Empty
            
            strName = "Bild " & objCell.Address(False, False)
            
            For Each objShape In Shapes
                If objShape.Name = strName Then
                    objShape.Delete
                    Exit For
                End If
            Next
            
            If Not IsEmpty(objCell.Value) Or Not objCell.EntireRow.Hidden Then
                
                strPath = objCell.Text
                
                If Dir$(strPath) = vbNullString Then
                    
                    objCell.Offset(0, 1).Value = NO_PICTURE
                    
                Else
                    
                    Set objShape = Shapes.AddPicture(strPath, msoFalse, msoTrue, _
                        objCell.Offset(0, 1).Left + 1, objCell.Top + 1, _
                        objCell.Width - 2, objCell.Height - 2)
                    
                    With objShape
                        .OnAction = ON_ACTION
                        .Name = strName
                        .Placement = xlMoveAndSize
                    End With
                End If
            End If
        Next
        
        Set objRange = Nothing
        Set objShape = Nothing
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: Bilder einfügen laut Pfad
11.11.2020 14:13:05
Thomas
Hallo Nepumuk!
DAS WAR ES !!!! Auf einen Schlag 1000 Bilder (trotz ausgeblendeter Zeilen) und das auch viel schneller als mit dem anderen Makro!!!!
VIELEN VIELEN DANK!!!
Gruß
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige