Hi,
ich vermute mal, dass das nicht geht, zumindest fällt mir dazu nix ein, wie man den ursprünglichen Dateinamen herausbekommt in Excel. Und zu Word kann ich nix sagen, außer, dass ich im Dokument gespeicherte Bilder zwar exportieren kann, aber nicht mehr unter dem ursprünglichen Dateinamen.
Bilder behandelt Excel als shape.
Ich hab vor Jahren mal was gestrickt, das mir auflistet welche shapes in einer Exceltabelle enthalten sind.
Den Kode dazu füge ich einfach mal ein, es hat unter xl2003 einwandfrei funktioniert.
Es braucht einen freien Bereich wo es eine 7 spaltige Tabelle anlegt mit allen shapes und die Daten die sich mit vba auslesen lassen.
die Benennung der Spalten sind:
Name
AlternativeText
Height
Width
Adresse
Left
Top
Der freie Bereich kann selbst bestimmt werden, bei 2500 shapes würde ich ganz unten unter dem usedrange anfangen
Wird nichts ausgewählt, startet es in Zeile 92 und überschreibt alles was das steht
Es springt von einem shape zum anderen und dort jeweils in die Zelle, die unter der linken oberen Ecke ist.
Da es hier nur um Aufzählung geht, empfehle ich die Frage nach 'löschen' und 'unsichtbarmachen' abzuwählen
(inputbox)
Code:
Private Sub Shape8()
Dim myd As Worksheet, sh As Shapes, I As Integer, J As Integer, BiLd As String
Dim Löschmöglichkeit As Integer
Dim Unsichtbarmöglichekeit As Integer
Dim s1 As Long, s2 As Long, s3 As Long, s4 As Long, s5 As Long, s6 As Long
Dim s7 As Long, s8 As Long, s9 As Long, s10 As Long
Dim Links As Long, Oben As Long
'Dokumentationsbeginn
A = InputBox("Ich benötige 7 Spalten und viele Zeilen", "Wohin?", 92)
Löschmöglichkeit = MsgBox("Wollen Sie shapes löschen?", 289)
Unsichtbarmöglichekeit = MsgBox("Wollen Sie Shapes unsichtbar machen?", 289)
If Unsichtbarmöglichekeit = 2 Then Sichtbar = 2
If Löschmöglichkeit = 2 Then Löschen = 2
'-----
Set myd = ActiveSheet
Set sh = myd.Shapes
J = sh.Count
MsgBox J & " x Shapes enthalten"
I = 1
If J = 0 Then Exit Sub
Do
sh(I).Visible = msoTrue
sh(I).Select
sh(I).Line.DashStyle = msoLineSolid
sh(I).TopLeftCell.Select
' Application.Wait (Now + TimeValue("0:00:2"))
s1 = myd.Columns(1).ColumnWidth
s2 = myd.Columns(2).ColumnWidth
s3 = myd.Columns(3).ColumnWidth
s4 = myd.Columns(4).ColumnWidth
s5 = myd.Columns(5).ColumnWidth
s6 = myd.Columns(6).ColumnWidth
s7 = myd.Columns(7).ColumnWidth
s8 = myd.Columns(8).ColumnWidth
s9 = myd.Columns(9).ColumnWidth
s10 = myd.Columns(10).ColumnWidth
If sh(I).Left > s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10 Then
Links = 11
End If
' Range
BiLd = InputBox("Was steht drin?", "shape", sh(I).AlternativeText, 1500, 12000)
sh(I).AlternativeText = BiLd
If sh(I).Type = msoPicture Then
sh(I).Line.Visible = msoFalse
End If
If Löschmöglichkeit = 1 Then
Löschen = MsgBox("löschen?", 257)
End If
If Löschen = 1 Then
sh(I).Delete
J = J - 1
I = I - 1
Löschen = 0
Else
If I = 1 Then
Cells(A, 1) = "Name"
Cells(A, 2) = "AlternativeText"
Cells(A, 3) = "Height"
Cells(A, 4) = "Width"
Cells(A, 5) = "Adresse"
Cells(A, 6) = "Left"
Cells(A, 7) = "Top"
End If
Cells(A + I, 1) = sh(I).Name
Cells(A + I, 2) = sh(I).AlternativeText
Cells(A + I, 3) = sh(I).Height
Cells(A + I, 4) = sh(I).Width
Cells(A + I, 5) = sh(I).TopLeftCell.Address
Cells(A + I, 6) = sh(I).Left
Cells(A + I, 7) = sh(I).Top
If Unsichtbarmöglichekeit = 1 Then
Sichtbar = MsgBox("unSichtbar", 257)
End If
If Sichtbar = 2 Then
sh(I).Visible = msoTrue
ElseIf Sichtbar = 1 Then
sh(I).Visible = msoFalse
End If
End If
I = I + 1
Loop While I < J + 1
End Sub
Excel zählt die Shape-Nummer hoch.
Alles was nicht in die Tabellen passt, Pfeile, Bilder, Textboxen oder Diagramme sind ein shape und können mit VBA von einer Form in die andere gebracht werden (teilweise) und jedes dieser Shapes bekommt eine ID, die sich in der Reihenfolge des Anlegens hochzählt.
Mit VBA lassen sich diese Shapes auch ausblenden, dann sind sie nicht sichtbar, aber immer noch vorhanden. Keine Ahnung, zu was das gut sein soll. Aber, je mehr shapes in einer Datei enthalten sind, desto langsamer wird die Datei zum bearbeiten. Auch da weiß ich den Grund nicht…