Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1304to1308
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

Aktualisieren wenn Datei geöffnet

Aktualisieren wenn Datei geöffnet
05.04.2013 08:55:10
Gerwin
Hab hier schon sehr viel Hilfe durch das Archiv bekommen, da hab ich mich einfach mal Registriert um mitzumischen.
Ein freundliches Guten Morgen an alle,
ich habe eine Excel-Arbeitsmappe als Datenbank hinterlegt. Aus dieser ziehen sich Andere Dateien ihre Daten. Wenn die Datenbank geöffnet ist, zum Beispiel durch einen anderen Benutzer (wir arbeiten über einen Server), können die Daten nicht Aktualisiert werden.
Sub Aktualisieren()
' Aktualisieren Makro
ActiveSheet.Unprotect Password:=("1234")
ActiveWorkbook.Unprotect Password:=("1234")
ActiveWorkbook.UpdateLink Name:= _
"K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm", _
Type:=xlExcelLinks
ActiveWorkbook.Protect Password:=("1234")
ActiveSheet.Protect Password:=("1234")
End Sub

So sieht das Makro aus das die Daten aktualisieren soll, funktioniert auch.
Wenn die Datenbank geöffnet ist bekomme ich einen Laufzeitfehler. Wäre es möglich das mir eine MsgBox anzeigt durch welchen Benutzer sie geöffnet ist? Die MsgBox ist nicht das Problem, sondern nur die Anzeige durch welchen Benutzer.
Vielen Dank im Vorraus

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

Betreff
Datum
Anwender
Anzeige
Idee: AW: Aktualisieren wenn Datei geöffnet
05.04.2013 09:26:27
Klaus
Hi Gerwin,
ich habe keine Idee wie du "aus der Ferne" abfragst, wer eine Datei geöffnet hat. Darum andersrum:
Erstell in der Materialdatenbank eine neue Tabelle, die nennst du zB "GEHEIM". Ausserdem kommt in "ThisWorkbook" der Materialdatenbank der Code:
Private Sub Workbook_Open()
Sheets("GEHEIM").Range("A1").Value = Environ("Username")
End Sub
Jetzt fragst du "aus der Ferne" einfach den Inhalt von [Materialdatenbank.xlsm]Geheim!A1 ab!
An dieser Stelle muss der kleine Hinweis folgen: Ein über-enthusiastischer Betriebsrat KÖNNTE dir ein solches Makro als illegale Arbeitnehmer-Überwachung auslegen, sicher dich dahingehend ab.
Andererer Lösungsansatz:
Wenn du die Datei einfach "öffnest", kommt von Windows selbst die Nachricht welcher Benutzer die Datei zur Zeit in Beschlag hat. Bastel ein "on error" in dein Makro ein, dass dir bei misslungenem Update die Datei öffnet und schau auf die Windows-Nachricht.
Grüße,
Klaus M.vdT.

Anzeige
Idee: AW: Aktualisieren wenn Datei geöffnet
05.04.2013 11:01:27
Gerwin
Ich hab was die Antwort betrifft gerade einen neuen Thread aufgemacht weil ich nicht wusste wie man antwortet, jetzt hab ichs aber glaub ich. Entschuldigung.
Hallo Klaus,
danke für deine Antwort, scheint mir eine logische möglichkeit zu sein, bin aber glaub ich nicht clever genug sie umzusetzen.
Sub Aktualisieren()
' Aktualisieren Makro
ActiveSheet.Unprotect Password:=("1234")
ActiveWorkbook.Unprotect Password:=("1234")
On Error GoTo ErrMsg
ActiveWorkbook.UpdateLink Name:= _
"K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm", _
Type:=xlExcelLinks
ActiveWorkbook.Protect Password:=("1234")
ActiveSheet.Protect Password:=("1234")
ErrMsg:
Dim strText As String
strText = "(K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm[ _
Userabfrage].Range(A1)"
MsgBox "Die Materialdatenbank ist zurzeit geöffnet durch den Benutzer " & strText, 16, " _
Datenbank geöffnet"
End Sub

Ist klar, das er jetzt in der MsgBox mir den Pfad wiedergibt und nicht das was ich haben will, aber ich weiß nicht wie ich das verpacken kann...
Evtl. du oder jemand anders ne Idee?
VG
Gerwin

Anzeige
Rückfragen:
05.04.2013 11:28:38
Matze
Die Datei mit der Datenbank ist ebenfalls in Excel2007 erstellt?
Enthält diese Datei schon Makros?
Darf die Datei , in ein neues Format gebracht werden in dem du ein Makro einfügst?
Hast du die Berechtigung den UserNamen aus zu lesen?
Beantworte diese Fragen.
Matze

AW: Rückfragen:
05.04.2013 11:37:56
Gerwin

Die Datei mit der Datenbank ist ebenfalls in Excel2007 erstellt?
Jap
Enthält diese Datei schon Makros?
Jap
Darf die Datei , in ein neues Format gebracht werden in dem du ein Makro einfügst?
Muss sie ja nicht, da sie bereits im xlsm. Format ist. Es sei denn du meinst ein anderes Format.
Hast du die Berechtigung den UserNamen aus zu lesen?

Was das betrifft, stört des hier keinen. Für die meisten ist alles was über =SUMME() hinausgeht schon schwarze Magie. Es sei denn du meinst Systemberechtigung, da weiß ichs nicht.
VG
Gerwin

Anzeige
Auf ein neues,...
05.04.2013 11:51:54
Matze
...weis jetzt gar nicht warum hier Klaus nicht weitermacht,...er hat es aber eigentlich gut beschrieben.
Erstell in der Materialdatenbank eine neue Tabelle, die nennst du GEHEIM.
Nun im VBA editor unter "Diese Arbeitsmappe" der Materialdatenbank der Code:

Private Sub Workbook_Open()
Sheets("GEHEIM").Range("A1").Value = Environ("Username")
End Sub

Fertig.
In deiner Abfragedatei deinen Code anpassen.Wenn der bisher funktioniert hat:

Sub Aktualisieren()
ActiveSheet.Unprotect Password:=("1234")
ActiveWorkbook.Unprotect Password:=("1234")
On Error GoTo ErrMsg
ActiveWorkbook.UpdateLink Name:="K:\Material\Materialdatenbank_Bestellformular\ _
Materialdatenbank_2.0.xlsm", Type:=xlExcelLinks
ActiveWorkbook.Protect Password:=("1234")
ActiveSheet.Protect Password:=("1234")
ErrMsg:
Dim strText As String
strText = "(K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm[ _
Geheim].Range(A1)"
MsgBox "Die Materialdatenbank ist zurzeit geöffnet durch den Benutzer " & strText, 16, " _
Datenbank geöffnet"
End Sub
Matze
Du solltest Rudis Beitrag mal lesen!!

Anzeige
AW: Auf ein neues,...
08.04.2013 09:25:30
Klaus
..weis jetzt gar nicht warum hier Klaus nicht weitermacht,...er hat es aber eigentlich gut beschrieben.
Hallo Matze,
ich habe nicht weiter gemacht, weil ich zwischen Freitag 11:00 und Montag 08:00 (Zeitangaben UTC+1) nicht im herber.de Forum lese! Danke fürs Einspringen.
Hallo Gerwin,
Matze hat dir schon 98% der Lösung gegeben. Ein kleiner Haken ist, dass seine Lösung immer die MsgBox anzeigen wird. Korrektur geht aber fix:

Sub Aktualisieren()
ActiveSheet.Unprotect Password:=("1234")
ActiveWorkbook.Unprotect Password:=("1234")
On Error GoTo ErrMsg
ActiveWorkbook.UpdateLink Name:="K:\Material\Materialdatenbank_Bestellformular\ _
Materialdatenbank_2.0.xlsm", Type:=xlExcelLinks
ActiveWorkbook.Protect Password:=("1234")
ActiveSheet.Protect Password:=("1234")
goto heaven
ErrMsg:
Dim strText As String
strText = "(K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm[ _
Geheim].Range(A1)"
MsgBox "Die Materialdatenbank ist zurzeit geöffnet durch den Benutzer " & strText, 16, " _
Datenbank geöffnet"
heaven:
End Sub

Matze, beim drüberschauen glaube ich, dass in strText immer der komplette Link stehen wird (Anführungszeichen am Anfang). Hast du den getestet?
Grüße,
Klaus M.vdT.

Anzeige
AW: Aktualisieren wenn Datei geöffnet
05.04.2013 09:29:52
eres
Hallo Gerwin,
hatte das gleiche Problem ("UDF für LastUser unter Office2010") vor einiger Zeit auch mal ins Forum gestellt und leider keine Antwort bekommen. Im Netz findet man immer nur die bis Excel2003 noch funtionierende Lösung, aber keine Alternative für Excel 2007ff.
Lasse den Beitrag natürlich offen.
Gruß
erwin

AW: Aktualisieren wenn Datei geöffnet
05.04.2013 11:39:50
Rudi
Hallo,
vielleicht so:
Sub Aktualisieren()
Dim strFile As String
strFile = "K:\Material\Materialdatenbank_Bestellformular\Materialdatenbank_2.0.xlsm"
Pruefen strFile
ActiveSheet.Protect Password:=("1234")
ActiveWorkbook.Protect Password:=("1234")
ActiveWorkbook.UpdateLink Name:=strFile, Type:=xlExcelLinks
ActiveSheet.Protect Password:=("1234")
ActiveWorkbook.Protect Password:=("1234")
End Sub
Private Sub Pruefen(strFileToOpen As String)
Do While IsFileOpen(strFileToOpen)
If MsgBox(strFileToOpen & " ist von " & LastUser(strFileToOpen) & " geöffnet." _
& vbLf & "Bitte schließen lassen.", _
vbOKCancel + vbInformation, "Datei geöffnet") = vbCancel Then End
Loop
End Sub
Function IsFileOpen(strFullPathFileName As String) As Boolean
'// VBA version to check if File is Open
'// We can use this for ANY FILE not just Excel!
'// Ivan F Moala
'// http://www.xcelfiles.com
Dim hdlFile As Long
'// Error is generated if you try
'// opening a File for ReadWrite lock >> MUST BE OPEN!
On Error GoTo FileIsOpen:
hdlFile = FreeFile
Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
IsFileOpen = False
Close hdlFile
Exit Function
FileIsOpen:
'// Someone has it open!
IsFileOpen = True
Close hdlFile
End Function
Function LastUser(strPath As String) As String
'// Code by Helen from http://www.
_
visualbasicforum.com/index.php?s=
'// This routine gets the Username of the File In Use
'// Credit goes to Helen for code & Mark for the idea
'// Insomniac for xl97 inStrRev
'// Amendment 25th June 2004 by IFM
'// : Name changes will show old setting
'// : you need to get the Len of the Name stored just before
'// : the double Padded Nullstrings
Dim strXl As String
Dim strFlag1 As String, strflag2 As String
Dim i As Integer, j As Integer
Dim hdlFile As Long
Dim lNameLen As Byte
strFlag1 = Chr(0) & Chr(0)
strflag2 = Chr(32) & Chr(32)
hdlFile = FreeFile
Open strPath For Binary As #hdlFile
strXl = Space(LOF(hdlFile))
Get 1, , strXl
Close #hdlFile
j = InStr(1, strXl, strflag2)
#If Not VBA6 Then
'// Xl97
For i = j - 1 To 1 Step -1
If Mid(strXl, i, 1) = Chr(0) Then Exit For
Next
i = i + 1
#Else
'// Xl2000+
i = InStrRev(strXl, strFlag1, j) + Len(strFlag1)
#End If
'// IFM
lNameLen = Asc(Mid(strXl, i - 3, 1))
LastUser = Mid(strXl, i, lNameLen)
End Function

Gruß
Rudi

Anzeige
@Rudi
05.04.2013 12:01:51
eres
Hallo Rudi,
die von Dir angegebene Funktion "LastUser" aus dem visualbasicforum läuft meiner Meinung nach nur bis Excel2003. Ab Excel2007 werden hier keine vernünftigen Ergebnisse angezeigt.
Vielleicht habe ich aber auch hier ein Brett vorm Kopf und bei Dir läuft die Funktion auch in Excel 2007 oder 2010 ?
Danke & Gruß
erwin

AW: @Rudi
05.04.2013 12:33:48
Rudi
Hallo,
wenn ich eine Datei geöffnet habe, sagt mir die Routine, dass sie von mir benutzt wird.
XL2007/ WIN7
Gruß
Rudi

AW: @Rudi
05.04.2013 12:39:27
eres
Merkwürdig, bei mir werden in der Messagebox als LastUser einer von mir geöffneten Datei folgendes angezeigt:
Dc°Y¥T{u
uä¸ñ¹× BwSëÕ*zícݑ\â‘`£›È¢]Iz~ý¾¨•ÁȱÀ ¤L¨a‚¿2沦
àOÓ¨˜Îù]¦ŽèPë¼ç½k§è*‘.”sÞ¹ìფ±¿.ƒ„³¬¨u`Û@1"Ð/°ãÊØf\x°˜A¡
‘ïip#Å×öÈ·ÔTj­µ«i½òõ½:¼ÿ ¶(ŠÕ2›åDzbZÀ·/§ÓéDO&“éèNXHŒ¸9ö,´CPÓ ¤Q3D!W ˜^Aœ(іKjVÖftE©§‰.Æ à
Ich arbeite mit Excel2010 und Win7.
Anmerkung: Die Datei ist natürlich nicht verschlüsselt oder ähnliches. Es ist eine normale ungeschützte xlsx.
Bin hier ratlos ...
Trotzdem Danke für die Info Rudi.
Gruß
erwin

Anzeige
AW: Aktualisieren wenn Datei geöffnet
05.04.2013 13:25:00
Gerwin
Hallo Rudi,
danke für deine Hilfe, ist ja ein ziemliches Datenmonster.
Ich blick da auch nicht durch was das machen soll (mangels Kentnisse) und ich bekomme auch die Meldung wie erwin.
Dc°Y¥T{u
uä¸ñ¹× BwSëÕ*zícݑ\â‘`£›È¢]Iz~ý¾¨•ÁȱÀ ¤L¨a‚¿2沦
àOÓ¨˜Îù]¦ŽèPë¼ç½k§è*‘.”sÞ¹ìფ±¿.ƒ„³¬¨u`Û@1"Ð/°ãÊØf\x°˜A¡
‘ïip#Å×öÈ·ÔTj­µ«i½òõ½:¼ÿ ¶(ŠÕ2›åDzbZÀ·/§ÓéDO&“éèNXHŒ¸9ö,´CPÓ ¤Q3D!W ˜^Aœ(іKjVÖftE©§‰.Æ à
Arbeite auch mit Win7 und Excel 2007.
und @Matze Hat leider immer noch nicht funktioniert.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige