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

Tabellenende erreicht - neues Tabellensheet

Tabellenende erreicht - neues Tabellensheet
Albert
Hallo zusammen,
meine Zugriffshistory wirft noch einen weiteren Gedanken auf.
Übers Jahr wird die Datei stets geändert, gespeichert, geöffnet, etc. Jeder eintrag wird dokumentiert.
Mal angenommen, es sind mehr als 100.000 Zeilen verbraten worden.
Wie könnte ein Code aussehen, der das Sheetende erkennt und ein neues Sheet beginnt.
Ich hoff, ich habs nicht zu schwierig beschrieben?
LG
Albert
AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 14:55:39
Josef

Hallo Albert,
bei deiner XL-Version hat eine Tabelle 1.048.576 Zeilen, bei 250 Arbeitstagen und 100 Änderungen/Tag reicht das für mehr als 41 Jahre!

« Gruß Sepp »

AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 15:01:57
Albert
Also Sepp,
Kompliment, du Rechenkoryphäe. Da hast du allerdings recht.
Ich hab hald gern einen weiteren Trumpf in der Hand und man weiß ja nie, was kommt.
LG
Albert
Anzeige
AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 15:04:30
Josef

Hallo Albert,
dazu müsste man deinen History-Code kennen.

« Gruß Sepp »

AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 15:09:44
Albert
Hallo Sepp,
das is net schwierig. Ich füg ihn hier gleich an.
Option Explicit
Dim LoLetzte As Long
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Dim Netzwerk As Object
Set Netzwerk = CreateObject("wscript.network")
With Worksheets("History")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
.Cells(LoLetzte, 1) = Target.Address
.Cells(LoLetzte, 2) = Target
.Cells(LoLetzte, 3) = Sh.Name
.Cells(LoLetzte, 4) = Environ("Username")
.Cells(LoLetzte, 5) = CStr(Date)
.Cells(LoLetzte, 6) = CStr(Time)
.Cells(LoLetzte, 7) = Netzwerk.computername
.Cells(LoLetzte, 8) = Netzwerk.UserName
End With
Application.EnableEvents = True
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Sicherungen Protokollieren
Dim objsh As Object
Dim bolSaved
bolSaved = Me.Saved
With Worksheets("History")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
.Cells(LoLetzte, 1) = "Speichervorgang beim Schließen"
End With
Me.Sheets("Startseite").Visible = xlSheetVisible
For Each objsh In Me.Sheets
If objsh.Name  "Startseite" Then objsh.Visible = xlSheetVeryHidden
Next
If bolSaved Then Me.Save
End Sub

Private Sub Workbook_Open()
' die letzten 10 Veränderungen anzeigen
Dim LoI As Long
Dim LoJ As Long
Dim StMeldung As String
Dim objsh As Object
Sheets("Startseite").Select
With Worksheets("History")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
If LoLetzte > 10 Then LoJ = LoLetzte - 11
For LoI = LoJ + 1 To LoLetzte
StMeldung = StMeldung & .Cells(LoI, 1).Text & " " & .Cells(LoI, 2) & Chr(13)
Next LoI
End With
ActiveWorkbook.Save
With Worksheets("History")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .  _
_
Rows.Count) + 1
.Cells(LoLetzte, 1) = "Speichervorgang beim Öffnen"
Sheets("Gesamtübersicht Ausbringung").Select
End With
End Sub

Anzeige
AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 15:35:43
Josef

Hallo Albert,
dafür würde ich den Code etwas aufteilen.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit
Dim LoLetzte As Long

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  HistoryWrite Sh, Target
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ' Sicherungen Protokollieren
  Dim objsh As Object
  Dim bolSaved
  
  bolSaved = Me.Saved
  
  HistoryWrite Message:="Speichervorgang beim Schließen"
  
  Me.Sheets("Startseite").Visible = xlSheetVisible
  
  For Each objsh In Me.Sheets
    If objsh.Name <> "Startseite" Then objsh.Visible = xlSheetVeryHidden
  Next
  
  If bolSaved Then Me.Save
  
End Sub


Private Sub Workbook_Open()
  ' die letzten 10 Veränderungen anzeigen
  Dim LoI As Long
  Dim LoJ As Long
  Dim StMeldung As String
  Dim objsh As Object
  
  Sheets("Startseite").Select
  
  '?
  With Worksheets("History")
    LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
    If LoLetzte > 10 Then LoJ = LoLetzte - 11
    For LoI = LoJ + 1 To LoLetzte
      StMeldung = StMeldung & .Cells(LoI, 1).Text & " " & .Cells(LoI, 2) & Chr(13)
    Next LoI
  End With
  
  Me.Save
  
  HistoryWrite Message:="Speichervorgang beim Öffnen"
  
  Sheets("Gesamtübersicht Ausbringung").Select
  
End Sub


' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public Sub HistoryWrite(Optional Sh As Worksheet, Optional Target As Range, Optional Message As String = "")
  Dim Netzwerk As Object
  Dim lngNext As Long
  Dim lngCalc As Long
  
  On Error GoTo ErrExit
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    lngCalc = .Calculation
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
  End With
  
  Set Netzwerk = CreateObject("wscript.network")
  
  With Worksheets("History")
    If .Cells(.Rows.Count, 1) = "" Then
      lngNext = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    Else
      .Name = .Name & Format(Date, "_ddmmyyyy")
      .Parent.Worksheets.Add after:=.Parent.Sheets("History" & Format(Date, "_ddmmyyyy"))
      ActiveSheet.Name = "History"
      lngNext = 1
    End If
  End With
  
  With Sheets("History")
    If Len(Message) Then
      .Cells(lngNext, 1) = Message
    ElseIf Not Sh Is Nothing And Not Target Is Nothing Then
      .Cells(lngNext, 1) = Target.Address
      .Cells(lngNext, 2) = Target
      .Cells(lngNext, 3) = Sh.Name
      .Cells(lngNext, 4) = Environ("Username")
      .Cells(lngNext, 5) = CStr(Date)
      .Cells(lngNext, 6) = CStr(Time)
      .Cells(lngNext, 7) = Netzwerk.computername
      .Cells(lngNext, 8) = Netzwerk.UserName
    End If
  End With
  
  ErrExit:
  
  With Err
    If .Number <> 0 Then
      MsgBox "Fehler in Prozedur:" & vbTab & "'HiytoryWrite'" & vbLf & String(60, "_") & _
        vbLf & vbLf & IIf(Erl, "Fehler in Zeile:" & vbTab & Erl & vbLf & vbLf, "") & _
        "Fehlernummer:" & vbTab & .Number & vbLf & vbLf & "Beschreibung:" & vbTab & _
        .Description & vbLf, vbExclamation + vbMsgBoxSetForeground, _
        "VBA - Fehler in Modul - Modul1"
      .Clear
    End If
  End With
  
  On Error GoTo 0
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = lngCalc
    .DisplayAlerts = True
  End With
  
  Set Netzwerk = Nothing
End Sub



« Gruß Sepp »

Anzeige
AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 16:24:45
Albert
Hallo Sepp,
ich hab den Code von dir so aufgeteilt.
Nun kann ich aber die Makroeinstellung nicht manuell ändern und in die anderen Sheets komm ich auch nicht.
Hm, ich stöber jetzt mal, an was das liegen könnte.
Dankeschön.
Andere Frage. Sobald ich des Code in ein anderes Sheet kopiere, funktioniert die me.sheets-anweisung nicht mehr...
Private Sub Bearbeitung_Click()
Dim objSh As Object
For Each objSh In Me.Sheets
objSh.Visible = xlSheetVisible
Next
Me.Sheets("INFO").Visible = xlSheetVeryHidden
End Sub
LG
Albert
AW: Tabellenende erreicht - neues Tabellensheet
04.03.2012 17:30:00
Josef

Hallo Albert,
was meinst du mit "Makroeinstellungen" ?
Das Schlüsselwort Me steht nur in Klassenmodulen zur verfügung und bezieht sich auf das entsprechende übergeordnete Objekt, ersetzte also Me durch ThisWorkbook.

« Gruß Sepp »

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige