Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
648to652
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
648to652
648to652
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

SendKey Probleme beim Projektschutz!

SendKey Probleme beim Projektschutz!
12.08.2005 11:01:39
Martin
Hallo Zusammen
Das schnall ich nicht mehr.
Wenn ich das Makro "Entschützen1()" laufen lasse. wird die Tabelle Export.xls geöffnet und das Projekt entschützt.
Das funktioniert auch bestens.
Wenn jetzt aber das nächste Macro in der geplanten Reienfolge startet, wird der Projektschutz nicht entschützt.
Einzeln läufts, in einer Abfolge von Prozeduren nicht! Für mich nicht mehr nachvollziebar.


Option Explicit

Sub Import_Export()
    Entschützen1
    Export
    Entschützen2
    Import
End Sub

Public Sub Entschützen1()
    Application.EnableEvents = 
False
    Workbooks.Open "J:\AKTIONEN\Cockpit Aktionen\Save\In Arbeit\Export.xls"
    Windows("Export.xls").Activate
    ActiveSheet.Unprotect Password:="******"
    ActiveWorkbook.Unprotect Password:="******"
    Application.EnableEvents = 
True
    SendKeys "%{F11} %Xi {TAB 9}" & "service" & "{tab}{enter}{enter} %q"
    Application.EnableEvents = 
False
    
End Sub
    
Sub Export()
    
Dim vbc As Object, iCounter As Integer, cType As String, StDateiname As String
    
For Each vbc In Workbooks("Export.xls").VBProject.VBComponents
        
With vbc.CodeModule
            
For iCounter = 1 To .CountOfLines
                
If .ProcOfLine(iCounter, 0) > "" Or InStr(1, .Lines(iCounter, 1), "Dim") <> 0 _
                
Or InStr(1, .Lines(iCounter, 1), "Public") <> 0 Or InStr(1, .Lines(iCounter, 1), "Type") <> 0 _
                
Or InStr(1, .Lines(iCounter, 1), "Static") <> 0 Or InStr(1, .Lines(iCounter, 1), "Declare") <> 0 Then
                    
Select Case vbc.Type
                        
Case 1: cType = ".bas"
                        
Case 2, 100: cType = ".cls"
                        
Case 3: cType = ".frm"
                    
End Select
                    Workbooks("Export.xls").VBProject.VBComponents(vbc.Name).Export "C:\ModuleExportImport\" & vbc.Name & cType
                    
Exit For
                
End If
            
Next iCounter
        
End With
    
Next vbc
    
End Sub
    
Sub Entschützen2()
    Application.EnableEvents = 
False
    Workbooks.Open "J:\AKTIONEN\Cockpit Aktionen\Save\In Arbeit\Import.xls"
    Windows("Import.xls").Activate
    ActiveSheet.Unprotect Password:="******"
    ActiveWorkbook.Unprotect Password:="******"
    Application.EnableEvents = 
True
    SendKeys "%{F11} %Xi" & "service" & "{tab}{enter}{enter} %q"
    Application.EnableEvents = 
False
    
End Sub
    
Sub Import()
    
Dim vbc As Object, iCounter As Integer, cType As String, StDateiname As String
    Windows("Export.xls").Activate
    Worksheets("Meldeblatt").Range("A1:IV65536").Copy
    Windows("Import.xls").Activate
    
With Range("A1")
        .PasteSpecial Paste:=xlPasteFormats
        .PasteSpecial Paste:=xlPasteValidation, Operation:=xlNone, _
            SkipBlanks:=
False, Transpose:=False
    
End With
    
With ActiveWorkbook.VBProject
        
For Each vbc In .VBComponents
            
Select Case vbc.Type
                
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
                
Case 100
                
With vbc.CodeModule
                    .DeleteLines 1, .CountOfLines
                
End With
            
End Select
        
Next
        StDateiname = Dir("C:\ModuleExportImport\" & "*.*")
        
Do While StDateiname <> ""
            
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" Or UCase(Right(StDateiname, 4)) = ".CLS" Then
                .VBComponents.Import "C:\ModuleExportImport\" & StDateiname
            
End If
            StDateiname = Dir
        
Loop
        
For Each vbc In .VBComponents
            
If vbc.Type = 2 Then
                
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
                    .VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
                    .VBComponents.Remove .VBComponents(vbc.Name)
               
End If
            
End If
        
Next vbc
    
End With
    Application.EnableEvents = 
False
End Sub 


10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SendKey Probleme beim Projektschutz!
12.08.2005 15:05:02
MartinM
Ergänzung
ieser Teil funktioniert. DAs Projekt wird entschützt. Sobald aber der nächste Script direkt angehängt wird, ist der Schutz wieder aktiviert.
Was muss ich noch anpassen?
Public

Sub Entschützen1()
Application.EnableEvents = False
Workbooks.Open "J:\AKTIONEN\Cockpit Aktionen\Save\In Arbeit\Export.xls"
Windows("Export.xls").Activate
ActiveSheet.Unprotect Password:="******"
ActiveWorkbook.Unprotect Password:="******"
Application.EnableEvents = True
SendKeys "%{F11} %Xi {TAB 9}" & "service" & "{tab}{enter}{enter} %q"
Application.EnableEvents = False
End Sub

Besten Dank bereits jetzt an alle Helfer.
gruss MartinM
Der Weg ist das Ziel!
Anzeige
AW: SendKey Probleme beim Projektschutz!
12.08.2005 15:12:24
Fred
Hi,
wozu sind diese Zeilen gut?
Application.EnableEvents = False
mfg Fred
AW: SendKey Probleme beim Projektschutz!
12.08.2005 15:22:43
MartinM
Hallo Fred
in Diese Arbeitsmappe der Datei Import, hat es einige Makros welche nicht ausgeführt werden sollen wenn dieses Makro läuft.
Da hat es zB auto_open, before_safe, before_close. In diesen Abfang Makros wird ein Speichern erzwungen bzw. das Speichern wird je nach User speziellen Optionen ausgesetzt.
Ebenfalls hat es in Worksheet("Tabelle1") Makros wie zB. Worksheet_Activate WorkSheet_Chanche welche ein Kopieren oder ändern der Tabellenblätter verhindern sollen.
Damit all diese Makros nun bewusst nicht ausgeführt werden muss das mit application.enableevents = False verhindert werden.
Aber wenn das Script Entschützen als einzelnes gestartet wird, wird der Projektschutz aufgehoben, also sollte es nich an dem liegen.
Gruss
MartinM
Anzeige
AW: SendKey Probleme beim Projektschutz!
12.08.2005 17:25:29
Fred
Hi,
kann es sein, dass zwar ein anderes Workbook aktiv ist aber immernoch das erste VB-Projekt? Dann würde der Schutz duch die erneute Sendkeysfolge wieder gesetzt.
mfg Fred
AW: SendKey Probleme beim Projektschutz!
13.08.2005 13:36:27
MartinM
Hi Fred
Wenn ich das Workbook in dem der VB Schutz entfernt werden soll aktiviere, danach die SendKey sende, dann sollte das doch gehen oder?
Nochmals erst wenn der Teil Export direkt im Anschluss gestartet wird, ist der Schutz nicht entfernt.
Soll ich Dir die Musterdateien zustellen (geht jedoch erst am Dienstag, wir haben Feiertag im Büro)?
mfg
MartinM
AW: SendKey Probleme beim Projektschutz!
13.08.2005 17:08:15
Fred
Hi,
teste mal damit, welches das aktive Projekt ist:
MsgBox Application.VBE.ActiveVBProject.Name
Du solltest den Projekten aber eindeutige Namen geben.
Nur beim aktiven Projekt greift Sendkeys.
mfg Fred
Anzeige
AW: SendKey Probleme beim Projektschutz!
13.08.2005 22:55:26
MartinM
Hallo Fred
werde am Dienstag das Script testen.
Wenn ich recht verstehe, kann ich mit:
Application.VBE.ActiveVBProject.("Export").Activate
oder so ähnlich das Aktive Projekt bestimmen?
Aber leider habe ich die nötigen Dateien nicht hier bei mir Zuhause, weil sonst würde ich das sofort testen.
Gruss
MartinM
AW: SendKey Probleme beim Projektschutz!
13.08.2005 22:55:31
MartinM
Hallo Fred
werde am Dienstag das Script testen.
Wenn ich recht verstehe, kann ich mit:
Application.VBE.ActiveVBProject.("Export").Activate
oder so ähnlich das Aktive Projekt bestimmen?
Aber leider habe ich die nötigen Dateien nicht hier bei mir Zuhause, weil sonst würde ich das sofort testen.
Gruss
MartinM
Anzeige
AW: SendKey Probleme beim Projektschutz!
16.08.2005 13:20:49
MartinM
Hallo Fred
Das aktive Projekt ist das welches entschützt werden muss, das würde also stimmen.
habe die Musterdateien im Netz:
https://www.herber.de/bbs/user/25672.zip
Die Dateien im selben Ordner ablegen und ImportExport.xls starten.
mit dem Button Schaltfläche1 wird der Script gestartet
Gruss MartinM
Der Weg ist das Ziel!
AW: SendKey Probleme beim Projektschutz!
16.08.2005 15:03:25
MartinM
Hallo Fred und alle die das selbe Problem haben bzw. hatten
hier die Lösung:


   
Sub Import_Export()
    Entschützen1
    Export
    Entschützen2
    Import
End Sub
'dies ist die Lösung, der Schutz wird in diesem Sub entschützt und jetzt funktioniert es
'keine Ahnung warum es vorher nicht funktioniert hat.

Sub VBA_Kennwort()
  
Dim FreiSchaltCode As String
  Application.ScreenUpdating = 
False
  FreiSchaltCode = "service"
  SendKeys ("%{F11}"), 
True
  
If Application.VBE.ActiveVBProject.Protection Then
    
Select Case Val(Application.Version)
      
Case 5 To 8
        SendKeys ("%xs" & FreiSchaltCode & "{ENTER}{ENTER}"), 
True
      
Case Else
        SendKeys ("%xi" & FreiSchaltCode & "{ENTER}{ENTER}"), 
True
        SendKeys ("%Dh"), 
True
    
End Select
  
End If
  Application.ScreenUpdating = 
True
End Sub

Public
 Sub Entschützen1()
    Application.DisplayAlerts = 
False
    Application.EnableEvents = 
False
    Workbooks.Open "J:\AKTIONEN\Cockpit Aktionen\Save\In Arbeit\Export.xls"
    Windows("Export.xls").Activate
    ActiveSheet.Unprotect Password:="******"
    ActiveWorkbook.Unprotect Password:="******"
    Application.EnableEvents = 
True
    MsgBox Application.VBE.ActiveVBProject.Name
    VBA_Kennwort
    
'SendKeys "%{F11} %Xi {TAB 9}" & "service" & "{tab}{enter}{enter} %q"
    Application.EnableEvents = False
    
End Sub
    
Sub Export()
    
Dim vbc As Object, iCounter As Integer, cType As String, StDateiname As String
    
For Each vbc In Workbooks("Export.xls").VBProject.VBComponents
        
With vbc.CodeModule
            
For iCounter = 1 To .CountOfLines
                
If .ProcOfLine(iCounter, 0) > "" Or InStr(1, .Lines(iCounter, 1), "Dim") <> 0 _
                
Or InStr(1, .Lines(iCounter, 1), "Public") <> 0 Or InStr(1, .Lines(iCounter, 1), "Type") <> 0 _
                
Or InStr(1, .Lines(iCounter, 1), "Static") <> 0 Or InStr(1, .Lines(iCounter, 1), "Declare") <> 0 Then
                    
Select Case vbc.Type
                        
Case 1: cType = ".bas"
                        
Case 2, 100: cType = ".cls"
                        
Case 3: cType = ".frm"
                    
End Select
                    Workbooks("Export.xls").VBProject.VBComponents(vbc.Name).Export "C:\ModuleExportImport\" & vbc.Name & cType
                    
Exit For
                
End If
            
Next iCounter
        
End With
    
Next vbc
    
End Sub
    
Sub Entschützen2()
    Application.EnableEvents = 
False
    Application.AskToUpdateLinks = 
False
    Workbooks.Open "J:\AKTIONEN\Cockpit Aktionen\Save\In Arbeit\Import.xls"
    Windows("Import.xls").Activate
    ActiveSheet.Unprotect Password:="******"
    ActiveWorkbook.Unprotect Password:="******"
    Application.EnableEvents = 
True
    VBA_Kennwort
    
'SendKeys "%{F11} %Xi" & "service" & "{tab}{enter}{enter} %q"
    Application.EnableEvents = False
    
End Sub
    
Sub Import()
    
Dim vbc As Object, iCounter As Integer, cType As String, StDateiname As String
    Windows("Export.xls").Activate
    Worksheets("Meldeblatt").Range("A1:IV65536").Copy
    Windows("Import.xls").Activate
    
With Range("A1")
        .PasteSpecial Paste:=xlPasteFormats
        .PasteSpecial Paste:=xlPasteValidation, Operation:=xlNone, _
            SkipBlanks:=
False, Transpose:=False
    
End With
    
With ActiveWorkbook.VBProject
        
For Each vbc In .VBComponents
            
Select Case vbc.Type
                
Case 1, 2, 3: .VBComponents.Remove .VBComponents(vbc.Name)
                
Case 100
                
With vbc.CodeModule
                    .DeleteLines 1, .CountOfLines
                
End With
            
End Select
        
Next
        StDateiname = Dir("C:\ModuleExportImport\" & "*.*")
        
Do While StDateiname <> ""
            
If UCase(Right(StDateiname, 4)) = ".BAS" Or UCase(Right(StDateiname, 4)) = ".FRM" Or UCase(Right(StDateiname, 4)) = ".CLS" Then
                .VBComponents.Import "C:\ModuleExportImport\" & StDateiname
            
End If
            StDateiname = Dir
        
Loop
        
For Each vbc In .VBComponents
            
If vbc.Type = 2 Then
                
If Left(vbc.Name, 5) = "Diese" Or Left(vbc.Name, 7) = "Tabelle" Then
                    .VBComponents(Left(vbc.Name, Len(vbc.Name) - 1)).CodeModule.InsertLines 1, vbc.CodeModule.Lines(1, vbc.CodeModule.CountOfLines)
                    .VBComponents.Remove .VBComponents(vbc.Name)
               
End If
            
End If
        
Next vbc
    
End With
    Application.EnableEvents = 
True
    Application.DisplayAlerts = 
True
    Application.AskToUpdateLinks = 
True
  
End Sub 


Gruss MartinM
Der Weg ist das Ziel!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige