morph163
Goto Top

Makro in Excel - personal.xlsb wird teilw. ignoriert

Hallo,
leider ist mit der Titel des Thread nicht so gut gelungen. Das Problem ist auch etwas seltsam zu beschreiben.
mein System ist ein Win 10 mit einem Office 2016.
Was ich realisieren will ist eigentlich ganz einfach: Wenn in Spalte J ein "x" steht soll in Spalte A eine Grafik eingefügt werden. Das ganze soll als Makro in der Personal.xlsb gespeichert sein damit es auf jede Datei Anwendbar ist.
Verwendet habe ich den VBA Code

Sub BildEinfügen()
    Dim ws As Worksheet
    Dim Zelle As Range
    Dim imgPfad As String
    Dim img As Picture

    ' Legen Sie das Arbeitsblatt fest, auf dem Sie diese Operation durchführen möchten  
    Set ws = ThisWorkbook.Worksheets("Tabelle1") ' Ändern Sie "Tabelle1" in den Namen Ihres Blatts  

    ' Geben Sie den Pfad zum Bild an, das Sie einfügen möchten  
    imgPfad = "C:\Pfad\Zu\Ihrem\Bild.png" ' Ändern Sie dies in den tatsächlichen Pfad Ihres Bildes  

    ' Schleife durch jede Zelle in Spalte J  
    For Each Zelle In ws.Range("J1:J" & ws.Cells(ws.Rows.Count, "J").End(xlUp).Row)  
        ' Überprüfen Sie, ob die Zelle "x" enthält  
        If Zelle.Value = "x" Then  
            ' Fügen Sie das Bild in die entsprechende Zelle in Spalte A ein  
            Set img = ws.Pictures.Insert(imgPfad)
            img.Top = Zelle.Offset(0, -9).Top ' Passen Sie den Offset an, um das Bild richtig zu positionieren  
            img.Left = Zelle.Offset(0, -9).Left
        End If
    Next Zelle
End Sub 

Das funktioniert auch, allerdings nur wenn ich das auf eine spezifische Datei anwende. Ich öffne also Beispiel.xlsx führe das Makro im VBA Editor oder einfach über den Klick über den Makros Button aus. Im Modul1 des VBA Projekt "Beispiel.xlsx" steht also der code und wird ausgeführt.
Wenn ich den Code aber in ein Modul des VBA Projekts "Personal.xlsb" kopiere und dort abspeichere wird das Makro zwar über den Makro Button angezeigt und scheinbar auch fehlerfrei ausgeführt aber die Grafik wird einfach nicht ausgeführt. Ich habe schon den Pfad zur Grafik aus dem Makro kopiert und in den Explorer eingegeben - das klappt, daran liegt es nicht.
Ich habe die Zeile
 Set ws = ThisWorkbook.Worksheets("Tabelle1")   
im Verdacht weiss aber nicht wie es richtig sein sollte, falls das wirklich falsch ist.
Ich hoffe ihr könnt mein Problem nachvollziehen und mit weiterhelfen.
Grundsätzlich funktioniert das ganze. Ich habe andere Makros in der Personal.xlsb die auch in der Beispiel.xlsx funktionieren und über Tastenkombination abrufbar sind, egal wie die xlsx Datei heißt.

Vielen Dank für eure Mühe

Content-Key: 9473198402

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

Printed on: May 2, 2024 at 22:05 o'clock

Member: Pjordorf
Pjordorf Sep 19, 2023 at 00:37:29 (UTC)
Goto Top
Hallo,

Zitat von @morph163:
Wenn in Spalte J
Die ganze Spalte J?

Spalte A
Die ganze Spalte A?
Excel (je nach Version) kann 1,048,576 rows by 16,384 columns haben.
https://support.microsoft.com/en-gb/office/excel-specifications-and-limi ...

Grundsätzlich funktioniert das ganze. Ich habe andere Makros in der Personal.xlsb die auch in der Beispiel.xlsx funktionieren und über Tastenkombination abrufbar sind, egal wie die xlsx Datei heißt.
Warum willst du .xlsb nutzen? Du weisst über die nachteile der Binären Speicherung mittels .xlsb bescheid?
https://analystcave.com/excel-working-with-large-excel-files-the-xlsb-fo ...
https://docs.fileformat.com/spreadsheet/xlsb/
https://www.adobe.com/de/acrobat/resources/document-files/spreadsheet-fi ...
https://www.spreadsheet1.com/how-to-save-as-binary-excel-workbook.html
https://doneex.com/excel-binary-workbook/
https://excelchamps.com/workbook/binary/#Then_Should_I_Use_XLSB

https://excelbaby.com/learn/when-should-i-use-xlsx-or-xlsb-format/

Gruß,
Peter
Mitglied: 7907292512
Solution 7907292512 Sep 19, 2023 updated at 05:32:09 (UTC)
Goto Top
ThisWorkbook bezieht sich auf das Workbook in dem das Makro selbst steht, wohingegen ActiveWorkbook das gerade aktiv angezeigte WB darstellt.
Set ws = ActiveWorkbook.Worksheets(1)   
Sid.