Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
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

Private Sub aus Tabelle löschen/anpassen

Private Sub aus Tabelle löschen/anpassen
08.06.2023 10:30:23
Thomas

Guten Tag ins Forum.

Schon häufiger habe im Forum Hilfe gefunden. Vielen Dank für die vielen hilfreichen Beiträge.

Jetzt komme ich in einem Thema aber nicht mehr weiter.
Zur Verwaltung von Serviceaktivitäten besteht ein Excel System mit div. VBA Makros (Sammlung im XLSTART Ordner, ähnlich PERSONAL.XLSB).
Die Vorlage für eine neue Aktivität enthält ein Deckblatt (siehe Bild unten). In diesem Tabellenblatt ist eine private sub enthalten. Diese benennt abhängig von der Eingabe in einer bestimmen Zelle die Tabellenblätter der Arbeitsmappe. Durch mehrfachen Wechsel in der Vorgangs-Nr., zuletzt auch von nummerischen zu alpha-nummerischen, muss diese private sub angepasst werden. Alte Arbeitsmappen werden auch als Vorlage für Aktivitäten mit gleichem Hintergrund verwendet. Um nicht manuell bei allen bestehenden Arbeitsmappen (vierstellige Anzahl) die Anpassung vorzunehmen, möchte ich gerne per Makro diese private sub im Deckblatt meiner Arbeitsmappen anpassen. Wenn ein Anpassen nicht möglich ist, wäre das Löschen eine Alternative.

Im Forum habe ich eine Lösung gefunden das Deckblatt als Tabelle in der Arbeitsmappe eindeutig zu identifizieren, check.
Im Beitrag "1177397 Mit Makro anderes Makro ändern" habe ich auch bereits ein gutes Gerüst für meine Aufgabe gefunden. Leider wird dort aber auf ein Modul nicht aber auf eine Tabelle verwiesen.
Alle VBA Komponenten zu löschen wie im Beitrag "544126 Entfernen Private Sub über VB" wäre nicht hilfreich. Ich möchte gezielt diese eine Element ansprechen.

Wie kann ich die private sub in der Tabelle (mein Deckblatt) ansprechen/adressieren um dann den enthaltenen Code über eine *.txt Datei anzupassen.

Ich freue mich auf hilfreiche Rückmeldung. Vielen Dank vorab.

Grüße, Thomas
Userbild

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Private Sub aus Tabelle löschen/anpassen
08.06.2023 12:07:06
Mullit
Hallo,

iPr. so die Richtung, ggF noch die DeleteLines Methode aufrufen....
Option Explicit

Public Sub nottested()
Const vbext_ct_Document As Long = 100
Dim objWorkbook As Workbook
Dim objVBComponent As Object
For Each objWorkbook In Application.Workbooks
    For Each objVBComponent In objWorkbook.VBProject.VBComponents
        If objVBComponent.Type = vbext_ct_Document And objVBComponent.Name = "Tabelle3" Then
          Call objVBComponent.CodeModule.AddFromFile("'//Hier Dein txt. File Name///")
        End If
    Next
Next
End Sub
Gruß, Mullit


Anzeige
AW: Private Sub aus Tabelle löschen/anpassen
09.06.2023 14:35:28
Thomas
Hallo Mullit,

besten Dank, das war der richtige Anstoß. Habe noch ein wenig gebastelt. Unten mein funktionierender Code.

Option Explicit

Public Sub CodeErsetzen()
'Definitionen/Deklaration
    Const vbext_ct_Document As Long = 100
    Dim objWorkbook As Workbook
    Dim objVBComponent As Object
    Dim x As Long
    Dim TableName As String
    Dim TableIndex As Long

'Suche die Tabelle "Deckblatt" mit CodeName xxx zum späteren Vergleich unten
    Application.ScreenUpdating = False
    For x = 1 To Worksheets.Count
        If Left(Worksheets(x).Name, 10) = "Deckblatt_" Then
            TableName = Worksheets(x).CodeName
            TableIndex = Worksheets(x).Index
            Exit For
        End If
    Next x

'offene Arbeitsmappen durchsuchen nach "Wartungsbericht"
    For Each objWorkbook In Application.Workbooks
        'sicherstellen, dass ausschließlich in einem Wartungbericht geändert wird
        If Left(objWorkbook.Name, 15) = "Wartungsbericht" Then
            For Each objVBComponent In objWorkbook.VBProject.VBComponents
                If objVBComponent.Type = vbext_ct_Document And objVBComponent.Name = TableName Then
                    With objVBComponent.CodeModule
                        .DeleteLines 1, .CountOfLines
                    End With
                    Call objVBComponent.CodeModule.AddFromFile("C:\Users\*******\Desktop\WaPro_Temp\01_Wartungsprotokolle\Zusätze\DeckblattCodeNeu.txt")
                    Exit Sub 'Ausstieg um nicht weitere Elemente unnötig zu durchsuchen
                End If
            Next
        End If
    Next
    Application.ScreenUpdating = True
End Sub
Um im Netzwerk den richtigen User "*******" bzw. den Pfad der Vorlage des neuen Codes zu adressieren kommen noch ein paar Zeilen hinzu, welche ich an anderer Stelle bereits nutze.

Viele Grüße, Thomas


Anzeige
AW: prima, alles klar...owt
09.06.2023 20:25:42
Mullit

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige