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

Makroanpassung

Makroanpassung
02.02.2009 09:29:00
Ernst

Hallo Vba Experten !
Ich rufe über ein Steuerelement Calender eine xls.Liste auf,diese befindet sich in einem Ordner(Reparaturbuch) und hat folgendes Format 02.02.2009 es wird immer das aktuellste Datum herangezogen.
Wenn nun die Liste auf einem anderen Rechner aufgerufen wird kommt keine Meldung Datei bereits geöffnet sondern erst beim speichern kopie speichern.
Ich bräuchte eine Info Msg Box "Datei bereits in Verwendung ! Versuchen sie es später wieder!"
Wäre für Lösungsvorschläge dankbar.
lg.Ernst
https://www.herber.de/bbs/user/58988.xls

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makroanpassung
Ramses
Hallo
Probiers doch in der Art
...Dein Code
Dim chkWkb as Workbook
Application.DisplayAlerts = False
Application.Screenupdating = False
set chkWkb = Workbooks.open("DeineDatei.xls")
if chkWkb.readOnly = True then
msgbox "Datei schon im Gebrauch, bitte später nochmal probieren", vbinformation+vbokonly,"Fehler"
chkwkb.close False
Application.DisplayAlerts = True
Application.Screenupdating = true
exit sub
End if
Application.DisplayAlerts = True
Application.Screenupdating = true
..weiterer Code
Gruss Rainer
AW: Makroanpassung
02.02.2009 11:09:00
Ernst
Hallo Rainer !
Danke für die Antwort nur wo muss ich den code einfügen ?
und (set chkWkb = Workbooks.open("DeineDatei.xls") die ist ja variabel,das heisst es wird ja immer die Datei mit dem aktuellsten Datum geöffnet.
lg.Ernst
Anzeige
AW: Makroanpassung
02.02.2009 11:51:03
Ramses
Hallo
"...die ist ja variabel,das heisst es wird ja immer die Datei mit dem aktuellsten Datum geöffnet..."
Naja, dann pack das doch in eine Variable und übergib die Variable dem Workbooks-Open Ereignis
Allerdings solltest du dann schon sicherstellen, dass die Datei existiert, ansonsten musst du ja erst noch eine neue Datei erstellen und diese dann öffnen.
Ich hab mir deine Tabelle jetzt mal runtergeladen.
Sorry,.... aber wenn ich mir die Codes in deiner Beispielmappe ansehe, dann frage ich schon, ob du dich da nicht etwas übernimmst. Da strotzt es nur so von API Aufrufen, und du hast keine Ahnung wie du eine Variable erstellst ?
Sei mir nicht böse,... aber das was du da hochgeladen hast, dünkt mich noch nicht so richtig durchdacht.
Gruss Rainer
Anzeige
AW: Makroanpassung
02.02.2009 12:08:58
Ernst
Hallo Rainer!
da hast du leider recht was das Variable erstellen anlangt !
Aber vieleicht findest du eine Lösung.
Recht herzlichen Dank für dein Feedback.
Lg.Ernst
AW: Makroanpassung
02.02.2009 12:46:36
Ramses
Hallo
"...Aber vieleicht findest du eine Lösung...."
Du solltest dich lieber mal damit beschäftigen wie VBA funktioniert,... wie willst du das sonst verwalten ?
Immer im Forum fragen ?
Und ausserdem, die Variable hast du ja schon
Statt dieser Zeile
Workbooks.Open strSearchPath & "\" & strMyFileName
verwendest du halt ALLE diese Zeilen
Dim chkWkb as Workbook
Application.DisplayAlerts = False
Application.Screenupdating = False
set chkWkb = Workbooks.open(strSearchPath & "\" & strMyFileName)
if chkWkb.readOnly = True then
msgbox "Datei schon im Gebrauch, bitte später nochmal probieren", vbinformation+vbokonly,"Fehler"
chkwkb.close False
Application.DisplayAlerts = True
Application.Screenupdating = true
exit sub
End if
Application.DisplayAlerts = True
Application.Screenupdating = true
Also aufbauen tu ich das ganze nicht um es zu testen
Gruss Rainer
Anzeige
AW: Danke
02.02.2009 13:17:00
Ernst
Hallo Rainer !
Recht herzlichen Dank für deine Geduld.
Ich habe den Code eingefügt es kommt beim ausführen exit funktion nicht zulässig.
Habe nicht gewusst das dies so aufwändig ist.
lg.und nochmals danke Ernst
Das gibt es nicht...
02.02.2009 17:37:09
Ramses
Hallo
"...Ich habe den Code eingefügt es kommt beim ausführen exit funktion nicht zulässig...."
Du hast in der ganzen Beispielmappe keine Funktion, welche diese Meldung generieren könnte,
und mein Beispiel generiert "Exit Sub" und das funktioniert immer
Gruss Rainer
AW: Danke
02.02.2009 13:17:00
Ernst
Hallo Rainer !
Recht herzlichen Dank für deine Geduld.
Ich habe den Code eingefügt es kommt beim ausführen exit funktion nicht zulässig.
Habe nicht gewusst das dies so aufwändig ist.
lg.und nochmals danke Ernst
Anzeige
AW: Makroanpassung
03.02.2009 08:02:57
Ernst
Hallo Rainer !
Guten Morgen.
Es war mein Fehler habe die Codezeilen jetzt richtig eingefügt,(Makro läuft Fehlerfrei)jedoch bei öffnen einer Datei obwohl diese gerade in Verwendung ist kommt keine Msg Info Meldung ? Ich kann die Datei öffnen und die geöffnete wird geschlossen.
Funktioniert das nur wenn versucht wird die Datei über ein Netzlaufwerk zweimal zu öffnen ?
Wäre für Lösung dankbar.
lg.Ernst
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, ByVal _
lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
As Long, ByVal dwNewLong As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal _
hwnd As Long) As Long
Private Const GWL_STYLE As Long = -16
Private Const WS_SYSMENU As Long = &H80000
Private hWndForm As Long
Private bCloseBtn As Boolean

Private Sub UserForm_Initialize()
If Val(Application.Version) >= 9 Then
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
Else
hWndForm = FindWindow("ThunderXFrame", Me.Caption)
End If
bCloseBtn = False
SetUserFormStyle
End Sub



Private Sub SetUserFormStyle()
Dim frmStyle As Long
If hWndForm = 0 Then Exit Sub
frmStyle = GetWindowLong(hWndForm, GWL_STYLE)
If bCloseBtn Then
frmStyle = frmStyle Or WS_SYSMENU
Else
frmStyle = frmStyle And Not WS_SYSMENU
End If
SetWindowLong hWndForm, GWL_STYLE, frmStyle
DrawMenuBar hWndForm
End Sub



Private Sub optCloseOn_Click()
bCloseBtn = True
cmdBeenden.Cancel = True
SetUserFormStyle
End Sub



Private Sub optCloseOff_Click()
bCloseBtn = False
cmdBeenden.Cancel = False
SetUserFormStyle
End Sub


' ---------------------------------------------------------------------------


Private Sub Calendar1_Click()
Dim antwort As Variant
Dim Eigenschaft
Dim blnVorhanden As Boolean
Dim MyVorlage As String, MyDatei As String
Dim Pos As Integer
Dim MyVerzeichnisNeu As String, MyDateinameNeu As String
Dim MyDateinameDatum As String
Dim strSuchOrdner As String, strSearchPath As String
Dim strMyFileName As String
Dim dtmSearchDate As Date
Dim lngFilesInFolder As Long
Dim i As Long
strSuchOrdner = "Reparaturbuch"
Unload UserForm1
antwort = MsgBox("Wenn Sie mit JA weitermachen wird ein bestehendes Reparaturbuch geöffnet" &  _
Chr(10) & _
"bzw. wenn noch kein Reparaturbuch mit dem ausgewähltem Datum besteht, dann wird ein neues" &  _
Chr(10) & _
"Reparaturbuch auf der Basis der letzten vorhandenen Reparaturbuchdatei erstellt. Wollen Sie  _
das ?", vbYesNo, "Weitermachen oder Zurück zur Auswahl")
If antwort = vbYes Then
' es wird immer die Datei mit dem jüngsten Datum im Unterordner \Reparaturbuch gesucht und
' als Vorlage für die neue Datei mit dem aktuellen Datum verwendet. Eine Abspeicherung über
' docProperty entfällt somit !
' Es werden jedoch nur max 100 Tage zurückgerechnet, wenn in diesem Zeitraum keine Datei mit  _
dem
' entsprechenden Datum vorliegt, dann gibts ein Problem - dh. das Makro wird gestoppt
'Prüfen ob der Ordner \Reparaturbuch existiert
strSearchPath = ThisWorkbook.Path & "\" & strSuchOrdner
If CheckIfFolderExists(strSearchPath) = False Then
MsgBox "Das Verzeichnis " & strSearchPath & " existiert nicht." & Chr(10) & _
"Zur Ausführung der folgenden Aktionen ist es jedoch unbedingt erforderlich !"
Exit Sub
End If
'Prüfen ob Dateien im Ordner enthalten sind - ggf. wieviele
lngFilesInFolder = CountFilesInFolder(strSearchPath)
If lngFilesInFolder > 0 Then
' Dateinamen generieren aus dem aktuellen Systemdatum
dtmSearchDate = Calendar1.Value 'Date
strMyFileName = Format(dtmSearchDate, "DD.MM.YYYY.DDD") & ".xls"
' prüfen ob eine Datei mit dem ausgwählten Datum vorhanden ist. Diese dann einfach auswä _
hlen.
' Es muss in dem Fall keine neue Datei aus einer Vorlage erstellt werden.
If CheckFileExists(strSearchPath & "\" & strMyFileName) = True Then
MsgBox "Zu Ihrer Information ! " & Chr(10) & "Ein Reparaturbuch mit diesem Datum  _
ist bereits vorhanden! " & Chr(10) & _
"Es wird dieses Reparaturbuch verwendet und kein neues" & Chr(10) & " _
Reparaturbuch angelegt!", vbOKOnly, "Hinweis"
Application.DisplayAlerts = False
Dim chkWkb As Workbook
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set chkWkb = Workbooks.Open(strSearchPath & "\" & strMyFileName)
If chkWkb.ReadOnly = True Then
MsgBox "Datei wird gerade bearbeitet, bitte später nochmal probieren", vbInformation + vbOKOnly, _
"Fehler"
chkWkb.Close False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Exit Sub
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
ThisWorkbook.Save
ThisWorkbook.Close
Application.DisplayAlerts = True
Exit Sub
Else ' in diesem Fall muss eine neue Datei aus einer Vorlage erstellt werden
For i = 1 To 100 ' ---------> ggf. anpassen hier werden 100 Tage von heute aus zurü _
ckgerechnet
dtmSearchDate = DateSerial(Year(dtmSearchDate), Month(dtmSearchDate), Day( _
dtmSearchDate) - 1)
strMyFileName = Format(dtmSearchDate, "DD.MM.YYYY.DDD") & ".xls"
If CheckFileExists(strSearchPath & "\" & strMyFileName) = True Then
' dann diese Datei als Vorlagedatei verwenden und daraus die aktuelle  _
Datei erstellen
MsgBox "Es wird aus der Vorlage " & Chr(10) & _
strSearchPath & "\" & strMyFileName & Chr(10) & _
"das neue Reparaturbuch erstellt !"
MyVorlage = strSearchPath & "\" & strMyFileName
MyVerzeichnisNeu = strSearchPath
MyDateinameNeu = Format(Calendar1.Value, "DD.MM.YYYY.DDD") & ".xls"
MyDateinameDatum = Format(Calendar1.Value, "DD.MM.YYYY")
FileCopy MyVorlage, MyVerzeichnisNeu & "\" & MyDateinameNeu
Application.DisplayAlerts = False
Workbooks.Open MyVerzeichnisNeu & "\" & MyDateinameNeu
'Blattschutz aufheben
With Worksheets("Reparaturbuch")
.Unprotect  ' ggf Passwort eingeben
.Cells(2, 2).Value = MyDateinameDatum
' Blattschutz setzen
.Protect
End With
ThisWorkbook.Save
ThisWorkbook.Close
Application.DisplayAlerts = True
Exit For
End If
Next i
End If           '   Reparaturbuch gefunden/nicht gefunden mit dem ausgewähltem Datum
Else ' im Ordner REPARATURBUCH sind keine xls-Dateien enthalten !
MsgBox "Der ausgewählte Ordner " & strSearchPath & "enthält keine Dateien." & Chr(10) & _
"Zur Ausführung der nächsten Aktionen ist es jedoch erforderlich dass zumindest eine Datei  _
als Vorlage vorhanden ist !"
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
'exit sub
End If
Else ' es soll keine neue Arbeitsmappe auf basis einer Vorlagedatei erstellt werden
ActiveWorkbook.Close
End If
End Sub



Private Sub UserForm_Activate()
Me.Calendar1.Value = Date
End Sub


Anzeige
AW: Makroanpassung
03.02.2009 08:33:00
Ernst
Hallo Rainer !
Ich habe es jetzt getestet über Netzlaufwerk funktionierts einwandfrei nur wenn die Datei noch nicht angelegt wurde kommt eine Fehlermeldung und es wird keine neue aus der zuletzt aktuellsten vorlage erstellt.
gibt es dafür eine Lösung ?
lg.Ernst
AW: Erledigt !
03.02.2009 11:11:38
Ernst
Hallo Rainer !
Ich habe den Fehler gefunden alles läuft perfekt.
lg.Ernst
Schön....
03.02.2009 17:50:00
Ramses
Hallo
... dass es nun doch so funktioniert wie vorgesehen :-)
Gratuliere zur Lösung
Gruss Rainer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige