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

Abfrage ob bestimmte Mappe schon offen

Abfrage ob bestimmte Mappe schon offen
17.12.2007 00:26:03
Wild
Hallo zusammen
Ich habe wieder einmal ein Kleines Problemchen! Ich denke für euch ist das eine Kleinigkeit aber für mich ein Riesenproblem.
Ich habe eine Tabelle mit Command-Buttons Nr. 1 - 135 darauf.
Jeder Button führt ein Makro aus.
Nun sollte aber zuerst beim Drücken eines Buttons abgefragt werden ob eine Tabelle mit dem Namen "Daten.xls" schon offen ist.
Ist "Daten.xls" noch nicht offen so soll eine Meldung erscheinen "Druckmodus ist noch nicht aktiv" und bei klick auf OK soll das Makro beendet werden.
Ist "Daten.xls" jedoch offen soll mit dem abarbeiten des Makros begonnen werden.
Hier ist der Code eines Makros das abgearbeitet werden soll aber erst nach der Prüfung.

Sub Makro6001()
Windows("Daten.XLS").Activate
Range("A1:V34").Select
Sheets("01").Select
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0.078740157480315)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0.078740157480315)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = True
.PrintNotes = False
'.Druckqualität = 300
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA5
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 80
frmDruckmenü.Show
End With
Windows("Drucken.XLS").Activate
End Sub


Vielen herzlichen Dank schon im voraus
MfG Wild Rolf

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage ob bestimmte Mappe schon offen
17.12.2007 00:47:22
Daniel
hi
mit diesem Mako kannst du prüfen, ob eine bestimmte Datei geöffnet ist:

Sub PrüfungObDateigeöffnet()
Dim wb As Workbook
Set wb = Nothing
On Error Resume Next
Set wb = Workbooks("Daten.xls")
On Error GoTo 0
If wb Is Nothing Then
MsgBox "Daten.xls ist nicht geöffnet"
Else
MsgBox "Daten.xls ist geöffnet"
End If
End Sub


Gruß, Daniel

AW: Abfrage ob bestimmte Mappe schon offen
17.12.2007 01:12:00
Wild
Hi Daniel
Ich habe deinen Code in mein Makro eingebaut.
Bei geöffnetem Daten.xls funktionierts prima MsgBox "Daten.xls ist geöffnet" kommt und Makro wird weiter abgearbeitet.
Ohne offene Daten.xls kommt zwar die MsgBox "Daten.xls ist nicht geöffnet" aber das Makro wird nicht abgebrochen sondern läuft bei meiner ersten Zeile weiter. Was logischerweise eine Fehlermeldung auslösst.
Habe hier noch das Makro mit deinem Code darin.

Sub Makro6135()
'von hir an ist Code von Herber Forum
Dim wb As Workbook
Set wb = Nothing
On Error Resume Next
Set wb = Workbooks("Daten.xls")
On Error GoTo 0
If wb Is Nothing Then
MsgBox "Daten.xls ist nicht geöffnet"
Else
MsgBox "Daten.xls ist geöffnet"
End If
'Bis hier ist Code von Herber
Windows("Daten.XLS").Activate
Range("A1:V34").Select
Sheets("06").Select
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0.275590551181102)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0.078740157480315)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = True
.PrintNotes = False
'.Druckqualität = 300
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA5
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 80
frmDruckmenü.Show
End With
Windows("Drucken.XLS").Activate
End Sub


Kannst du mir hier villeicht noch weiterhelfen?
Gruss Rolf

Anzeige
AW: Lösung gefunden !!!!!!
17.12.2007 01:33:13
Wild
Hi Daniel
Hab meinen Kopf etwas schräg gehalten und da ist mir doch tatsächlich die Idee gekommen das ich _ in Dein Code noch ein Exit

Sub einfügen könnte. Und siehe da es funktioniert wunderprächtig!!!!!!!
Hier Nun mein Ergebnis.


Sub Makro6135()
'von hir an ist Code von Herber Forum
Dim wb As Workbook
Set wb = Nothing
On Error Resume Next
Set wb = Workbooks("Daten.xls")
On Error GoTo 0
If wb Is Nothing Then
MsgBox "Daten.xls ist nicht geöffnet"
Exit Sub
Else
MsgBox "Daten.xls ist geöffnet"
End If
'Bis hier ist Code von Herber
Windows("Daten.XLS").Activate
Range("A1:V34").Select
Sheets("06").Select
With ActiveSheet.PageSetup
.PrintTitleRows = ""
.PrintTitleColumns = ""
End With
ActiveSheet.PageSetup.PrintArea = ""
With ActiveSheet.PageSetup
.LeftHeader = ""
.CenterHeader = ""
.RightHeader = ""
.LeftFooter = ""
.CenterFooter = ""
.RightFooter = ""
.LeftMargin = Application.InchesToPoints(0.275590551181102)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0.275590551181102)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0.078740157480315)
.FooterMargin = Application.InchesToPoints(0)
.PrintHeadings = False
.PrintGridlines = True
.PrintNotes = False
'.Druckqualität = 300
.CenterHorizontally = True
.CenterVertically = False
.Orientation = xlLandscape
.Draft = False
.PaperSize = xlPaperA5
.FirstPageNumber = xlAutomatic
.Order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 80
frmDruckmenü.Show
End With
Windows("Drucken.XLS").Activate
End Sub


Vielen vielen herzlichen Dank nocheinmal.
Habe schon immer gewusst das hier nur Experten sind.
Mit freundlichen Grüssen
Rolf

Anzeige
Na, dann gratuliere, aber merk' dir wenigstens...
17.12.2007 02:13:00
Luc:-?
...auch, was ich sonst noch zur Fehlerbehandlung geschrieben habe, Rolf...!
Das kannst du sicher eines Tages brauchen, wenn du auch mal "Experte" sein willst... ;-)
Gruß Luc :-?

AW: Lösung gefunden !!!!!!
17.12.2007 11:11:00
Daniel
Hi
Exit Sub innerhalb vom Code ist immer ein bisschen gefährlich, vorallem dann, wenn man bestimmte Einstellungen beim Makro-Start verändert hat (z.B. Application.Calculation, Application.EnableEvents), weil man dann gerne vergisst, die Einstellungen auch bei Exit Sub wieder zurückzusetzen.
Programmiertechnisch sauberer im Sinne der Strukturierten Programmierung wäre gewesen, deinen Makrocode innerhalb des IF-Blocks zu schreiben, also direkt nach (oder anstelle von)

MsgBox "Daten.xls ist geöffnet"


Gruß, Daniel

Anzeige
AW: Lösung gefunden !!!!!!
18.12.2007 00:07:00
Wild
Hi Luc Hi Daniel
Klar ist meine Lösung nicht das gelbe vom Ei.
Ich bin aber schon froh das mein Makro nun das macht was ich gerne möchte.
Wie Luc schon sagt. Ich werde mich noch tiefer in die Materie einarbeiten müssen und ich will auch noch mehr dazulernen. Nur schon um die Antwort von Luc besser zu verstehen.
Ein Experte? Nein das will ich nicht werden. Aber so gut das ich meine Macros selber schreiben kann das dann schon.
Ich weis ja wo die guten Experten anzutreffen sind wenn ich dann mal nicht mehr weiter komme.
In diesem Sinne noch einmals vielen herzlichen Dank
Mit freundlichen Grüssen
Rolf

Anzeige
Bitte sehr und viel Erfolg! Gruß owT
18.12.2007 04:40:48
Luc:-?
:-?

Das könntest du einfach durch die Provo...
17.12.2007 01:07:00
Luc:-?
...zierung eines Fehlers feststellen, Rolf,
z.B. If IsError(Workbooks("Daten.xls").Name) Then MsgBox "...", ..., "..." .
Dann muss aber am Anfang des Pgms entweder OnError Resume Next stehen oder, falls du OnError GoTo fmarke benutzt, musst du die Err.Number, des Fehlers, der auftritt, wenn die Datei nicht geöffnet ist, abfragen und in positivem Vglfall zum nächsten Befehl (also der MsgBox-Ausgabe) zurückkehren: If Err.Number = ... Then Resume Next
Übrigens kann man auch mehrere Fehler (gleichzeitig) so behandeln, indem man entweder mit If...Then...Else bzw Select Case arbeitet oder aber bei gleichen Bezeichnungsteilen in Err.Description verschiedener Fehler diesen Bestandteil mit If Instr(Err.Description, "...") > 0 Then ... abfragt.
Gruß Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige