Office: Makro als Addin auf aktuelle Arbeitsmappe anwenden

Helfe beim Thema Makro als Addin auf aktuelle Arbeitsmappe anwenden in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo Leute,*:)* ich hab da nocheinmal ein älteres Thema was ich aktuell wieder weiter bearbeite. Aufgabe: Ich habe einen Code den ich als Addin... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Creator-X, 25. Februar 2023.

  1. Makro als Addin auf aktuelle Arbeitsmappe anwenden


    Hallo Leute,Makro als Addin auf aktuelle Arbeitsmappe anwenden *:)*
    ich hab da nocheinmal ein älteres Thema was ich aktuell wieder weiter bearbeite.
    Aufgabe: Ich habe einen Code den ich als Addin abgespeichert habe und in Excel in die Register oben eingebunden habe und dort per Button aufrufen kann.
    Leider bezieh ich mich ja in dem Code auf die Arbeitsmappe wo der Code drinnen steht und nicht auf die Arbeitsmappe mit den aktuellen Daten. Siehe Anhang.
    Makro als Addin auf aktuelle Arbeitsmappe anwenden :(Lösungsansatz: Ich wollte mich mit "ThisWorkbook.Tabelle1" auf die aktuelle Arbeitsmappe beziehen wo der Code drinnen steht. Aber ich bekomme dort eine Fehlermeldung. "Laufzeitfehler '138': Objekt unterstützt diese Eigenschaft oder Methode nicht."

    Kennt jemand eine Möglichkeit wie man sich noch auf die aktuelle Arbeitsmappe beziehen kann?Makro als Addin auf aktuelle Arbeitsmappe anwenden :confused:

    Code:
    Sub SpaltenAusblenden()
        Columns("A:CC").Hidden = True
    End Sub
    
    Sub Ausblenden(WelcherButton As Byte)
    Dim Adresse As String
    
    Call SpaltenAusblenden
    
    Dim s As String
    Select Case WelcherButton
        Case 1: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Mo|Ni|Mn|Cr|Si"                   'C-Stahl
        Case 2: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Mo|Nb|Ni|Mn|Cr|Ti|Si"             'austenitische Stähle
        Case 3: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Nb|Ni|Mn|Cr|Ti|Si|Cu|Co"          'Alloy
        Case 4: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Mo|Ni|Mn|Si|Nb|Ti"                'CrNi-Stähle
        Case 5: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Mo|Nb|Ni|Mn|Cr|V|Si"                'Cr-Stähle
        Case 6: s = "Ltg.Nr.|Pos.Nr.|*Ø*|Mo|Nb|Ni|Mn|Cr|Si|V"              'Schweißzusatzwerkstoff
        Case 7: Cells.EntireColumn.Hidden = False: Exit Sub             'alles Einblenden
    End Select
    'Range(s).EntireColumn.Hidden = False
    SpaltenEinblendenDetail s
    
    'Gehe zu Adresse
    Application.Goto Reference:=Range("A1"), Scroll:=True
    
    End Sub
    
    Sub SpaltenEinblendenDetail(s As String)
       Dim Sp() As Long, SpTitel() As String, I As Long
      
      'Alle Spalten einblenden
       ThisWorkbook.Tabelle1.Columns.Hidden = False
      'Spaltennummern Sp zu den Spaltentiteln s ermitteln
      'Spaltennummern für nicht vorhandene Spaltentitel erhalten Sp=0
       SpTitel = Split(s, "|")
       ReDim Sp(UBound(SpTitel)) As Long
        For I = 0 To UBound(SpTitel)
          Sp(I) = HoleSpalte(ThisWorkbook.Tabelle1, SpTitel(I))
        Next I
     
      'Spalten A:CC ausblenden
       SpaltenAusblenden
      'Spalten mit den Spaltennummern Sp, sofern sie nicht 0 sind, wieder einblenden
        For I = 0 To UBound(Sp)
          If Sp(I) Then ThisWorkbook.Tabelle1.Columns(Sp(I)).Hidden = False
        Next I
    End Sub
     
    Zuletzt bearbeitet: 25. Februar 2023
    Creator-X, 25. Februar 2023
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    ich konnte nicht sehen was Du es ersetzt hast. Ich konnte auch nicht sehen wie Du den Fehler auslöst.
    Ich vermute mal Du hast nicht ActiveWorkbook gescvhrieben.
    nur wenige schauen auf Deinen Rechner und sehen die Datei.
    Ich möchte gerne den Fehler im Original sehen.

    Ich baue keine Datei nach. Die Zeit hat schon jemand investiert.

    Ein Nachbau sieht meist anders aus als das Original. <B>Darum sollte das Original verlinkt werden.</b>

    Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
    Hinweis - Anonymisierung und Pseudonymisierung von Beispielmappen - MS-Office-Forum
    änderrn.
    Der Name einer hochgeladenen Mappe wird im Beitrag automatisch angezeigt, sodass es bei Verwendung von aussagekräftigen Namen leichter fällt, sie später im Ablageordner wiederzufinden und sie gedanklich einem bestimmten Thema zuzuordnen. Namen wie Muster*, Test*, Mappe*, Beispiel*, Fehler*, Kalender* usw. sind so allgemein, dass eine Zuordnung zu einem Thema unmöglich gemacht wird.
    Es sollte ein aussagekräftiger Name sein.

    Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)3

    Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.

    Bilder statt Datei | Excel ist sexy!

    Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.

    Das ist nur meine Meinung zu dem Thema.



    Makro als Addin auf aktuelle Arbeitsmappe anwenden GrußformelMakro als Addin auf aktuelle Arbeitsmappe anwenden Homepage
     
    Hajo_Zi, 25. Februar 2023
    #2
  3. Hi Hajo_Zi,
    Makro als Addin auf aktuelle Arbeitsmappe anwenden :confused: ja klar, hast ja Recht.
    das ist der Code der Funktioniert wenn der code in der Arbeitsmappe gespeichert ist.
    und ich möchte ja den Code als Addin in der Aktiven Arbeitsmappe ausführen. Dort gibt es auch immer ein Tabellenblatt1.

    Code:
    Sub SpaltenEinblendenDetail(s As String)
       Dim Sp() As Long, SpTitel() As String, I As Long
     
      'Alle Spalten einblenden
       Tabelle1.Columns.Hidden = False
      'Spaltennummern Sp zu den Spaltentiteln s ermitteln
      'Spaltennummern für nicht vorhandene Spaltentitel erhalten Sp=0
       SpTitel = Split(s, "|")
       ReDim Sp(UBound(SpTitel)) As Long
        For I = 0 To UBound(SpTitel)
          Sp(I) = HoleSpalte(Tabelle1, SpTitel(I))
        Next I
     
      'Spalten A:CC ausblenden
       SpaltenAusblenden
      'Spalten mit den Spaltennummern Sp, sofern sie nicht 0 sind, wieder einblenden
        For I = 0 To UBound(Sp)
          If Sp(I) Then Tabelle1.Columns(Sp(I)).Hidden = False
        Next I
    End Sub
     
    Creator-X, 25. Februar 2023
    #3
  4. Hajo_Zi
    Hajo_Zi Erfahrener User

    Makro als Addin auf aktuelle Arbeitsmappe anwenden

    meine Änderung möchtest Du nicht machen und Deinen Code möchtest Du nicht ins Add In kopieren.
    Gut ich bin dann raus.

     
    Hajo_Zi, 25. Februar 2023
    #4
  5. Makro als Addin auf aktuelle Arbeitsmappe anwenden :confused: Oh hab ich da irgenwas nicht ganz verstanden? Ich hab mal meine aktuellen Arbeitsmappen und Addin hochgeladen.
    also in der Datei:
    Happy_PMI_V1.2.1.xlsm -> Daten mit Code - funtktioniert
    Happy_PMI_V1.2.1.xlam.xlsm -> das Addin
    417718.xlsx - Testdaten auf die ich das Addin anwenden möchte, Hier kommt der Fehler wie oben beschrieben wenn ich das Addin ausführe.

    Gruß CXMakro als Addin auf aktuelle Arbeitsmappe anwenden :rolleyes:



     
    Creator-X, 25. Februar 2023
    #5
  6. Exl121150 Erfahrener User
    Hallo,

    du hast den VBA-Code der SUB
    Sub SpaltenEinblendenDetail(s As String)
    Dim Sp() As Long, SpTitel() As String, I As Long

    'Alle Spalten einblenden
    Tabelle1.Columns.Hidden = False
    'Spaltennummern Sp zu den Spaltentiteln s ermitteln
    'Spaltennummern für nicht vorhandene Spaltentitel erhalten Sp=0
    SpTitel = Split(s, "|")
    ReDim Sp(UBound(SpTitel)) As Long
    For I = 0 To UBound(SpTitel)
    Sp(I) = HoleSpalte(Tabelle1, SpTitel(I))
    Next I

    'Spalten A:CC ausblenden
    SpaltenAusblenden
    'Spalten mit den Spaltennummern Sp, sofern sie nicht 0 sind, wieder einblenden
    For I = 0 To UBound(Sp)
    If Sp(I) Then Tabelle1.Columns(Sp(I)).Hidden = False
    Next I
    End Sub

    in einem Add-In stehen, während du an 3 Stellen auf "Tabelle1" zugreifst, wobei, wie ich vermute, es sich um den Workbook-internen Namen eines Arbeitsblattes handelt. Dieser ist im Add-In nicht bekannt.

    Daher sollte man in einem solchen Fall die Tabulatorbezeichnung des Arbeitsblattes verwenden. Ich nehme an, dieser Name lautet bei dir "PMI Testdatei". Da aber an den 3 Stellen ein Objektzeiger auf eine Arbeitsblatt-Instanz benötigt wird, musst du zu Anfang der SUB einen solchen deklarieren und dann erzeugen und verwenden:
    Dim Wb As Workbook, Ws As Worksheet
    Set Wb = ActiveWorkbook
    Set Ws = Wb.Worksheets("PMI Testdatei")

    und dann
    Ws.Columns.Hidden = False
    weiters
    Sp(I) = HoleSpalte(Ws, SpTitel(I))
    und
    If Sp(I) Then Ws.Columns(Sp(I)).Hidden = False

    Dabei habe ich mit "Set Wb = ActiveWorkbook" vorausgesetzt, dass die Arbeitsmappe, in der das Arbeitsblatt "PMI Testdatei" enthalten ist, bereits die aktive Arbeitsmappe ist.
    Anmerkung: Dagegen würdest du mit "Set Wb = ThisWorkbook" auf die Arbeitsmappe verweisen, in der der soeben verwendete Programmcode steht.
     
    Exl121150, 25. Februar 2023
    #6
  7. Hallo Exl121150,

    mercy. Ja so in die Richutng war mein Gedanke auch. Ich wußte nur nicht wie ich das Workbook und Worksheet richtig deklarieren sollte. in den Arbeitsmappen die ich mit dem Addin bearbeiten will ist das Worksheet immer Tabelle1. Ich habe den Namen PMI Tesdatei nur mal für ein Test verwendet ihn aber wieder umbenannt in Tabelle 1.
    Aber genau so funktioniert es gut.
    Danke.
    Gruß CX
     
    Creator-X, 26. Februar 2023
    #7
  8. Exl121150 Erfahrener User

    Makro als Addin auf aktuelle Arbeitsmappe anwenden

    Hallo,

    dir ist aber schon klar, dass die 3 Dinge im VBA-Code
    Tabelle1
    "Tabelle1"
    Wb.Worksheets("Tabelle1")

    grundlegend verschieden sind.
     
    Exl121150, 26. Februar 2023
    #8
  9. Makro als Addin auf aktuelle Arbeitsmappe anwenden :oops:Makro als Addin auf aktuelle Arbeitsmappe anwenden o_O
    Weil? Greif ich da nicht immer auf Tabelle1 zu?
     
    Creator-X, 26. Februar 2023
    #9
  10. Exl121150 Erfahrener User
    Hallo,
    • Tabelle1: Wenn im VBA-Code dieser Bezeichner auftaucht, so wird er meistens unmittelbar gefolgt von einem Punkt und von einer Eigenschaft oder Methode, zB. wie Tabelle1.Range("A1"). Bei dieser Verwendung bezeichnet Tabelle1 einen im aktiven Workbook (Arbeitsmappe) lokalen Zeiger auf eine Arbeitsblatt-Objektinstanz. Dieser Zeigerbezeichner ist somit in einer anderen Arbeitsmappe unbekannt. Im Projekt-Fenster des VBA-Editors ist das der erste Bezeichner eines Arbeitsblattes. In der VBA-Programmierpraxis wird dieser Bezeichner kaum verwendet.
    • "Tabelle1": ist eine Zeichenkette. "Tabelle1" stellt letztlich nur eine Zeichenkette dar, die als solche beliebig manipuliert/verändert/verwendet werden kann.
    • Wb.Worksheets("Tabelle1"): Hier wird "Tabelle1" dazu verwendet, einen Objektinstanzzeiger auf ein einzelnes Element einer Auflistung zu erstellen. Dieser Zeiger zeigt dabei auf ein einzelnes Worksheet-Objekt und er kann zB. in einem "Set-Statement" einer Objektinstanzzeigervariablen zugewiesen werden, zB. Set Ws = Wb.Worksheets("Tabelle1"), wobei die Variable Ws mit Dim Ws As Worksheet deklariert/definiert ist. Im Projekt-Fenster des VBA-Editors ist das der zweite Bezeichner (in runden Klammern) eines Arbeitsblattes. In der VBA-Programmierpraxis ist das der in der Regel verwendete Bezeichner.
     
    Exl121150, 27. Februar 2023
    #10
  11. HKindler
    HKindler Erfahrener User
    Hi,

    Vielleicht in deiner Programmierpraxis. Ich und viele andere verwenden fast ausschließlich Taballe1 oder besser gesagt den Codename eines Tabellenblatts. Wieso? Weil der sich so gut wie nie ändert. Der Blattname Worksheets("Tabelle1") kann ganz leicht vom Benutzer geändert werden. Dann läuft der Code auf einen Fehler. Worksheets(1) also die Position des Tabellenblatts ist genauso unzuverlässig. Der Codename kann nur händisch im VBA-Editor geändert werden. Und das macht keiner, ohne sich der Konsequenzen bewusst zu sein,

    Bei einem AddIn hingegen macht es den meisten Sinn ActiveSheet zu verwenden. Dann braucht man nicht den unbekannten Codename zu suchen und ist auch unabhängig von Blattname und -position.

    Und wenn man doch mal den Codename in einem anderen Workbook verwenden will, dann muss man den halt in einer schleife suchen. Das könnte so aussehen:
    Code:
    Function GetSheetFromCodeName(ByVal strCodeName As String, _
                                  Optional Arbeitsmappe As Workbook) As Worksheet
    'Gibt eine Tabelle bzw. ein Diagramm basierend auf dem CodeName zurück
    Dim ws As Object
    If Arbeitsmappe Is Nothing Then Set Arbeitsmappe = ThisWorkbook
    For Each ws In Arbeitsmappe.Sheets
        If LCase(ws.CodeName) = LCase(strCodeName) Then
            Set GetSheetFromCodeName = ws
            Exit Function
        End If
    Next
    End Function
     
    HKindler, 27. Februar 2023
    #11
  12. Hallo HKindler,
    ja Du hast Recht. Hab es heute mitbekommen das ein Kollege wohl auf irgend einen Rechner bei uns im unternehmen Excel auf Englisch umgestellt hat und dann stand "Sheet1" im Tabellenblatt und somit hat das Addon nicht mehr funktioniert.

    Aber ich sag mal Standard ist bei uns deutsch und dann steht Tabelle1 drinnen.
    Vielleicht kann man das ja später noch mit einbauen .
    Aber die Überlegung ist gut.
     
    Creator-X, 28. Februar 2023
    #12
Thema:

Makro als Addin auf aktuelle Arbeitsmappe anwenden

Die Seite wird geladen...
  1. Makro als Addin auf aktuelle Arbeitsmappe anwenden - Similar Threads - Makro Addin aktuelle

  2. Seit Win 11 Zugriffsprobleme bei Excel über Makros

    in Microsoft Excel Hilfe
    Seit Win 11 Zugriffsprobleme bei Excel über Makros: Guten Tag! Ich habe vor einer Woche mein Windows 10 auf Windows 11 geupgraded, und seitdem habe ich extreme Schwierigkeiten mit meinem Excel. Mit Windows 10 funktionierte alles so, wie es sollte,...
  3. VBA-Makro zur Zellenformatierung Syntax probleme

    in Microsoft Excel Hilfe
    VBA-Makro zur Zellenformatierung Syntax probleme: Hallo zusammen, ich möchte per Makro Zellen formatieren. Tausender-Trennzeichen 3 Nachkommastellen Positive Zahlen Schwarz Negative Zahlen Rot Nullwert mit - Hinter der Zahl soll noch eine...
  4. Rechnungsvorlage mit Kundenstamm ohne Makro

    in Microsoft Excel Hilfe
    Rechnungsvorlage mit Kundenstamm ohne Makro: Hallo zusammen, habe folgendes Problem. Habe eine Liste mit Kunden. In dieser Liste sind Waren dem jeweiligen Kunden Artikel mit Preis und Packschema hinterlegt. Ich habe eine Rechnungsvorlage...
  5. Word-Dateien über Excel in eine ausgewählte Word-Datei übertragen per Makro

    in Microsoft Excel Hilfe
    Word-Dateien über Excel in eine ausgewählte Word-Datei übertragen per Makro: Hallo Zusammen, ich hoffe es kann mir jemand weiterhelfen in dem Forum. Ich habe ein Makro in der Excel-Datei (Reiter: Datenbank) im Anhang, wo ich mir von allen Word-Dateien den Pfad und den...
  6. Probleme mit Makro das jede Zeile in der ein "Text" steht löscht?!

    in Microsoft Excel Hilfe
    Probleme mit Makro das jede Zeile in der ein "Text" steht löscht?!: Hallo Leute, Ich habe mal wieder ein Problem, ich hoffe ihr könnt mir hier helfen! :) Habe hier schon ein Makro soweit, aber es macht halt noch nicht genau das was es soll, woran ich natürlich...
  7. Symbol per Makro einfügen

    in Microsoft Excel Hilfe
    Symbol per Makro einfügen: Hallo zusammen, ich habe aktuell folgendes in meiner Excel mittels bedingter Formatierung implementiert: Bei verschiedenen Zahlen, die in die Zellen A1-A5 eingetragen werden, werden diese durch...
  8. Alte 2002er-Makros in 2010

    in Microsoft Word Hilfe
    Alte 2002er-Makros in 2010: Bin von Office 2002 auf Office 2010 umgestiegen und zunächst überrascht, dass all meine Makros und AddIns noch (fast) einwandfrei weiterfunktionieren, bis auf ein Makro: Es handelt sich um das...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden