37414
Goto Top

Excel 2016 - Foto per Bedingung bzw. Makro in Zelle einfügen

Hallo,

nachdem mein letzter Thread gelöst ist, möchte ich für ein weiteres Problem in der gleichen Excel-Datei diesen neuen Thread erstellen.

Hier ist das Problem, dass ein Foto über eine Wenn-Dann-Abfrage, bzw. per Makro in eine bestimmte Zelle eingefügt werden soll.
Hierbei gibt es jedoch ein paar Probleme:

1) Das Foto soll in einem anderen Tabellenblatt eingefügt werden. Dies funktioniert bisher nicht
2) Da die Excel-Datei von verschiedenen Mitarbeiter/-innen ausgefüllt werden soll, wobei das einzufügende Foto immer auf deren Desktop liegt, wollte ich im Code des Makros die Variable "%username%" benutzen. Dann erhalte ich jedoch eine Fehlermeldung, die sich genau auf die Codezeile mit der Variable bezieht (siehe Screenshot)

makrofehler

Wenn ich - statt der Variable - meinen Benutzernamen eingebe, funktioniert das Makro.

Hier der aktuelle Makro-Code:

Sub MakroU_start()
'  
' MakroU_start Makro  
' Unterschrift MA einfügen  
'  
' Tastenkombination: Strg+u  
'  
    Sheets("U-Antrag").Select  
    Range("B33").Select  
    ActiveSheet.Pictures.Insert("C:\Users\Mein-Name\Desktop\Unterschrift.jpg"). _  
        Select
    Selection.ShapeRange.IncrementTop 0.5
    Selection.ShapeRange.IncrementTop 0.5
    Selection.ShapeRange.IncrementTop 0.5
    Selection.ShapeRange.IncrementTop 0.5
    Selection.ShapeRange.IncrementTop 0.5
    Selection.ShapeRange.IncrementLeft 0.5
    Selection.ShapeRange.IncrementLeft 0.5
    Selection.ShapeRange.IncrementLeft 0.5
    Selection.ShapeRange.IncrementLeft 0.5
    Selection.ShapeRange.IncrementLeft 0.5
    Range("E38").Select  
End Sub

Und hier der Code, der im 1. Tabellenblatt "Eingaben" in Zeile E5 steht:

=WENN(C5="Ja";MakroU_start();"nichts")  

Das Foto soll in Tabellenblatt 2 "U-Antrag" in Zelle B33 eingesetzt werden.

Vielleicht kann hier jemand von Euch weiterhelfen.

Grüße,
imebro

Content-Key: 615184

Url: https://administrator.de/contentid/615184

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: emeriks
Lösung emeriks 22.10.2020 aktualisiert um 10:42:12 Uhr
Goto Top
Hi,
%username% ist eine Umgebungsvariable, welche Du in dieser Schreibweise nicht im VBA abfragen kannst. Dafür gibt es im VBA Environ.
Environ("USERNAME")  
Besser aber
DesktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")  

E.
Mitglied: 37414
37414 22.10.2020 aktualisiert um 12:08:38 Uhr
Goto Top
Danke Dir...

Und wie/wo setze ich den von Dir geschriebenen Code nun in meinen Code ein, bzw. was muss ich nun sonst noch an meinem Code ändern (siehe weiter oben)?

Und was muss ich ändern, damit das Foto auch tatsächlich im 2. Tabellenblatt in Zelle B33 eingesetzt wird und nicht einfach irgendwo im 1. Tabellenblatt? Eben habe ich es nochmal getestet und diesmal wird das Foto zwar tatsächlich in Tabellenblatt 2 eingesetzt, aber dort viel zu weit oben in einer anderen Zelle. Wie bekomme ich das korrekt hin?

Grüße,
imebro
Mitglied: 37414
37414 22.10.2020 aktualisiert um 15:56:59 Uhr
Goto Top
...ich habe eben eine Möglichkeit gefunden, das Foto mit der Unterschrift in der Zelle B33 zu verankern.
Das löst zwar noch nicht das Problem mit dem Code (siehe meine letzte Nachricht - 1. Absatz), aber ggf. das Problem mit dem Einfügen an der korrekten Stelle.

So wäre der Vorgang für dieses verankern:
- Zuerst die ALT-Taste drücken und dann das Bild in der Zelle positionieren.
- Danach per Rechtsklick auf das Foto die Option „Größe und Eigenschaften“ öffnen
- Jetzt im Dialogfenster „Grafik formatieren“ (wird re. eingeblendet) auf den Unterpunkt „Eigenschaften“ klicken.
- Nun den Radio-Button aktivieren bei „Von Zellposition und -größe abhängig“.

Somit wird das Bild nun an die Formatierung angepasst und ist ab sofort an die Zelle geknüpft. Das bedeutet, es bleibt auch dann dort, wenn sich das Layout ändert oder die Tabelle umsortiert wird.

Ich habe jetzt das vorhandene Makro um den folgenden Code ergänzt, um diese Verankerung gleich mit zu machen:

Selection.Placement = xlMoveAndSize
Application.CommandBars("Format Object").Visible = False  

Leider wird das Foto noch immer im 1. Tabellenblatt eingesetzt an irgendeiner Stelle, obwohl es zwischendurch ja auch schon mal im 2. Tabellenblatt erschien (allerdings auch irgendwo und nicht in Zelle B33).

Was tun? face-wink

Grüße,
imebro
Mitglied: 37414
37414 23.10.2020 um 10:39:00 Uhr
Goto Top
Danke für Eure Hilfe... habe jetzt durch langes Herum probieren rausgefunden, wie und wo man den Code von @emeriks einsetzt.
Das Verankern sowie das Einsetzen des Fotos funktioniert jetzt auch.

Ebenso das Einsetzen des Fotos im anderen Tabellenblatt. Das habe ich jetzt über eine Schaltfläche umgesetzt. Vielleicht funkioniert es auch nur darüber und nicht über eine Wenn-Dann-Abfrage face-wink

Für die Jenigen unter Euch, die interessiert sind, hier mal der komplette Code, den ich nun nutze:

Sub Unterschrift()
  
 '** Dimensionierung der Variablen  
 Dim strVerzeichnis$, strDatei$
 Dim pct As Picture
 Dim lngZeile As Long 'Zeile zum Eintragen der Bilder  
 Dim lngSpalte As Long 'Spalte zum Eintragen der Bilder  
 Dim varBreite As Variant 'Spaltenbreite  
 Dim varHoehe As Variant
  
  
 '** Verzeichnis und Dateinamen definieren und auslesen  
 '** Hier wird automatisch der Desktop des angemeldeten Users genommen!!  
 strVerzeichnis = CreateObject("WScript.Shell").SpecialFolders("Desktop")  
 strDatei = Dir(strVerzeichnis & "\Unterschrift.jpg")  
 
 '** Tabellenblatt und Zelle angeben, wo das Bild eingefügt werden soll  
 Sheets("U-Antrag").Select  
 Range("B34").Select  
  
 '** Startzeile + Spalte festelegen  
 lngZeile = 34
 lngSpalte = 2
   
 '** Ermittlung der Spaltenbreite  
 varBreite = Columns("B:B").Width  
  
 Cells(lngZeile, lngSpalte).Select
 Cells(lngZeile, lngSpalte + 1) = strDatei  ' schreiben Dateinamen  
 Set pct = ActiveSheet.Pictures.Insert(strVerzeichnis & "\" & strDatei)  
     
 With ActiveSheet.Shapes(1)
   '** Auslesen der Breite  
   ActiveSheet.Shapes(1).Select
   Selection.ShapeRange.LockAspectRatio = msoTrue
   
   '** Bild etwas höher schieben  
   ActiveSheet. _
        Select
    ' Selection.ShapeRange.IncrementLeft 15  
    Selection.ShapeRange.IncrementTop -5
    
   '** Das Bild verankern  
    Selection.Placement = xlMoveAndSize
    Application.CommandBars("Format Object").Visible = False  
    
   '** Bild auf aktuelle Spaltenbreite skalieren  
   ' Selection.ShapeRange.Width = varBreite  
    
   '** Zeilenhöhe festlegen  
   varHoehe = ActiveSheet.Shapes(1).Height
   Rows(lngZeile).RowHeight = varHoehe
  End With
        
 End Sub

Thread würde ich somit als gelöst markieren.

Danke und Grüße,
imebro