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

Sicherheitskopie ohne Makros, Before Close

Sicherheitskopie ohne Makros, Before Close
15.06.2008 18:45:00
Florian
Hallo liebes Forum!
wiedermal eine Frage ;):
Ich habe ein relativ sensibles (=wichtiges) Workbook, dass nur ich bearbeiten will, von anderen aber eingesehen werden kann. Um auf Nummer sicher zu gehen, dass keiner an den Daten was machen kann, kann nur ich die Datei bearbeiten. Die Datei, die eingesehen werden kann, ist eine 100%ige Kopie der Originaldatei und wird mit dem Before Close-Event in der "Steuerdatei" jedesmal upgedatet. Zusätzlich habe ich noch ein Archiv (eine Mappe), in dem nach jedem Bearbeiten ein File mit Datum und Uhrzeit abgespeichert wird, um alle Änderungen dokumentiert zu haben.
Mein Problem nun:
In der Steuerdatei liegt die Before-Close-Makro. Diese Makro liegt jetzt natürlich auch in der Kopiedatei, die von anderen Usern eingesehen kann. Wenn jetzt nun der User seine Kopiedatei schließt, versucht die Makro natürlich ebenso eine Archiv-Kopie und ein Update zu erstellen. Wie kann ich das umgehen? Kann ich die Datei auch ohne Makros updaten? Das ist mein Code in der Steuerdatei jetzt:

Sub KopieListe_generieren()
Dim MyPath As String, UhrZeit As String
Dim OriginalLagerD As Workbook, SelgerLagerD As Workbook
Dim OriginalLagerS As Worksheet, SelgerLagerS As Worksheet
Dim i As Integer, j As Integer, LastRowLager As Integer
Application.DisplayAlerts = False
MyPath = ThisWorkbook.Path
'   Lege Sicherheitskopie der Lagerliste (=diese Datei) an
UhrZeit = ThisWorkbook.Sheets("Lager").Cells(1, 1)
ThisWorkbook.SaveAs Filename:=MyPath & "\Lagerliste_Aktionsarchiv\" & "Lagerliste " & Date & _
_
" " & UhrZeit & ".xls"
ThisWorkbook.SaveAs Filename:=MyPath & "\Lagerliste_2009.xls"
Workbooks(Workbooks.Count).Close savechanges:=True
End Sub


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

Betreff
Datum
Anwender
Anzeige
AW: Sicherheitskopie ohne Makros, Before Close
15.06.2008 19:01:00
Tino
Hallo,
eine Möglichkeit wäre, alle Sheets in eine neue Mappe zu kopieren und diese zur Benutzung abzuspeichern.
Eine zweite die Sicherung anders zu benennen und dieses Close Ereignis nur bei Deiner zulassen.
(ist wahrscheinlich die einfachste)
Es gibt bestimmt noch mehr Möglichkeiten.
Gruß Tino

www.ExcelVba.eu


AW: Sicherheitskopie ohne Makros, Before Close
15.06.2008 20:38:37
Florian
Hei Timo,
Danke erstmal. Die Variante "Before Close bei Kopie nicht zulassen" will ich auch umsetzen, aber wie mach ich das?
Gruss
Florian

AW: Sicherheitskopie ohne Makros, Before Close
15.06.2008 20:49:36
Tino
Hallo,
in das BeforeClose Ereignis diese Zeile mit einfügen und deinen Dateinamen anpassen.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ThisWorkbook.Name  "Meine OrginalDatei.xls" Then End 'als erste Zeile
'Dein Speicher-Code
End Sub


Gruß Tino
www.excelvba.eu

Anzeige
Vielen Dank! oT
15.06.2008 21:00:00
Florian
--

Vorlagedatei *.xlt
15.06.2008 23:52:00
Beate
Hallo Florian,
du könntest die Datei auch als Vorlagedatei *.xlt anlegen und bearbeiten, wenn nötig. Alle Anderen würden immer nur eine Kopie deiner Datei öffnen. Änderungen ihrerseits wirken sich nicht auf die Vorlagedatei aus.
Guckst Du: Standardmustervorlage
Was dort steht, kannst du natürlich auch für einen anderen Dateinamen einrichten mit der gewünschten Auswirkung. Also, wie du willst nicht als Standardvorlage, sondern dass die Anderen nur den augenblicklichen Stand sehen, ohne die Ursprungsdaten durch Eingaben verändern zu können, da sie nur eine Kopie der *.xlt-Datei öffnen.
Grüße,
Beate

Anzeige
AW: Vorlagedatei *.xlt
16.06.2008 06:36:00
Tino
Hallo,
aber wen ich diese über „rechte Maustaste und öffnen“ öffne,
kann ich diese wieder speichern, oder liege ich da falsch?
Userbild
Gruß Tino

www.ExcelVba.eu


AW: Vorlagedatei *.xlt
16.06.2008 13:08:00
Beate
Hallo Tino,
damit liegst du richtig.
Da aber in Excel nichts sicher ist (also auch nicht die Codelösungen), wollte ich nur diese Alternative aufzeigen.
Gruß,
Beate

AW: Sicherheitskopie ohne Makros, Before Close
16.06.2008 09:11:17
Odje.K
Hallo Florian,
versuche es mal mit diesem Code.
Gruß Odje
  • Option Explicit
    
    Private Sub CommandButton1_Click()
    Dim intIndex As Integer
    Dim blnFound As Boolean
    Dim strRef   As String
    blnFound = False
    strRef = "Microsoft Visual Basic for Applications Extensibility"
    With ThisWorkbook.VBProject.References
    For intIndex = 1 To .Count
    Debug.Print .Item(intIndex).Description, .Item(intIndex).GUID
    If Left(.Item(intIndex).Description, Len(strRef)) = strRef Then
    If .Item(intIndex).IsBroken Then
    .Remove (.Item(intIndex))
    Else
    blnFound = True
    End If
    Exit For
    End If
    Next intIndex
    If Not blnFound Then
    Call Application.VBE.ActiveVBProject.References.AddFromGuid("{0002E157-0000-0000-C000-  _
    _
    000000000046}", 5, 3)
    End If
    End With
    Dim sFilename As String, Pfad
    Application.ScreenUpdating = False
    Pfad = "d:\datensicherung"
    sFilename = Pfad & "\" & Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 4) & _
    Format(Now, "_DD.MM.YYYY_hhmm") '& ".xls"
    ThisWorkbook.SaveCopyAs Filename:=sFilename
    Call CodeEntfernen(sFilename)
    Call CommandButtonEntfernen(sFilename)
    Call CommentsEntfernen(sFilename)
    End Sub
    


    '*********************************************************************************

    
    Private Function CodeEntfernen(sFilename As String)
    Dim Wb As Workbook, VBComp As VBComponent
    Dim x As Long
    Set Wb = Workbooks.Open(Filename:=sFilename)
    For x = Wb.VBProject.VBComponents.Count To 1 Step -1
    Set VBComp = Wb.VBProject.VBComponents(x)
    If VBComp.Type = vbext_ct_StdModule Or _
    VBComp.Type = vbext_ct_ClassModule Or _
    VBComp.Type = vbext_ct_MSForm Then
    Wb.VBProject.VBComponents.Remove VBComp
    ElseIf VBComp.Type = vbext_ct_Document Then
    'DieseArbeitsmappe und Tabellenblätter
    VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
    End If
    Next
    Wb.Close SaveChanges:=True
    AUFRAEUMEN:
    Set Wb = Nothing: Set VBComp = Nothing
    End Function
    


    '*********************************************************************************

    
    Private Function CommandButtonEntfernen(sFilename As String)
    Dim Wb As Workbook, ws As Worksheet
    Dim x As Long
    Set Wb = Workbooks.Open(Filename:=sFilename)
    For Each ws In Wb.Worksheets
    For x = ws.OLEObjects.Count To 1 Step -1
    If ws.OLEObjects(x).progID = "Forms.CommandButton.1" Then
    ws.OLEObjects(x).Delete
    End If
    Next
    Next
    Wb.Close SaveChanges:=True
    AUFRAEUMEN:
    Set Wb = Nothing: Set ws = Nothing
    End Function
    


    '*********************************************************************************

    
    Private Function CommentsEntfernen(sFilename As String)
    Dim Wb As Workbook, ws As Worksheet
    Dim x As Long
    Set Wb = Workbooks.Open(Filename:=sFilename)
    For Each ws In Wb.Worksheets
    ws.UsedRange.ClearComments
    Next
    Wb.Close SaveChanges:=True
    Application.ScreenUpdating = True
    AUFRAEUMEN:
    Set Wb = Nothing: Set ws = Nothing
    End Function
    


  • Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige