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

860to864: Makros dürfen nur in Ursprungsdatei laufen

Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 16:34:00
Peter
Guten Abend
Ich habe ein Tempalte mit verschiedenen Makros. Wenn ich nun mehrere Templates geöffnet habe und alle bis auf eines wieder schliesse und aus dem verbleibenden ein Makro aufrufe, will das Programm wieder eine geschlossene Datei öffnen. Mir ist nicht klar, weshalb das Problem auftritt.
Wenn ich das Excel ganz schliesse und nur die eine Datei aufstarte und das Makro aufrufe, läuft dieses tatellos ab, ohne eine andere Datei öffnen zu wollen.
Kann mir jemand einen Hinweis geben, wo das Problem liegen könnte?
Danke für Feedback.
Peter

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 16:44:00
Matthias
Hallo Peter,
Wie wird das Meko denn ausgerufen und in welchem Modul steht es und wie sieht es denn aus?
Gruß Matthias
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:02:20
Peter
Hallo Matthias
Das Makro steht im Modul "BeideImporte"
und lautet:
Sub Importieren()
Range("xpErstellung") = ""
Range("xkErstellung") = ""
Range("pDaten") = ""
Range("kDaten") = ""
Calculate
Call DatenPVKsHolen
Call DatenKursmailHolen
End Sub

Die Makros DatenPVKsHolen und DatenKursmailHolen
liegen wieder in anderen Modulen der gleichen Datei und sind von der Struktur her gleich, beispielsweise DatenPVKsHolen sieht wie folgt aus:
Option Explicit
Sub DatenPVKsHolen()
'On Error GoTo ErrorHandler
ThisWorkbook.Activate
Dim Bereich As Range, Feld As Range
Dim QArea As Range, QCell As Range
Dim p$, f$, r$, n%, s$, m%, ma%
Dim Anzahl$
Dim aktSheet$
Dim xpDiff As Double
Application.Calculation = xlCalculationAutomatic
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'aktSheet = ActiveSheet.Name
aktSheet = "PVK"
Worksheets("PVK").Activate
'"Zeitmessung"
Range("xpErstellung") = ""
Range("xpDatum") = Format(Date, "DD.MM.YYYY")
Range("xpStart") = Format(Time, "hh:nn:ss")
n = Cells(65536, 1).End(xlUp).Row 'ermittelt letzten Eintrag in Spalte A (Pfad)
ma = Range("ersteSpalte").Value
m = Range("letzteSpalte").Value
Set Bereich = Range("A5:A" & n) 'Bereich = alle Zellen mit Pfadangabe
Set QArea = Range(Cells(3, ma), Cells(3, m)) 'Bereich K3 : ?5 = alle Zellen mit Ref Angabe zu Import
Anzahl = 0
Range("Pdaten") = ""
Calculate
For Each Feld In Bereich
p = Feld.Value
f = Feld.Offset(0, 1)
s = Feld.Offset(0, 2)
For Each QCell In QArea
r = QCell.Value
Cells(Feld.Row, QCell.Column) = getvalue(p, f, s, r)
Application.StatusBar = "Daten werden importiert aus " & p & f & " - Eintrag in Zeile " & Anzahl + 5
Next
Anzahl = Anzahl + 1
Next
Range("xpEnde") = Format(Time, "hh:nn:ss")
xpDiff = Range("xpEnde").Value - Range("xpStart").Value
Range("xpDiff") = Format(xpDiff, "hh:nn:ss")
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.StatusBar = ""
Exit Sub
ErrorHandler:
Application.StatusBar = ""
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub

Private Function getvalue(path, File, sheet, ref)
'retrieves a value from a closed workbook
Dim arg As String
'make sure the file exists
If Right(path, 1)  "\" Then path = path & "\"
If Dir(path & File) = "" Then
getvalue = "File not found"
Exit Function
End If
'create the argument
arg = "'" & path & "[" & File & "]" & sheet & "'!" & _
Range(ref).Range("A1").Address(, , xlR1C1)
''Debug.Print arg
'execute an xlm macro
getvalue = ExecuteExcel4Macro(arg)
End Function
Gruss, Peter
Anzeige
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:07:00
Matthias
Hallo Peter,
naja, mich interessiert erstmal mehr, wie die Makros aufgerufen werden, z.B. über eine Schaltfläche oder so. Da ist dann scheinbar die Zuordnung der Schaltfläche zum Makro falsch und Excel versucht, die zugehörige Datei zu öffnen.
Gruß Matthias
P.S. Die Statuszeile setzt man zurück mit
Application.StatusBar = False
Application.StatusBar = "" löscht sie (und es erscheinen auch keine Standardmeldungen mehr).
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:11:26
Peter
Hallo Matthias
Ich rufe die Makros via separate Menuposition auf, welche ich im Modul Menuerweiterung wie folgt definiert habe (auch hier werde ich natürlich deinen Hinweis betreffend Application Statusbar noch umsetzen):
Const MenueName = "&PVK-Check"
Const Befehl1 = "&Import alle Daten"
Const Befehl2 = "&Import Daten aus PVK-Berechnungen"
Const Befehl3 = "&Import Daten aus Kursmail"

Sub Menü_Erstellen()
Dim MB As Object, MeinMenü As Object, Befehl As Object
Call Menü_Löschen
Set MB = CommandBars.ActiveMenuBar
Set MeinMenü = MB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MeinMenü.Caption = MenueName
Set Befehl = MeinMenü.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = Befehl1
.OnAction = "Machwas1"
End With
Set Befehl = MeinMenü.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = Befehl2
.OnAction = "Machwas2"
End With
Set Befehl = MeinMenü.Controls.Add(Type:=msoControlButton, ID:=1)
With Befehl
.Caption = Befehl3
.OnAction = "Machwas3"
End With
End Sub


Sub Menü_Löschen()
On Error Resume Next
CommandBars.ActiveMenuBar.Controls(MenueName).Delete
End Sub

Sub Machwas1()
' MsgBox "Daten werden importiert", vbExclamation
Application.StatusBar = "Alle Daten werden importiert"
Call Importieren
Application.StatusBar = ""
End Sub

Sub Machwas2()
Application.StatusBar = "Daten aus PVK-Berechnungen werden importiert"
Call DatenPVKsHolen
Application.StatusBar = ""
End Sub


Sub machwas3()
Application.StatusBar = "Daten aus Kursmail werden importiert"
Call DatenKursmailHolen
Application.StatusBar = ""
End Sub
Gruss, Peter
Anzeige
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:17:00
Matthias
Hallo Peter,
ich hab es nicht ausprobiert, aber versuch mal, das Menü in jeder Datei, welche die entsprechenden Makros besitzt, neu zu erstellen. Die Zuordnung siehr zwar im Code lokal aus (.OnAction = "Machwas1"), aber intern wird wohl der komplette Pfad zum Makro gespeichert.
Also versuch mal sowas (in jeder Datei, die das Menü enthalten soll):

Private Sub Workbook_Activate()
Menü_Erstellen
End Sub
Private Sub Workbook_Deactivate()
Menü_Löschen
End Sub

Gruß Matthias
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:24:06
Peter
Hallo Matthias
Danke für die Rückmeldung. Ich habe allerdings diese Routinen schon eingebaut (zusätzlich auch eine "beforeClose". Doch irgendwo bleibt die Verknüpfung zu der anderen Datei trotzdem stehen.
Gibt es irgendeine Möglichkeit, dass nach der Aktivierung einer Datei zuerst die Standardmenüs hergestellt werden und dann wieder die spezifischen Menüs aufgerufen werden können?
Gruss, Peter

Private Sub Workbook_Activate()
Menü_Erstellen
ATabellenschutz_aktivieren_alle
Application.Calculation = xlCalculationAutomatic
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Menü_Löschen
End Sub


Private Sub Workbook_Deactivate()
Menü_Löschen
End Sub

Anzeige
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:27:00
Matthias
Hi Peter,
...dass nach der Aktivierung einer Datei zuerst die Standardmenüs hergestellt werden
Was soll das bringen, das Problem sind ja die benutzerdefinierten Menübefehle, die werden ja offenbar in jeder Mappe neu erzeugt...
Setze aber mal eine MagoBox an den Anfang von Menü_Löschen und Menü_Erstellen, vielleicht hast du ja irgendwo Application.EnableEvents = True vergessen.
Gruß Matthias
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:29:29
Peter
Hallo Matthias
Danke, einleuchtende Idee. Bloss ist mir nicht ganz klar, was eine MagoBox ist.
Gruss, Peter
AW: Makros dürfen nur in Ursprungsdatei laufen
12.04.2007 17:31:37
Matthias
Hi Peter,
LOL ich meinte eine MsgBox!
Gruß Matthias
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige