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

Verweis beim Öffnen automatisch aktivieren?

Verweis beim Öffnen automatisch aktivieren?
22.10.2006 07:13:03
Kasimir
Hallo Leúte,
ich hoffe, mir kann jemand helfen. Mit nachfolgendem Makro kopiere ich ein Makro und erstelle ein Workbooks-Open-Ereignis, mit dem mir der Verweis „Windows ScriptHost Object Model“ beim Öffnen der Datei automatisch aktiviert werden soll, in eine Exceldatei.


Sub Versionsprüfung_kopieren(Dateiname As Variant)
    
Dim Pfad As String
Pfad = ThisWorkbook.Path & "\"
Workbooks("Terminkalender.xls").VBProject.VBComponents("Versionsprüfung").Export Pfad & "Versionsprüfung.bas"
    
With ActiveWorkbook.VBProject
    'Modul kopieren
    .VBComponents.Import Pfad & "Versionsprüfung.bas"
    .VBComponents("Versionsprüfung").Name = "Versionsprüfung"
    'Workbook_Open-Ereignis kopieren
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 2, "Private Sub Workbook_Open()"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 3, "Dim Verweis As Object"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 4, "On Error Resume Next"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 5, "Set Verweis = Application.VBE.ActiveVBProject.References"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 6, "Verweis.Remove Verweis(""wshom.ocx"") ' verweis löschen"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 7, "Verweis.AddFromFile ""wshom.ocx"" 'verweis neu setzen"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 8, ""
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 9, "Prüfung_Exportdateien"
    .VBComponents("DieseArbeitsmappe").CodeModule.InsertLines 10, "End Sub"
End With
    
End Sub


Der Verweis, der aktiviert werden soll, wird benötigt, um Daten aus der Registry auszulesen.
Nun mein Problem. Wird die Datei, in die der obige Code durch das Makro erstellt wurde, das 1. Mal geöffnet, wird der Verweis leider nicht gesetzt. Erst beim 2. Mal wird der Verweis gesetzt. Hat jemand eine Idee, warum das so ist? Ich komme leider nicht dahinter.
Danke Euch und Gruß,
Kasimir

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verweis beim Öffnen automatisch aktivieren?
22.10.2006 11:58:02
Reinhard
Hi Kasimir,
die Variable Dateiname wird nie benutzt!?
Und so wie ich das sehe schreibst du in die aktive Datei ein Workbook_Open Code, der m.E. erst dann läuft wenn die Datei geschlossen und wieder geöffnet wird.
Ich kann dir ein Klassenmodul von Nepumuk anbieten dass in jeder Datei die geöffnet wird automatisch einen Verweis setzt, Interesse?
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Verweis beim Öffnen automatisch aktivieren?
22.10.2006 12:47:47
Kasimir
Hallo Reinhard,
danke Dir für Deine Antwort. Ich bin auf jeden Fall an dem Code von Nepumuk interessiert.
Die Variable Dateiname ist wirklich überflüssig. Das ist noch ein Überbleibsel von meinen Versuchen.
Du siehst das schon richtig, dass die Datei, in dass der Workbook_Open-Code durch das Makro kopiert, bzw. geschrieben wird, erst geschlossen und dann wieder geöffnet werden muss, damit der kopierte Code funktioniert. Das ist ja das Problem. Wenn ich die Datei, in dass das Workbook_Open-Ereignis kopiert wurde, das 1. Mal öffne, wird der Verweis nicht gesetzt. Erst wenn ich die Datei schließe und erneut öffne, wird der Verweis gesetzt. Aber ich benötige den Verweis schon beim 1. Öffnen, da in dem Makro "Prüfung_Exportdateien", dass ja in dem Workbook_Open_Ereignis am Ende aufgerufen wird, Registryeinträge ausgelesen werden und da kommt ein Laufzeitfehler, da der Verweis nicht gesetzt ist.
Hast Du eine Idee?
Danke und Gruß,
Kasimir
Anzeige
AW: Verweis beim Öffnen automatisch aktivieren?
22.10.2006 13:11:03
Reinhard
Moin Kasimir,
****Hast Du eine Idee?***
Ja :-) Trage dich in Profile ein, kannst ja deine emailadresse kaschieren so wie ich, dann schicke ich dir einfach meine personl.xls, spart mir Rumkopiererei*g und du kannst in Zukunft falls mal jm deine emailadresse haben will, einfach auf die Profilliste verweisen.
Wenn du dieses Klassenmodul in deiner personl.xls hast, wird der Verweis bei jeder datei gesetzt, damit müßte doch dein problem erschlagen sein *denk*
Gruß
Reinhard
AW: Verweis beim Öffnen automatisch aktivieren?
22.10.2006 13:23:11
Reinhard
Hallo,
wechen dem Archiv stelle ichs doch hier rein.
In jeder Datei wird der Verweis auf MS Forms2.0 gesetzt, dafür steht dieser GUID-Ausdruck. Es geht auch mit Verweis setzen auf eine xla, dll usw, aber weiß grad nihct wie da die Syntax ist. Wäre nett wenn dass jmd umschreibt oder mitteilt wie/wo man die GUID Nummer für den Verweis von Kasimir herausbekommt.
Code steht in Personl.xls, man braucht ein Klassenmodul dass clsApplication heißt.
Warum auch immer war ne Zeitlang immer die Berechnung auf manuell gestellt, hatte nie rausgefunden warum das passiert, jedenfalls seitdem ich das mit reinschrieb ist das Problem weg, deshalbb das mit Calculation im Code.
Diese Arbeitsmappe
Option Explicit
Private objApplication As clsApplication
Private Sub Workbook_Open()
'Application.Caption = "Reinhard"
Set objApplication = New clsApplication
Set objApplication.prpApplication = Application
End Sub

Modul1
Option Explicit
Private Const FM20_GUID = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}"
Public Sub prcAddReverence(objWorkbook As Workbook)
Dim intIndex As Integer
Dim blnFound As Boolean
On Error GoTo err_exit
With objWorkbook.VBProject.References
For intIndex = 1 To .Count
If .Item(intIndex).GUID = FM20_GUID Then
If .Item(intIndex).IsBroken Then
.Remove .Item(intIndex)
Else
blnFound = True
End If
End If
Next
If Not blnFound Then _
.AddFromGuid GUID:=FM20_GUID, Major:=2, Minor:=0
End With
objWorkbook.Application.Calculation = xlCalculationAutomatic
Exit Sub
err_exit:
MsgBox "Fehler " & CStr(Err.Number) & vbLf & _
vbLf & Err.Description, vbCritical, "Fehler"
End Sub

clsApplication
Option Explicit
Private WithEvents mobjApplication As Application
Public Property Set prpApplication(objApplication As Application)
Set mobjApplication = objApplication
End Property
Private Sub mobjApplication_NewWorkbook(ByVal Wb As Workbook)
Call prcAddReverence(Wb)
End Sub
Private Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
Call prcAddReverence(Wb)
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
ganz anderer Ansatz
ransi
Hallo Kasimir
In der Registry kannst du auch rumwurschteln ohne den Verweis mit addFromFile zu setzen.
Schau dir das hier mal an:


Sub Create_Specific_RegKey()
'(C) by Ramses
Dim MyWSH As Object, myNewRegKey As String
Dim myRegResKey As String, myRegToWriteKey As String
Set MyWSH = CreateObject("WScript.Shell")
'Es wird ein spezifischer Schlüssel in DEM Registryzweig angelegt,
'der normalerweise auch von EXCEL aus mit Get- und SaveSetting erreicht werden kann
'Mit WSH kann jedoch die gesamte Registry beschrieben,
'verändert und gelesen werden
'Hier wird zu Beispielzwecken NUR ein Unterschlüssel DemoWSH Script mit Unterschlüssel Setting
'und dem Wert "Wert1" erstellt
myNewRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
'Dem zu erstellen Schlüssel wird der Wert 100 zugewiesen
MyWSH.regWrite myNewRegKey, "100"
End Sub
Sub Read_Specific_RegKey()
'(C) by Ramses
Dim MyWSH As Object, myReadRegKey As String
Dim myRegResKey As String
'WSH Object erstellen
Set MyWSH = CreateObject("WScript.Shell")
'Es muss auch der Unter-Eintrag im Key angegeben werden
'hier die 1
myReadRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
myRegResKey = MyWSH.regread(myReadRegKey)
MsgBox "Aktueller Wert:" & myRegResKey
End Sub
Sub Change_Specific_RegKey()
'(C) by Ramses
Dim MyWSH As Object, myReadRegKey As String
Dim myRegResKey As String, myRegToWriteKey As String
Set MyWSH = CreateObject("WScript.Shell")
'Es muss auch der Unter-Eintrag im Key angegeben werden
'hier "Wert1"
myReadRegKey = "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\DemoWSH Script\Setting\Wert1"
myRegResKey = MyWSH.regread(myReadRegKey)
MsgBox "Aktueller Wert:" & myRegResKey
myRegToWriteKey = InputBox("Neuen Wert bitte eintragen:""Registry Wert ändern", myRegResKey + 10)
If Not IsNumeric(CDbl(myRegToWriteKey)) Then
    MsgBox "Der Wert muss eine Zahl sein"
    Exit Sub
End If
MyWSH.regWrite myReadRegKey, myRegToWriteKey
End Sub


ransi
Anzeige
AW: ganz anderer Ansatz
22.10.2006 13:53:54
Kasimir
Hallo Ransi, hallo Reinhard,
danke Euch beiden für Eure Lösungsvorschläge. Der Tip von Ransi ist Gold wert. Mit dem komme ich 100% weiter.
Ich hatte den Code zum Auslesen der Registry hier aus dem Archiv. Bei der Lösung von Hans Herber, wurde die Variable "wsh" als "New IWshShell_Class" und nicht als "Object" deklariert. Daher musste immer der von mir genannte Verweis gesetzt werden. Mit Ransis Lösung funktioniert es auch ohne den Verweis, super.
Danke Euch nochmal für die Lösung und noch einen schönen Sonntag,
Kasimir
Beantwortet o.T.
ransi

ransi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige