Anzeige
Archiv - Navigation
1164to1168
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

VBA code in DieseArbeitsmappe durch VBA ergänzen

VBA code in DieseArbeitsmappe durch VBA ergänzen
Schulze
Hallo zusammen!
Ich habe folgendes Problem!
Ich habe ca. 400 Dateien mit dem unten aufgeführtem Makro versehen. Das Makro ist direkt auf der Arbeitsmappe versehen, damit trotz Blattschutz, der Filter und die Gliederung bei jeder Öffnung direkt funktioniert.
Nun möchte ich zu diesem Makro noch folgenden Code hinzufügen: Thisworkbook.saved = true
Gibt es eine Möglichkeit, dieses Makro automatisch anpassen zu lassen, sodass ich nicht jede Datei öffnen muss?
Ein Makro für die Öffnung aller Dateien ist vorhanden! Ich weiß leider nur nicht, wie ich das Makro ohne umfangreiche händische Betätigung in jeder Datei anpassen kann.
Kann mir da jemand helfen?
Option Explicit
Sub Workbook_Open()
ActiveSheet.Protect userinterfaceonly:=True, Password:="508"
ActiveSheet.EnableOutlining = True     'für Gliederung
ActiveSheet.EnableAutoFilter = True    'für Autofilter
End Sub

AW: VBA code in DieseArbeitsmappe durch VBA ergänzen
30.06.2010 16:25:04
Hajo_Zi
Hallo Sebastian,
dazu mußt Du den Zugriff auf das VBA Projekt zulassen. Das sagt Dir was?

@Hajo : Was soll denn diese Antwort ?
30.06.2010 16:38:44
NoNet
Hallo Hajo,
logischerweise muss man ab Excel 2002 den "Zugriff auf das VB-Projekt vertrauen" aktivieren, aber das hat doch absolut gar nichts mit der gestellten Frage zu tun !
Sebastian möchte wissen, mit welchem Code man die Code-Zeile in ca. 400 Dateien einfügen kann und da ist Deine "Antwort" alles andere als hilfreich :-(
Zum Thema :
Ich versuche mich gerade an ActiveWorkbook.VBProject.VBComponents.Import "...", aber so ganz funktioniert das nicht. Der code wird nicht in "DieseArbeitsmappe" importiert !
Vielleicht hat dazu jemand noch eine Idee ?
Hier mein (nicht funktionierender !) Code :
Sub ImportVBAModul()
Dim wb As Workbook
Dim strOrdner As String, strDatei As String
strOrdner = "C:\Temp\Open\" 'mit "\" am Ende !!!
strDatei = Dir(strOrdner & "*.xls") 'Alle XLS-Dateien
While strDatei  ""
Set wb = Nothing
Set wb = Application.Workbooks.Open(strOrdner & strDatei)
If Not wb Is Nothing Then
'Exportiertes Klassenmodul "DieseArbeitsmappe.cls" importieren :
'wb.VBProject.VBComponents.Import strOrdner & "DieseArbeitsmappe.cls" 'Importiert  _
als clsModul
'Funktioniert auch nicht :
wb.VBProject.VBComponents("DieseArbeitsmappe").CodeModule.AddFromFile _
strOrdner & "DieseArbeitsmappe.cls"
wb.Save
wb.Close
End If
strDatei = Dir 'Nächste Datei einlesen
Wend
End Sub
Gruß, NoNet
gegen    2:1

Anzeige
Warum so umständlich, NoNet, oder hat etwa...
30.06.2010 18:47:43
Luc:-?
…auch das weniger mit der Frage als mit deinen Versuchen zu tun…? ;->
Tool zum Dateiöffnen ist ja vorhanden, also muss bei angegebenem Verweis auf die benötigte Extensibility-DLL nur noch das jeweilige vbProjekt nach DokModul und Workbook_Open durchsucht, die Zeilen bis zur Einfügestelle gezählt und dann die Zeile bzw Zeilenergänzung eingefügt wdn (ggf ganze Zeile austauschen durch überschreiben), denn es ist doch immer der gleiche Codeschnipsel, keine ganze (!) Komponente. Fertig! Kriegt man auch alles ganz alleine raus, wenn die DLL vorliegt… ;-)
Das, was Hajo schreibt, ist natürlich nur eine, wenn auch grdlegende, Voraussetzung, die höchstwahrscheinl ohnehin erfüllt ist… :->>
Gruß Luc :-?
Anzeige
AW: Warum so umständlich, NoNet, oder hat etwa...
30.06.2010 19:05:29
Nepumuk
Hallo,
wozu eine DLL? Die ist so notwendig wie ein Kropf.
Option Explicit

Sub ImportVBAModul()
    
    Dim wb As Workbook, objVBC As Object
    Dim strOrdner As String, strDatei As String
    Dim lngLine As Long, lngColumn As Long
    
    strOrdner = "C:\Temp\Open\" 'mit "\" am Ende !!!
    
    strDatei = Dir(strOrdner & "*.xls") 'Alle XLS-Dateien
    
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    Do While strDatei <> ""
        
        Set wb = Application.Workbooks.Open(strOrdner & strDatei)
        
        'Schleife über alle Komponenten des Projektes
        For Each objVBC In wb.VBProject.VBComponents
            
            'Suche interne Excelkomponenten
            If objVBC.Type = 100 Then
                
                'Suche die Komponenten welche die Klasse der Mappe enthält
                If objVBC.Name = wb.CodeName Then
                    
                    'Suche nach einem bestimmten Inhalt
                    lngLine = 1: lngColumn = 1
                    If objVBC.CodeModule.Find("EnableAutoFilter", lngLine, lngColumn, _
                        -1, -1, False, False, True) Then
                        
                        'Füge eine Zeile ein
                        objVBC.CodeModule.InsertLines lngLine + 1, " Saved = True"
                        
                        'Verlasse Schleife nach dem einfügen
                        Exit For
                        
                    End If
                End If
            End If
        Next
        
        wb.Save
        wb.Close
        
        strDatei = Dir 'Nächste Datei einlesen
        
    Loop
    
    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With
    
    Set wb = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
Klasse
30.06.2010 19:14:47
Holger
Hallo,
das kann ich auch gebrauchen. You made my day!
...Weil man das mit der DLL auch als Anfänger...
30.06.2010 19:23:04
Luc:-?
…allein herausfinden kann, Nepumuk…
Ohne die DLL muss man die Alternativen bereits kennen, was doch eher bei Profis als bei Anfängern der Fall sein dürfte… :->
Raus kommt idR zum Schluss das Gleiche…
Gruß Luc :-?
Warum so abstrakt, Luc - wo bleibt Dein Code ? _oT
01.07.2010 10:29:25
NoNet
_oT
gegen    2:1

Warum? Der sieht auch kaum anders aus! orT
02.07.2010 08:15:21
Luc:-?
Gruß+schöWE, Luc :-?

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige