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

Merkwürdiges (schwieriges?) Problem

Merkwürdiges (schwieriges?) Problem
29.07.2003 09:38:56
Franz W.
Hallo Fachleute,
ich stolpere grad über ein extrem merkwürdiges Ding. Mit folgendem Code, den ich hier von Boris bekommen habe, prüfe ich ob eine Datei schon geöffnet ist, wenn nicht soll sie geöffnet werden.
On Error Resume Next
Set sWb = Workbooks("RECHNUNGEN_EH.xls")
If Not IsObject(sWb) Then Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
Im Zusammenhang in einem längeren Makro klappt's auch.
Nun möchte ich nur diesen CodeTeil verwenden, um eine Datei zu öffnen falls sie noch nicht geöffnet ist:

Sub Open_RechnungenEH()
On Error Resume Next
Set sWb = Workbooks("RECHNUNGEN_EH.xls")
If Not IsObject(sWb) Then Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
End Sub

Das Makro klappt jedesmal, wenn die Datei zu ist und geöffnet werden muss.
Rufe ich das Makro auf, wenn die Datei RECHNUNGEN_EH schon geöffnet ist, tut sich nichts, ist klar.
Schließe ich die Datei RECHNUNGEN_EH daraufhin und rufe dann das Makro erneut auf, klappt's nicht mehr !! Die Datei RECHNUNGEN_EH wird nicht mehr geöffnet !!
Schließe und öffne ich die Datei, in der das Makro drin steht, dann geht's wieder!!
Muss da irgendwo irgendwas zurückgesetzt werden? Oder woran kann das liegen?
Vielen Dank schon mal
Grüße
Franz

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 09:41:56
Hajo_Zi
Hallo Franz
ich habe mir angewöhnt grundsätzlich alle Variablen die mit Set zugewiesen wurde am Ende des Codes zu löschen
Set sWb=Nothing
vielleicht reicht dies schon.
Gruß Hajo

Schlimmer als vorher :-)))))
29.07.2003 09:53:12
Franz W.
Hallo Hajo,
vielen Dank für Deinen Tipp. Aber jetzt macht's der Code überhaupt nur noch 1 Mal! Auch wenn die Datei RECHNUNGEN_EH.xls nach dem ersten Aufruf wieder geschlossen wird, ein zweites Mal wird sie nicht mehr geöffnet! Und es ist egal, wo ich das Set sWb=Nothing
einsetze:

Sub Open_RechnungenEH()
On Error Resume Next
Set sWb = Workbooks("RECHNUNGEN_EH.xls")
If Not IsObject(sWb) Then Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
Set sWb = Nothing
On Error GoTo 0
End Sub

oder:

Sub Open_RechnungenEH()
On Error Resume Next
Set sWb = Workbooks("RECHNUNGEN_EH.xls")
If Not IsObject(sWb) Then Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
Set sWb = Nothing
End Sub

Der Effekt ist jedesmal derselbe.
Beste Grüße
Franz

Anzeige
AW: noch offen
29.07.2003 10:05:36
Hajo_Zi
Hallo Franz
ich bin nun nicht an meinen Homecomputer und bei Hans kann schleicht gesucht werden. Code ob eine Datei vorhanden ist habe ich schon paar mal gepostet.
Der Code ist eigenartig programmiert

Sub Open_RechnungenEH()
On Error Resume Next ' es werden alle Fehlermeldungen abgeschaltet
Set sWb = Workbooks("RECHNUNGEN_EH.xls") ' diese Zeile löst schon einen Fehler aus
If Not IsObject(sWb) Then Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
Set sWb = Nothing
End Sub

da hätte man einiges sparen können

Sub Open_RechnungenEH()
On Error Resume Next
Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
End Sub

das wäre das gleiche. Beide code finde ich keine gute programmierung, man sollte schon Fehler vermeiden und Variablen Definieren.
Leider habe ich jetzt keinen Ansatz.
Gruß Hajo

Anzeige
AW: noch offen
29.07.2003 10:18:04
Nepumuk
Hallo Hajo,
durch das setzen auf Nothing wird aus einer nicht deklarieren Variablen eine Objetvariable und die gibt mit der Abfrage IsObjekt immer True zurück.
Gruß
Nepumuk

Code von Dir, Hajo
29.07.2003 10:50:10
Franz W.
Hallo Hajo,
nachdem Du das oben geschrieben hast, hab ich mal einen Code rausgesucht, den ich in letzter Zeit von Dir bekommen habe:

Sub Datei_vorhanden()
'   von Berti Koern
Dim Fso, Dateiname
Set Fso = CreateObject("Scripting.FileSystemObject")
Dateiname = "D:\Eigene Dateien\Hajo\Adresse.xls"
'   Ergänzung von Hajo: öffnen der Datei, wenn vorhanden
MsgBox Fso.FileExists(Dateiname)
If Fso.FileExists(Dateiname) Then
Workbooks.Open Dateiname
End If
End Sub

Aber auch damit fragt er bei schon geöffneter Datei RechungenEH.xls ob er sie noch mal öffnen soll. Es müsste also nach Möglichkeit automatisch dieselbe Abfrage mit "NEIN" beantwortet werden.
Grüße
Franz

Anzeige
AW: Datei schon offen
29.07.2003 11:00:19
Hajo_Zi
Hallo Franz
der Code prüft ob die Datei vorhanden ist, nicht offen. Der müßte ungefähr so aissehen.

Sub Offen()
Dim ByI As Boolean
Dim ObI As Integer
For InI = 1 To Workbooks.Count
If Workbooks(InI).Name = "Mappe2.xls" Then
ByI = True
Exit For
End If
Next InI
If ByI = False Then MsgBox "noch Öffnen"
End Sub

Gruß Hajo

Hyperlink?
29.07.2003 11:04:20
Franz W.
Hallo Hajo,
vielen Dank. Aber bevor ich's teste (und testen werde ich es sicher, schon zum Lernen), eine andere Frage: es geht mir in diesem ganz speziellen Fall nur ums Öffnen der Datei. Weiterer Code soll hier nicht ausgeführt werden. Ich hab das jetzt mal mit einem Hyperlink probiert. Und das geht, egal ob die Datei offen ist oder ob sie zu ist. Auch egal wie oft sie schon offen oder zu war. Spricht aus Deiner fachmännischen Sicht irgendwas gegen einen Hyperlink für diesen Einsatz?
Grüße
Franz

Anzeige
Ja, das macht er!
29.07.2003 11:13:17
Franz W.
Hallo Hajo,
ja, damit geht's (InI hab ich als Long dimensioniert, war das richtig?). Allerdings wechselt er im Gegensatz zum Hyperlink nicht gleich dorthin. Aber ansonsten gibt's hier keine Fehler mehr.
Vielen Dank und beste Grüße
Franz

AW: Ja, das macht er!
29.07.2003 11:16:21
Hajo_Zi
Hallo Franz
wenn Du mehr als 32 tausend (und par hundert) Dateien auf hast ist dies richtig mit Long. Ansonsten würde auch Byte reiche mit 255 Dateien.
Jeder hat so sein Fachgebiet und Hyperlink gehört nicht zu meinem .
Gruß Hajo

Stimmt war übertrieben ;-))
29.07.2003 11:23:53
Franz W.
Hallo Hajo,
ja war Schmarrn mit Long, sehe ich ja ein....:-((
Deinen Code würde ich ja auch gerne einsetzen. Gibt es noch eine Möglichkeit, die bereits geöffnete Datei zu aktivieren?
Wenn sie vorher zu war, ist sie automatisch aktiv. Aber wenn sie schon offen ist, bleibt er in der Ursprungsdatei. Habe es so versucht, tut aber nichts:
Workbooks("RECHNUNGEN_EH.xls").Sheets("Offene").Activate
(Aber nur, wenn Du noch magst!!)
Grüße
Franz

Anzeige
AW: Stimmt war übertrieben ;-))
29.07.2003 11:27:26
Hajo_Zi
Hallo Franz
mit select bist Du bei mir an der falschen Adresse. Select usw. ist zu 99% nicht notwendig.
Erst die Mappe Select
dann die Tabelle.
Habe ich es in einem meiner Beiträge anklingen lassen das ich nicht mehr Antworten will, dann endschuldge ich mich dafür. So sollte es nicht herrüberkommen.
Gruß Hajo

Klappt alles!
29.07.2003 11:38:46
Franz W.
Hallo Hajo,
nein, von Dir aus ist überhaupt nichts angeklungen. Nur habe ich so langsam ein schlechtes Gewissen, weil ich Dich derartig löchere!!! Aber das dürfte jetzt ohnehin das letzte zu diesem Thema sein, WEIL ES KLAPPT SO!!! UND GANZ VIELEN DANK DAFÜR!!
Dass Du ein erklärter Gegner von Select... bist, weiß ich (und meine kleine Einlassung in Klammern war auch ein bisschen darauf gemünzt) und hab mir das auch schon sehr zu HErzen genommen. Aber in diesem Fall soll die Datei ja angewählt werden um was daran zu tun. Also will ich die Möglichkeit vorgeben ohne weitere KLicks o.ä. gleich drin zu sein. Vielleicht kannst Du's mir hier ja mal nachsehen ;-)))
Besten Dank und Grüße
Franz

Anzeige
besser...
29.07.2003 10:40:13
Franz W.w
Hallo Hajo,
hab's jetzt mit Deinem Code probiert:

Sub Open_RechnungenEH()
On Error Resume Next
Workbooks.Open _
Filename:="E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls"
On Error GoTo 0
End Sub

Den Aussetzer von vorher hat er nicht mehr. Wenn jetzt allerdings die Datei RECHNUNGEN_EH.xls schon geöffnet ist, fragt er nach ob sie nochmals geöffnet werden soll. Lässt sich jetzt vielleicht noch vorgeben, dass diese Abfrage mit "Nein" beantwortet wird?? Das wär's doch dann glaub ich (auch wenn Deine Programmierseele mitdiesem Code stöhnt :-))
Grüße
Franz

Anzeige
AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 10:04:59
Ivan
hi franz
ich denke ich werde jetzt wieder kritik bekommen,
aber ich würde es so machen

Sub Open_RechnungenEH()
Application.DisplayAlerts = False
dein code
Application.DisplayAlerts = True
End Sub

gruss
ivan

AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 10:08:05
Hajo_Zi
Hallo Ivan
das bringt doch nichts, es sind doch alle Fehlermeldungen abgeschaltet mit "On Error Resume Next" gehe beim Fehler zur nächsten Anweisung, damit kommt keine Fehlermeldung.
Gruß Hajo

AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 10:20:02
Ivan
hi Hajo
der fehler ist ja kein richtiger fehler!
er kommt ja deswegen weil die datei schon geöffnet ist.
und excel nur die meldung macht datei ist bereits geöffnet.
warum soll man das nicht unterdrücken??
ODER TÄUSCHE ICH MICH DA??
gruss
ivan

Anzeige
AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 10:27:37
Hajo_Zi
Hallo Ivan
ich hatte den Beitrag Live geschrieben. Aber jetzt habe ich es doch getestet, mit Deiner Variante wird die Datei noch mal geöffnet. Veränderungen die in der Datei vorgenommen wurden und nicht gespeichert wurden sind verloren.
Gruß Hajo

AW: Merkwürdiges (schwieriges?) Problem
29.07.2003 10:37:41
Ivan
hi Hajo
tja da hast natürlich recht!
DIE FRAGE WÄRE OB FRANZ DIE DATEI ÜBERHAUPT SPEICHERN MÖCHTE.
wenn nicht kann er es verwenden und es funkt!
gruss
ivan

Ja, muss gespeichert werden ot
29.07.2003 10:41:25
Franz W.
AW: Ja, muss gespeichert werden ot
29.07.2003 10:50:52
Ivan
hi Franz
dann hast du noch die möglichkeit mit
gleich am anfang des codes dann wird sie halt gespeichert.
ActiveWorkbook.Save
gruss
ivan

Anzeige
AW: Ja, muss gespeichert werden ot
29.07.2003 10:53:23
Franz W.
Hallo Ivan,
ja, an so ein "Von-Hinten-Rein" hab ich auch schon gedacht, wenn sich's Original nicht lösen lässt.
Vielen Dank und Grüße
Franz

AW: Ja, muss gespeichert werden ot
29.07.2003 11:03:33
Ivan
hi Franz
ich hab da noch was
vieleicht hilft das!

Function FileExist(Filename As String) As Boolean
FileExist = False
If Len(Filename) > 0 Then FileExist = (Dir(Filename) <> "")
Exit Function
End Function


Sub DateiDa()
s = FileExist("E:\bernhard\ENERGIE_HAUSGEMACHT\RechnungenEH\RECHNUNGEN_EH.xls")
MsgBox "Datei ist da"
End Sub

GRUSS
IVAN

AW: Ja, muss gespeichert werden ot
29.07.2003 11:19:34
Franz W.
Hallo Ivan,
das Konstrukt ist gut. Zumindest für einen Anfänger wie mich, da gibt's was zum lernen. Allerdings hilft es nicht weiter: denn er prüft damit ja nur die Existenz. Wenn ich statt der Meldung dann OPEN... einsetze öffnet, er die Datei. Soweit sogut. Wenn sie aber schon geöffnet ist, fragt er wieder ob er sie nochmals öffnen soll. Also dasselbe wie vorher :-((
Trotzdem danke und Grüße
Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige