Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1004to1008
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

per VBA Abfrage auf offene Datei

per VBA Abfrage auf offene Datei
29.08.2008 09:42:01
David
Hallo zusammen.
Ich habe folgendes kleine Makro:

Sub new_month()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim monat As Byte
monat = month(Range("D2").Value)
Workbooks.Open Filename:="L:\Fin\man\man 2008\cons2008.xls", _
UpdateLinks:=3, Notify:=False
Windows("cons2008.xls").Visible = False
With Cells(9, monat + 8)
.Formula = Round(.Value, 1)
End With
Windows("cons2008.xls").Visible = True
Workbooks("cons2008.xls").Close SaveChanges:=True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


Funktioniert soweit einwandfrei. Nun kann es vorkommen, dass beim Sachbearbeiter die im Makro zu öffnende/schließende Datei bereits offen ist und dort auch weiter daran gearbeitet wird.
Ich würde jetzt gern einbauen, dass die Datei nur dann geöffnet und geschlossen wird, wenn sie aktuell geschlossen ist, sonst soll nur der Rest des Makros ausgeführt werden.
Ich weiß allerdings nicht, wie ich in VBA die Abfrage formulieren muss, ob eine bestimmte Datei offen ist.
Kann mir da jemand bitte helfen? Danke.
Gruß
David

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per VBA Abfrage auf offene Datei
29.08.2008 09:45:11
Hajo_Zi
Hallo David,
'**************************************************
'* H. Ziplies *
'* 05.02.08 *
'* erstellt von Hajo.Ziplies@WEB.de *
'* [Hajo-Excel.de] *
'**************************************************
' Prüfen ob Datei auf
' Boffen = True Datei offen
BoOffen = False
For Each WbAm In Workbooks
If UCase(WbAm.Name) = UCase(StName) Then
BoOffen = True
Exit For
End If
Next
End Sub
und der Aufruf
Offen StDatei2
If BoOffen = False Then
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & StDatei2

Anzeige
AW: per VBA Abfrage auf offene Datei
29.08.2008 10:14:00
David
Hallo Hajo,
erstmal danke für die schnelle Antwort, aber irgendwie habe ich Probleme beim Einbinden ins Makro. (siehe Level ;-)
Ich habe das so verstanden, dass mit dem "Ziplie" eine Funktion definiert wird, die ich in ein separates Modul getan habe. Dabei habe ich ein Sub offen() vorangestellt.
Der Aufruf dann in meinem Makro mit offen "Dateiname".
Das funzt leider nicht.
Kannst du mir hier noch mal unter die Arme greifen? Danke.
Gruß
David
AW: per VBA Abfrage auf offene Datei
29.08.2008 10:28:00
Hajo_Zi
Hallo David,
ich habe ausversehen die erste Zeile vergessen
Sub Offen(StName As String)
Gruß Hajo
AW: per VBA Abfrage auf offene Datei
29.08.2008 10:44:00
David
Hallo Hajo,
gut, bin ich doch nicht so blöd wie ich dachte. ;-)
Jetzt hab ich das soweit hinbekommen, dass das Makro ohne Fehler durchläuft. Allerdings wird der Wert aus der "Sub offen()" nicht richtig ausgewertet.
Wenn ich mit dem Debugger den Verlauf verfolge, ist am Ende der Unter-Prozedur der Wert BoOffen = True, zurück im Makro ist er auf einmal wieder "false".
Hier zum Vergleich nochmal der komplette Code:

Sub new_month()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim monat As Byte, StDatei2 As String, BoOffen As Boolean
monat = month(Range("D2").Value)
StDatei2 = "conspl2008.xls"
Offen StDatei2
If BoOffen = False Then
Workbooks.Open Filename:="L:\Finanz\manacs\manacs 2008\" & StDatei2, _
UpdateLinks:=3, Notify:=False
Windows("conspl2008.xls").Visible = False
End If
With Cells(9, monat + 8)
.Formula = Round(.Value, 1)
End With
Windows("conspl2008.xls").Visible = True
Workbooks("conspl2008.xls").Close SaveChanges:=True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Sub Offen(StName As String)
BoOffen = False
For Each wbam In Workbooks
If UCase(wbam.Name) = UCase(StName) Then
BoOffen = True
Exit For
End If
Next
End Sub


Was mache ich noch falsch?

Anzeige
AW: per VBA Abfrage auf offene Datei
29.08.2008 10:52:00
Hajo_Zi
Hallo David,
hast Du im Modul die Zeile Public BoOffen as Boolean (Zu Beginn des Moduls)?
Gruß Hajo
AW: per VBA Abfrage auf offene Datei
29.08.2008 11:16:00
David
Jetzt ja. ;-)
Ok, das Thema 'Variablen und Definitionen' hab ich noch nicht ganz so durchschaut.
Nach einigem Rumprobieren habe ich's dann hinbekommen. Funzt jetzt tadellos.
Danke (mal wieder).
Gruß
David
AW: per VBA Abfrage auf offene Datei
29.08.2008 12:20:00
Jogy
Mach doch aus

Sub Offen(StName as String)

ein


Function Offen(StName as String) as Boolean


In der Funktion ersetzt Du dann noch BoOffen durch Offen und in Sub new_month das


StDatei2 = "conspl2008.xls"
Offen StDatei2
If BoOffen = False Then

durch


If Offen("conspl2008.xls") = False Then

Damit vermeidest Du die globale Variable.
Gruss, Jogy

Anzeige
AW: per VBA Abfrage auf offene Datei
29.08.2008 12:23:00
David
Das ginge sicher auch, aber so lerne ich wenigstens auch noch ein wenig dazu.
Danke für den Tip.
Gruß
David
AW: per VBA Abfrage auf offene Datei
29.08.2008 12:43:00
Jogy
Als weiteren Tip: Du solltest relativ schnell lernen, globale Variablen nur dann einzusetzen, wenn es wirklich notwendig und sinnvoll ist. Die können recht schnell zu unangenehmen Nebeneffekten führen.
Bei einem solch kurzen Makro ist das kein Thema, bei längeren Programmen dagegen schon.
Gruss, Jogy
@Hajo: Verständnisfrage
29.08.2008 15:17:56
David
Hallo Hajo,
nochmal kurz zu deinem Makro eine Frage:
in der Zeile

For Each wbam In Workbooks


Wofür steht das WbAm (Wb=Workbook ist soweit klar)? Das ist mir neu.
Danke und Gruß
David

Anzeige
AW: Datei offen
29.08.2008 15:28:15
Hajo_Zi
Hallo David,
ich sehe gerade die Variable ist auch nicht definiert
Public WbAm As Workbook
Ich habe Sie in meinem Code als Public efiernt da dies eine Prozedur ist die ich in mehreren Modulen v3erwende und im Modul mdl_Prozedur ablege.
Ich handhabe es so das ich die ersten 2 Buchstaben als Kennzeichen für den Typ benutze und erst danach den Variablennamen und der ist in diesem Fall am also WB für Workbook und Am für Variable.
Gruß Hajo
AW: Datei offen
29.08.2008 15:30:48
David
Danke für die Info. Der Code funzt bei mir auch ohne die Public-Definition, allerdings habe ich auch keine zwingenden Definitionen eingestellt
Gruß
David
Anzeige
AW: Datei offen
29.08.2008 15:34:00
Hajo_Zi
Hallo David,
ich habe es eingestellt und soweit es mir bekannt, haben es viele eingestellt. Man verhindert damit schreibfehler.
Gruß Hajo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige