Hallo liebe Community,
Wenn mehrere Anwender (Team) an Excel-Tabellen arbeiten oder Arbeitsmappen der Reihe nach an verschiedene Empfänger (Teammitglieder) verteilt werden, ist es sinnvoll, Änderungen genau zu erfassen und zu protokollieren. Wer hat zu welchem Zeitpunkt welche Zelle verändert?
Excel bietet Ihnen für diese Aufgabe eine passende Funktion an. Diese Funktion zeichnet Änderungen an Zellen auf.
Ich möchte heute Ihnen ein VBA-Projekt vorstellen, das ähnliche Funktion wie Excel hat aber die Änderungen durch den Anwender erfasst werden.
Gehen Sie dazu wie folgt vor:
1) Starten Sie Excel
2) Wenn Sie kein Arbeitsblatt sehen. Fügen Sie eine neue Arbeitsmappe ein (Datei--> Neu--> Leere Arbeitsmappe)
3) Wechseln Sie mit Tastenkombination Alt+F11 zu VBA -Editor
4) Fügen Sie ein Modul ein (Einfügen--> Modul) Ändern Sie (Name)-Eigenschaft von Modul1 nicht.
5) Fügen Sie eine Userform ein (Einfügen--> UserForm) Ändern Sie (Name)-Eigenschaft von UserForm1 von UserForm1 auf "frmAenderungen_verwalten"
6) Wechseln Sie mit Tastenkombination Alt+F11 zurück zu Excel
7) Ändern Sie den Namen von Arbeitsblatt Tabelle1 auf "Aenderungen_erf" und blenden Sie das Arbeitsblatt "Aenderungen_erf" aus.(Rechtsklick auf das Arbeitsblatt "Aenderungen_erf" --> Ausblenden)
8) Aktivieren Sie das Arbeitsblatt "Tabelle2" und fügen Sie Eine Schaltfläche ein [Entwicklertools--> Einfügen--> Schaltfläche (Formularsteuerelement)]
Benennen Sie Schaltfläche 1 um. Geben Sie Ihre Schaltfläche den Namen "START" (Später werden wir der Schaltfläche das Makro "testmich" zuweisen)
9) Speichern Sie die Arbeitsmappe (Excel-Arbeitsmappe mit Makros (*.xlsm). Geben Sie einen neuen Namen für die Datei ein
10) Kopieren Sie den folgenden Code und fügen Sie ihn in Modul1 ein.
Spoiler anzeigen
'#############################################################################################
11) Nun können Sie der Schaltfläche das Makro "testmich" zuweisen
Spoiler anzeigen
' UserForm
Ok jetzt nehmen wir uns die UserForm "frmAenderungen_verwalten" vor.
Wichtigste Eigenschaften von "frmAenderungen_verwalten":
Caption: A E N D E R U N G E N E R F A S S E N / B E A R B E I T E N
Height: 424,5
Width: 465,75
Left: 0
Top: -2,25
12) Fügen Sie der UserForm zwei Beschriftungsfeld zu. Ändern Sie die (Name)-Eigenschaft Label1 --> lbIndex, Label2--> lbAenderungen
Spoiler anzeigen
a) Eigenschaften von lbIndex
Caption: INDEX
Height: 10
Width: 36
Left: 12
Top: 3
b) Eigenschaften von lbAenderungen
Caption: A E N D E R U N G S T E X T
Height: 12
Width: 216
Left: 120
Top: 3
TextAlign 2 - fmTextAlignCenter
13) Fügen Sie der UserForm eine Listbox zu. Ändern Sie die (Name)-Eigenschaft ListBox1 --> lsbAenderungen
Spoiler anzeigen
Eigenschaften von lsbAenderungen
Height: 156
Width: 449
Left: 6
Top: 17,25
TextAlign 2 - fmTextAlignLeft
14) Fügen Sie der UserForm zwei Rahmen zu. Ändern Sie die (Name)-Eigenschaften nicht.
Spoiler anzeigen
a) Eigenschaften von Frame1
Caption: AENDERUNGEN
Height: 145
Width: 450
Left: 6
Top: 179
Font: Thoma Fett 9
b) Eigenschaften von Frame2
Caption: DATUM AENDERN
Height: 80
Width: 92
Left: 364
Top: 318
Font: Thoma Fett 8
15) Aktivieren Sie Frame1. Fügen Sie vier Befehlsschaltfläche, fünf Beschriftungsfeld, zwei Textbox und ein DTPicker zu.
Spoiler anzeigen
a) Eigenschaften von Befehlsschaltflächen
a.1
(Name): cmdNeu
Caption: NEU
Height: 20
Width: 65
Left: 4
Top: 9
a.2
(Name): cmdInsert
Caption: EINFUEGEN
Height: 20
Width: 65
Left: 4
Top: 40
a.3
(Name): cmdEdit
Caption: BEARBEITEN
Height: 20
Width: 65
Left: 4
Top: 78
a.4
(Name): cmdEinfuegen_bea
Caption: EINFUEGEN
Height: 20
Width: 65
Left: 4
Top: 109
b) Eigenschaften von Beschriftungsfeld
b.1
(Name): lbDatumNeu
Caption: D A T U M
Height: 16
Width: 75
Left: 278
Top: 28
b.2
(Name): Label1
Caption: Eingetragen am
Height: 16
Width: 75
Left: 278
Top: 79
b.3
(Name): Label3
Caption: Geaendert am
Height: 16
Width: 75
Left: 278
Top: 112
b.4
(Name): lbDatumVorh
Caption: Datum
Height: 16
Width: 80
Left: 361
Top: 79
b.5
(Name): Label4
Caption: Datum
Height: 16
Width: 80
Left: 361
Top: 112
c) Eigenschaften von DTPicker
(Name): DTPicker1
Height: 15,75
Width: 78
Left: 361
Top: 28
Value: 09.09.2013
d) Eigenschaften von Texbox
d.1
(Name): txtNeu
Height: 50
Width: 200
Left: 73
Top: 10
MultiLine: True
d.2
(Name): txtEdit
Height: 50
Width: 200
Left: 73
Top: 79
MultiLine: True
16) Aktivieren Sie Frame2. Fügen Sie zwei Optionsfeld und ein DTPicker zu.
Spoiler anzeigen
a) Eigenschaften von Optionsfeld
a.1
(Name): OptionButton1
Caption: Eingetragen
Height: 15
Width: 70
Left: 6
Top: 8
TextAlign 2 - fmTextAlignCenter
a.2
(Name): OptionButton2
Caption: Geaendert
Height: 15
Width: 70
Left: 6
Top: 29
TextAlign 2 - fmTextAlignCenter
b) Eigenschaften von DTPicker
(Name): DTPicker2
Height: 18
Width: 77,25
Left: 7
Top: 48
Value: 09.09.2013
17) Aktivieren Sie die UserForm "frmAenderungen_verwalten" und fügen Sie vier Befehlsschaltfläche zu.
Spoiler anzeigen
a) Eigenschaften von Befehlsschaltflächen
a.1
(Name): cmdLoeschen
Caption: TEXT LOESCHEN
Height: 30
Width: 75
Left: 6
Top: 326
a.2
(Name): cmdAlles
Caption: ALLES LOESCHEN
Height: 30
Width: 75
Left: 6
Top: 364
a.3
(Name): cmdUndo
Caption: ALLES VERWERFEN
Height: 30
Width: 75
Left: 285
Top: 326
WordWrap: True
a.4
(Name): cmdExit
Caption: EXIT
Height: 30
Width: 75
Left: 285
Top: 364
'################################################################################
'UserForm-Gestaltung Ende
'################################################################################
18) Klicken Sie mit der rechten Maustaste auf eine freie Fläche der UserForm "frmAenderungen_verwalten" und wählen aus dem Kontexmenü den Befehl"Code anzeigen". Im Codebereich fügen Sie folgende ereignismakros zu
Spoiler anzeigen
Der Code ist unter Excel 2003/2010/2013 (deutsche Version) 32bit lauffähig.
Ich wünsche euch viel Spaß damit.
Edit by ~blaze~:
*Code durch VB-Tag ersetzt*
aufgrund des Datenumfangs Spoiler hinzugefügt ~VaporiZed
Wenn mehrere Anwender (Team) an Excel-Tabellen arbeiten oder Arbeitsmappen der Reihe nach an verschiedene Empfänger (Teammitglieder) verteilt werden, ist es sinnvoll, Änderungen genau zu erfassen und zu protokollieren. Wer hat zu welchem Zeitpunkt welche Zelle verändert?
Excel bietet Ihnen für diese Aufgabe eine passende Funktion an. Diese Funktion zeichnet Änderungen an Zellen auf.
Ich möchte heute Ihnen ein VBA-Projekt vorstellen, das ähnliche Funktion wie Excel hat aber die Änderungen durch den Anwender erfasst werden.
Gehen Sie dazu wie folgt vor:
1) Starten Sie Excel
2) Wenn Sie kein Arbeitsblatt sehen. Fügen Sie eine neue Arbeitsmappe ein (Datei--> Neu--> Leere Arbeitsmappe)
3) Wechseln Sie mit Tastenkombination Alt+F11 zu VBA -Editor
4) Fügen Sie ein Modul ein (Einfügen--> Modul) Ändern Sie (Name)-Eigenschaft von Modul1 nicht.
5) Fügen Sie eine Userform ein (Einfügen--> UserForm) Ändern Sie (Name)-Eigenschaft von UserForm1 von UserForm1 auf "frmAenderungen_verwalten"
6) Wechseln Sie mit Tastenkombination Alt+F11 zurück zu Excel
7) Ändern Sie den Namen von Arbeitsblatt Tabelle1 auf "Aenderungen_erf" und blenden Sie das Arbeitsblatt "Aenderungen_erf" aus.(Rechtsklick auf das Arbeitsblatt "Aenderungen_erf" --> Ausblenden)
8) Aktivieren Sie das Arbeitsblatt "Tabelle2" und fügen Sie Eine Schaltfläche ein [Entwicklertools--> Einfügen--> Schaltfläche (Formularsteuerelement)]
Benennen Sie Schaltfläche 1 um. Geben Sie Ihre Schaltfläche den Namen "START" (Später werden wir der Schaltfläche das Makro "testmich" zuweisen)
9) Speichern Sie die Arbeitsmappe (Excel-Arbeitsmappe mit Makros (*.xlsm). Geben Sie einen neuen Namen für die Datei ein
10) Kopieren Sie den folgenden Code und fügen Sie ihn in Modul1 ein.
Visual Basic-Quellcode
- 'Code Modul1
- Option Explicit
- Option Compare Text
- Option Base 1
- 'Blattname in Dokument
- Public Const strTabname As String = "Aenderungen_erf"
- 'Internationale Einstellungen
- Public LgDataOrder As Long
- Public strDateSeparator As String
- Public strTimeSeperator As String
- Public strDecimalSeparator As String
- Public strDataOrder As String
- Public Const strDayCode As String = "DD"
- Public Const strMonthCode As String = "MM"
- Public strYearCode As String
- '*********************************************************************
- Public Declare Function GetUserName Lib "advapi32.dll" _
- Alias "GetUserNameA" _
- (ByVal lpBuffer As String, nSize As Long) As Long
- '*********************************************************************
- Public Function AnwenderName_Aktuell() As String
- Dim s As String
- Dim cnt As Long
- Dim ret As Long
- Dim pos As Integer
- cnt = 199
- s = String$(200, 0)
- ret = GetUserName(s, cnt)
- If ret <> 0 Then
- AnwenderName_Aktuell = Trim$(Left$(s, cnt))
- pos = InStr(AnwenderName_Aktuell, Chr$(0))
- If pos > 0 Then
- AnwenderName_Aktuell = Left$(AnwenderName_Aktuell, pos - 1)
- Else
- AnwenderName_Aktuell = AnwenderName_Aktuell
- End If
- Else
- AnwenderName_Aktuell = "User"
- End If
- On Error Resume Next
- Application.UserName = AnwenderName_Aktuell
- On Error GoTo 0
- End Function
- Sub testmich()
- 'uebliche prozedur
- 'strDayCode = Application.International(xlDayCode)
- 'strMonthCode = Application.International(xlMonthCode)
- 'strYearCode = Application.International(xlYearCode)
- 'strHourCode = Application.International(xlHourCode)
- 'strSecondCode = Application.International(xlSecondCode)
- If Application.International(xl4DigitYears) Then
- strYearCode = "YYYY" 'strYearCode & strYearCode & strYearCode & strYearCode
- Else
- strYearCode = "YY" 'strYearCode & strYearCode
- End If
- strDateSeparator = Application.International(xlDateSeparator)
- 'Select Case strDateSeparator
- ' Case Is = "."
- '
- ' Case Is = "/"
- '
- ' Case Else
- '
- ' Exit Sub
- 'End Select
- strTimeSeperator = Application.International(xlTimeSeparator)
- strDecimalSeparator = Application.International(xlDecimalSeparator)
- LgDataOrder = Application.International(xlDateOrder)
- Select Case LgDataOrder
- Case 0 'M-T-J
- strDataOrder = strMonthCode & strDateSeparator _
- & strDayCode & strDateSeparator & strYearCode
- Case 1 'T-M-J Deutsch
- strDataOrder = strDayCode & strDateSeparator _
- & strMonthCode & strDateSeparator & strYearCode
- Case 2 'J-M-T
- strDataOrder = strYearCode & strDateSeparator _
- & strMonthCode & strDateSeparator & strDayCode
- End Select
- 'ist das Blatt Aenderungen_erf vorhanden
- If Tabelle_vorhanden(strTabname) Then
- 'Dialog anzeigen
- frmAenderungen_verwalten.Show 0 'Modal = UserForm ist ungebunden
- End If
- End Sub
- Function Tabelle_vorhanden(strT_Name As String) As Boolean
- Dim i&
- For i = Application.Worksheets.Count To 1 Step -1
- If Application.Worksheets(i).Name = strT_Name Then Tabelle_vorhanden = True: Exit Function
- Next
- End Function
- Function Aenderungen_Erfa_Bear_Index(intErkennung As Integer)
- Dim i As Long, lgRow As Long, ws As Worksheet, wsActiv As Worksheet
- Dim glArray()
- 'intErkennung:
- '0=Index
- '1=Aenderungstext
- '2=Eintrag am
- '3 = Eintrag vom
- '4 = Geändert am
- '5 = Geändert vom
- On Error GoTo ErrH
- Application.ScreenUpdating = False
- Erase glArray()
- 'Verweis auf aktives Blatt
- Set wsActiv = Application.ActiveSheet
- 'Verweis auf Blatt aenderungen_erf
- Set ws = Application.ActiveWorkbook.Worksheets(strTabname)
- 'um einem ausgeblendeten Blatt zuzugreifen vorher Blatt aktivieren
- ws.Activate
- With ws
- lgRow = .Cells(Rows.Count, 1).End(xlUp).Row
- If lgRow > 1 Then
- Select Case intErkennung
- Case 0
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 1), Cells(i, 1)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- Case 1
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 2), Cells(i, 2)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- Case 2
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 3), Cells(i, 3)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- Case 3
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 4), Cells(i, 4)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- Case 4
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 5), Cells(i, 5)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- Case 5
- For i = 2 To lgRow 'To Anzahl der Zellen in Spalte A die mit Daten belegt sind
- 'z.B intRow = Cells(Rows.Count, 1).End(xlUp).Row
- ReDim Preserve glArray(i)
- glArray(i) = .Range(Cells(i, 6), Cells(i, 6)).Value
- Next
- Aenderungen_Erfa_Bear_Index = glArray
- End Select
- Else
- Aenderungen_Erfa_Bear_Index = Array("0_0")
- End If
- End With
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- ErrH:
- If Err <> 0 Then
- Application.ScreenUpdating = True
- MsgBox Err.Description, , "FEHLER"
- Aenderungen_Erfa_Bear_Index = Array("F_F")
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- End If
- End Function
- Function AenderungsTextLoeschen_Text_Alles(intErk As Integer, intZeile As Integer) As Boolean
- Dim i As Integer, lgRow As Long, lgZeile As Long
- Dim ws As Worksheet, wsActiv As Worksheet
- On Error GoTo ErrH
- 'intErk = 0 Text Loeschen
- 'intErk = 1 Alles Loeschen
- Application.ScreenUpdating = False
- 'Verweis auf aktives Blatt
- Set wsActiv = Application.ActiveSheet
- 'Verweis auf Blatt aenderungen_erf
- Set ws = Application.ActiveWorkbook.Worksheets(strTabname)
- 'um einem ausgeblendeten Blatt zuzugreifen vorher Blatt aktivieren
- ws.Activate
- With ws
- lgRow = .Cells(Rows.Count, 1).End(xlUp).Row
- 'nur 300 Zeilen erlauben
- If lgRow > 300 Then
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- Exit Function
- End If
- If lgRow > 1 Then
- Select Case intErk
- Case 0
- 'wenn intZeile +1 = lgRow dann es ist nur
- 'eine Zeile vorhanden. Erste Zeile
- If lgRow = 2 And lgRow = intZeile + 1 Then
- .Range(Cells(lgRow, 1), Cells(lgRow, 6)).ClearContents
- AenderungsTextLoeschen_Text_Alles = True
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- Exit Function
- End If
- 'wenn lgRow = intZeile + 1 dann letzte Zeile
- If lgRow = intZeile + 1 Then
- .Range(Cells(lgRow, 1), Cells(lgRow, 6)).ClearContents
- AenderungsTextLoeschen_Text_Alles = True
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- Exit Function
- End If
- 'von intZeile + 1 (+1) aus
- 'bis Ende (letzte Zeile) kopieren
- .Range(Cells(intZeile + 1 + 1, 1), Cells(lgRow, 6)).Copy
- 'intZeile (+1) einfügen
- .Range(Cells(intZeile + 1, 1), Cells(intZeile + 1, 1)).PasteSpecial (xlPasteValues)
- .Range(Cells(lgRow, 1), Cells(lgRow, 6)).ClearContents
- Application.CutCopyMode = False
- 'letzte Zeilennummer finden
- lgZeile = .Cells(Rows.Count, 1).End(xlUp).Row
- For i = 1 To lgZeile - 1
- .Range(Cells(i + 1, 1), Cells(i + 1, 1)).Value = i
- Next
- .Range(Cells(2, 1), Cells(2, 1)).Select
- AenderungsTextLoeschen_Text_Alles = True
- Case 1
- .Range(Cells(2, 1), Cells(lgRow + 1, 6)).ClearContents
- AenderungsTextLoeschen_Text_Alles = True
- Case Else
- AenderungsTextLoeschen_Text_Alles = False
- End Select
- Else
- AenderungsTextLoeschen_Text_Alles = True
- End If
- End With
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- ErrH:
- If Err <> 0 Then
- MsgBox Err.Description, , "FEHLER"
- AenderungsTextLoeschen_Text_Alles = False
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- End If
- End Function
- 'String Buchstabe fuer Buchstabe nach Zeichen durchsuchen
- Function TextnachZeichen_Durchforsten(ByVal strText As String, _
- ByVal strZeichen As String) As Long
- Dim strZ As String, i&, s&
- s = 0
- For i = 1 To Len(strText)
- strZ = Mid(strText, i, 1)
- If InStr(strZeichen, strZ) <> 0 Then
- s = s + 1
- End If
- Next i
- TextnachZeichen_Durchforsten = s
- End Function
'#############################################################################################
11) Nun können Sie der Schaltfläche das Makro "testmich" zuweisen
' UserForm
Ok jetzt nehmen wir uns die UserForm "frmAenderungen_verwalten" vor.
Wichtigste Eigenschaften von "frmAenderungen_verwalten":
Caption: A E N D E R U N G E N E R F A S S E N / B E A R B E I T E N
Height: 424,5
Width: 465,75
Left: 0
Top: -2,25
12) Fügen Sie der UserForm zwei Beschriftungsfeld zu. Ändern Sie die (Name)-Eigenschaft Label1 --> lbIndex, Label2--> lbAenderungen
a) Eigenschaften von lbIndex
Caption: INDEX
Height: 10
Width: 36
Left: 12
Top: 3
b) Eigenschaften von lbAenderungen
Caption: A E N D E R U N G S T E X T
Height: 12
Width: 216
Left: 120
Top: 3
TextAlign 2 - fmTextAlignCenter
13) Fügen Sie der UserForm eine Listbox zu. Ändern Sie die (Name)-Eigenschaft ListBox1 --> lsbAenderungen
Eigenschaften von lsbAenderungen
Height: 156
Width: 449
Left: 6
Top: 17,25
TextAlign 2 - fmTextAlignLeft
14) Fügen Sie der UserForm zwei Rahmen zu. Ändern Sie die (Name)-Eigenschaften nicht.
a) Eigenschaften von Frame1
Caption: AENDERUNGEN
Height: 145
Width: 450
Left: 6
Top: 179
Font: Thoma Fett 9
b) Eigenschaften von Frame2
Caption: DATUM AENDERN
Height: 80
Width: 92
Left: 364
Top: 318
Font: Thoma Fett 8
15) Aktivieren Sie Frame1. Fügen Sie vier Befehlsschaltfläche, fünf Beschriftungsfeld, zwei Textbox und ein DTPicker zu.
a) Eigenschaften von Befehlsschaltflächen
a.1
(Name): cmdNeu
Caption: NEU
Height: 20
Width: 65
Left: 4
Top: 9
a.2
(Name): cmdInsert
Caption: EINFUEGEN
Height: 20
Width: 65
Left: 4
Top: 40
a.3
(Name): cmdEdit
Caption: BEARBEITEN
Height: 20
Width: 65
Left: 4
Top: 78
a.4
(Name): cmdEinfuegen_bea
Caption: EINFUEGEN
Height: 20
Width: 65
Left: 4
Top: 109
b) Eigenschaften von Beschriftungsfeld
b.1
(Name): lbDatumNeu
Caption: D A T U M
Height: 16
Width: 75
Left: 278
Top: 28
b.2
(Name): Label1
Caption: Eingetragen am
Height: 16
Width: 75
Left: 278
Top: 79
b.3
(Name): Label3
Caption: Geaendert am
Height: 16
Width: 75
Left: 278
Top: 112
b.4
(Name): lbDatumVorh
Caption: Datum
Height: 16
Width: 80
Left: 361
Top: 79
b.5
(Name): Label4
Caption: Datum
Height: 16
Width: 80
Left: 361
Top: 112
c) Eigenschaften von DTPicker
(Name): DTPicker1
Height: 15,75
Width: 78
Left: 361
Top: 28
Value: 09.09.2013
d) Eigenschaften von Texbox
d.1
(Name): txtNeu
Height: 50
Width: 200
Left: 73
Top: 10
MultiLine: True
d.2
(Name): txtEdit
Height: 50
Width: 200
Left: 73
Top: 79
MultiLine: True
16) Aktivieren Sie Frame2. Fügen Sie zwei Optionsfeld und ein DTPicker zu.
a) Eigenschaften von Optionsfeld
a.1
(Name): OptionButton1
Caption: Eingetragen
Height: 15
Width: 70
Left: 6
Top: 8
TextAlign 2 - fmTextAlignCenter
a.2
(Name): OptionButton2
Caption: Geaendert
Height: 15
Width: 70
Left: 6
Top: 29
TextAlign 2 - fmTextAlignCenter
b) Eigenschaften von DTPicker
(Name): DTPicker2
Height: 18
Width: 77,25
Left: 7
Top: 48
Value: 09.09.2013
17) Aktivieren Sie die UserForm "frmAenderungen_verwalten" und fügen Sie vier Befehlsschaltfläche zu.
a) Eigenschaften von Befehlsschaltflächen
a.1
(Name): cmdLoeschen
Caption: TEXT LOESCHEN
Height: 30
Width: 75
Left: 6
Top: 326
a.2
(Name): cmdAlles
Caption: ALLES LOESCHEN
Height: 30
Width: 75
Left: 6
Top: 364
a.3
(Name): cmdUndo
Caption: ALLES VERWERFEN
Height: 30
Width: 75
Left: 285
Top: 326
WordWrap: True
a.4
(Name): cmdExit
Caption: EXIT
Height: 30
Width: 75
Left: 285
Top: 364
'################################################################################
'UserForm-Gestaltung Ende
'################################################################################
18) Klicken Sie mit der rechten Maustaste auf eine freie Fläche der UserForm "frmAenderungen_verwalten" und wählen aus dem Kontexmenü den Befehl"Code anzeigen". Im Codebereich fügen Sie folgende ereignismakros zu
Quellcode
- Option Explicit
- 'Option Compare Text
- Option Base 1
- Private blAll As Boolean
- Dim txtInBearbeitung As String
- 'Variablen die in Bearbeitung benötigt werden
- Dim varIndex, varAender, varDat, varUser, varDat_geaen, varUser_geaen
- 'alle Aenderungen verwerfen
- Dim varStand_1_Index, varStand_1_Aender, varStand_1_Dat, varStand_1_User, varStand_1_Datgeaen, varStand_1_Usergeaen
- '###############################################
- '#####################################################
- 'alle Aenderungstexte werden gelöscht
- Private Sub cmdAlles_Click()
- If MsgBox("Alle Aenderungstexte werden geloescht. Fortfahren?", vbOKCancel, "NEU PROJEKT") = vbOK Then
- 'alles löschen
- If AenderungsTextLoeschen_Text_Alles(1, 0) Then
- Call Form_Clear
- Call VariablenInitialisieren
- Me.cmdUndo.Enabled = True
- blAll = True
- End If
- End If
- End Sub
- Private Sub cmdEdit_Click()
- Me.txtNeu.Value = ""
- Me.txtNeu.Enabled = False
- Me.txtEdit.Enabled = True
- txtEdit.Value = varAender(Me.lsbAenderungen.ListIndex + 2)
- Me.cmdLoeschen.Enabled = False
- Me.cmdLoeschen.Caption = "TEXT LOESCHEN"
- Me.lbDatumVorh.Caption = varDat(Me.lsbAenderungen.ListIndex + 2)
- Me.Label4.Caption = varDat_geaen(Me.lsbAenderungen.ListIndex + 2)
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = True
- Me.OptionButton2.Enabled = True
- txtInBearbeitung = txtEdit.Value
- On Error GoTo ErrH
- 'Me.DTPicker2.Value = varDat(Me.lsbAenderungen.ListIndex + 2)
- Me.DTPicker2.Value = Date
- If Me.DTPicker2.Value = "00:00:00" Then
- Me.DTPicker2.Value = Date
- End If
- ErrH:
- If Err <> 0 Then
- Me.DTPicker2.Value = Date
- End If
- On Error GoTo 0
- End Sub
- 'vorhandene Texte bearbeitet. wird an der gleichen stelle neu eingefügt
- Private Sub cmdEinfuegen_bea_Click()
- Dim strText As String, strZeichen$
- strZeichen = " " & vbCr & vbBack & vbCrLf & vbLf & vbTab & vbVerticalTab
- strText = Me.txtEdit.Value
- strText = Trim$(strText)
- If Trim$(txtInBearbeitung) = strText And Me.OptionButton1.Value = False _
- And Me.OptionButton2.Value = False Then
- txtInBearbeitung = ""
- Me.txtEdit.Value = ""
- Me.txtEdit.SetFocus
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = False
- Me.OptionButton2.Enabled = False
- 'MsgBox "Text ist nicht geaendert"
- Exit Sub
- Else 'entweder Text geaendert oder eine von OptionButton gewählt
- If TextnachZeichen_Durchforsten(strText, strZeichen) <> Len(strText) Then
- Select Case True
- Case Me.OptionButton1.Value
- Call Text_Geaendert_Eintragen(0, Me.lsbAenderungen.ListIndex, 3)
- Case Me.OptionButton2.Value
- Call Text_Geaendert_Eintragen(0, Me.lsbAenderungen.ListIndex, 5)
- Case Else
- Call Text_Geaendert_Eintragen(0, Me.lsbAenderungen.ListIndex)
- End Select
- Call Form_Clear
- Call VariablenInitialisieren
- Me.cmdUndo.Enabled = True
- blAll = True
- Else
- MsgBox "Leerzeichen werden nicht eingefügt.", vbOKOnly + vbInformation
- Me.txtEdit.Value = ""
- Me.txtEdit.SetFocus
- End If
- End If
- End Sub
- 'Neue Text wird der liste angehängt
- Private Sub cmdInsert_Click()
- Dim strText As String, strZeichen$
- strZeichen = " " & vbCr & vbBack & vbCrLf & vbLf & vbTab & vbVerticalTab
- strText = Me.txtNeu.Value
- strText = Trim$(strText)
- If TextnachZeichen_Durchforsten(strText, strZeichen) <> Len(strText) Then
- Call Text_Geaendert_Eintragen(1, 5001)
- Call Form_Clear
- Call VariablenInitialisieren
- Me.cmdUndo.Enabled = True
- blAll = True
- Else
- MsgBox "Leerzeichen werden nicht eingefügt.", vbOKOnly + vbInformation
- Me.txtNeu.Value = ""
- Me.txtNeu.SetFocus
- End If
- End Sub
- 'Neue Text wird von der Liste wegradiert
- Private Sub cmdLoeschen_Click()
- If Trim$(Me.txtEdit.Value) <> "" Then Exit Sub
- If MsgBox("Aenderungstext : " & vbCr & _
- varAender(Me.lsbAenderungen.ListIndex + 2) & vbCr & "Loeschen?", vbOKCancel + vbInformation, "NN NNN") = vbOK Then
- If AenderungsTextLoeschen_Text_Alles(0, Me.lsbAenderungen.ListIndex + 1) Then
- Call Form_Clear
- Call VariablenInitialisieren
- Me.cmdUndo.Enabled = True
- blAll = True
- End If
- End If
- End Sub
- ' Click-Ereignis cmdNeu
- Private Sub cmdNeu_Click()
- Me.txtNeu.Enabled = True
- Me.cmdEinfuegen_bea.Enabled = False
- Me.DTPicker1.Value = Date
- Me.txtNeu.SetFocus
- Me.txtEdit.Value = ""
- Me.txtEdit.Enabled = False
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = False
- Me.OptionButton2.Enabled = False
- End Sub
- ' Click-Ereignis cmdUndo
- Private Sub cmdUndo_Click()
- If MsgBox("Alle Vorgaenge werden zurückgesetzt. Fortfahren?", vbOKCancel + vbQuestion, "NEU PROJEKT") = vbOK Then
- Call AenderungsText_ZurueckSchreiben
- Call Form_Clear
- Call VariablenInitialisieren
- blAll = True
- End If
- End Sub
- ' Click-Ereignis lsbAenderungen
- Private Sub lsbAenderungen_Click()
- Me.cmdLoeschen.Enabled = (Me.lsbAenderungen.ListCount > -1)
- If Me.cmdLoeschen.Enabled = True Then
- Me.cmdLoeschen.Caption = "INDEX [ " & Me.lsbAenderungen.ListIndex + 1 & _
- " ] LOESCHEN"
- End If
- Me.lbDatumVorh.Caption = varDat(Me.lsbAenderungen.ListIndex + 2)
- Me.Label4.Caption = varDat_geaen(Me.lsbAenderungen.ListIndex + 2)
- Me.cmdEdit.Enabled = (Me.lsbAenderungen.ListCount > -1)
- Me.txtEdit.Value = ""
- Me.txtEdit.Enabled = False
- End Sub
- ' DblClick-Ereignis lsbAenderungen
- Private Sub lsbAenderungen_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
- If Me.lsbAenderungen.ListIndex < 0 Then Cancel = True: Exit Sub
- MsgBox "INDEX : " & Me.lsbAenderungen.ListIndex + 1 & vbCr & vbCr _
- & "TEXT : " & varAender(Me.lsbAenderungen.ListIndex + 2) & vbCr & vbCr _
- & "EINTRAG AM : " & varDat(Me.lsbAenderungen.ListIndex + 2) & vbCr _
- & "EINTRAG VOM : " & varUser(Me.lsbAenderungen.ListIndex + 2) & vbCr _
- & "GEAENDERT AM : " & varDat_geaen(Me.lsbAenderungen.ListIndex + 2) & vbCr _
- & "GEAENDERT VOM : " & varUser_geaen(Me.lsbAenderungen.ListIndex + 2) & vbCr
- End Sub
- 'DblClick-Ereignis OptionButton1
- Private Sub OptionButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
- Cancel = True
- Me.OptionButton1.Value = False
- End Sub
- 'DblClick-Ereignis OptionButton2
- Private Sub OptionButton2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
- Cancel = True
- Me.OptionButton2.Value = False
- End Sub
- 'Change-Ereignis txtEdit
- Private Sub txtEdit_Change()
- Me.cmdEinfuegen_bea.Enabled = (Me.txtEdit.Value <> "")
- Me.cmdLoeschen.Enabled = (Me.txtEdit.Value = "")
- If Me.cmdLoeschen.Enabled = True Then
- Me.cmdLoeschen.Caption = "INDEX [ " & Me.lsbAenderungen.ListIndex + 1 & _
- " ] LOESCHEN"
- End If
- Me.DTPicker2.Enabled = (Me.txtEdit.Value <> "")
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = (Me.txtEdit.Value <> "")
- Me.OptionButton2.Enabled = (Me.txtEdit.Value <> "")
- If Len(Me.txtEdit.Value) <= 0 Then Exit Sub
- If Len(Me.txtEdit.Value) > 120 Then
- Me.txtEdit.Value = Left$(Me.txtEdit.Value, 120)
- End If
- End Sub
- 'KeyDown-Ereignis txtEdit
- Private Sub txtEdit_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
- If KeyCode = 13 Then 'Return-Taster Eingabetaster
- KeyCode = 0
- End If
- End Sub
- 'Change-Ereignis txtNeu
- Private Sub txtNeu_Change()
- Me.cmdInsert.Enabled = (Me.txtNeu.Value <> "")
- Me.cmdNeu.Enabled = (Me.txtNeu.Value = "")
- Me.DTPicker1.Enabled = (Me.txtNeu.Value <> "")
- Me.txtEdit.Value = ""
- Me.txtEdit.Enabled = False
- If Len(Me.txtNeu.Value) <= 0 Then Exit Sub
- If Len(Me.txtNeu.Value) > 120 Then
- Me.txtNeu.Value = Left$(Me.txtNeu.Value, 120)
- End If
- End Sub
- 'KeyDown-Ereignis txtNeu
- Private Sub txtNeu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
- If KeyCode = 13 Then 'Return-Taste Eingabetaster
- KeyCode = 0
- End If
- End Sub
- Private Sub UserForm_Initialize()
- 'intErkennung:
- '0=Index
- '1=Aenderungstext
- '2=Datum
- Call VariablenInitialisieren
- varStand_1_Index = varIndex
- If varStand_1_Index(1) = "F_F" Then Exit Sub
- varStand_1_Aender = varAender
- varStand_1_Dat = varDat
- varStand_1_User = varUser
- varStand_1_Datgeaen = varDat_geaen
- varStand_1_Usergeaen = varUser_geaen
- 'Application.ScreenUpdating = True
- End Sub
- Private Sub cmdExit_Click()
- Unload Me
- End
- End Sub
- Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
- 'If MsgBox("wirklich verlassen?", vbOKCancel + vbQuestion, "NEU PROJEKT") = vbOK Then
- Cancel = False
- If blAll = True Then
- Me.Hide
- Call AenderungsBlattFormatieren
- End If
- blAll = False
- If CloseMode = 0 Then Call cmdExit_Click
- Exit Sub
- ' Else
- Cancel = True: Exit Sub
- ' End If
- 'Dialogschliessen über das Kreuz verhindern
- 'If CloseMode <> 1 Then Cancel = True: Exit Sub
- End Sub
- Private Sub VariablenInitialisieren()
- 'intErkennung:
- '0 = Index
- '1 = Aenderungstext
- '2 = Datum
- '3 = User
- Dim i As Long
- txtInBearbeitung = ""
- varIndex = Aenderungen_Erfa_Bear_Index(0)
- If varIndex(1) = "F_F" Then
- Me.cmdEinfuegen_bea.Enabled = False
- Me.cmdInsert.Enabled = False
- Me.cmdAlles.Enabled = (Me.lsbAenderungen.ListIndex > -1)
- Me.cmdAlles.Enabled = False
- Me.cmdEdit.Enabled = False
- Me.cmdLoeschen.Enabled = False
- Me.cmdUndo.Enabled = False
- Me.cmdNeu.Enabled = False
- Me.txtNeu.Enabled = False
- Me.txtEdit.Enabled = False
- Me.cmdLoeschen.Enabled = False
- Me.DTPicker1.Enabled = False
- Me.DTPicker2.Enabled = False
- Me.DTPicker1.Value = Date
- Me.DTPicker2.Value = Date
- Me.Label1.Caption = "Eingetragen am"
- Me.Label3.Caption = "Geaendert am"
- Me.Label4.Caption = ""
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = False
- Me.OptionButton2.Enabled = False
- Me.lbDatumNeu.Caption = " D A T U M "
- Me.lbDatumVorh.Caption = ""
- Me.lbIndex.Caption = "I N D E X"
- Me.lbAenderungen.Caption = "A E N D E R U G S T E X T"
- Exit Sub
- End If
- varAender = Aenderungen_Erfa_Bear_Index(1)
- varDat = Aenderungen_Erfa_Bear_Index(2)
- varUser = Aenderungen_Erfa_Bear_Index(3)
- varDat_geaen = Aenderungen_Erfa_Bear_Index(4)
- varUser_geaen = Aenderungen_Erfa_Bear_Index(5)
- If varIndex(1) = "0_0" Then 'Liste ist leer
- Me.cmdEinfuegen_bea.Enabled = False
- Me.cmdInsert.Enabled = False
- Me.cmdAlles.Enabled = (Me.lsbAenderungen.ListIndex > -1)
- Me.cmdAlles.Enabled = False
- Me.cmdEdit.Enabled = False
- Me.cmdLoeschen.Enabled = False
- Me.cmdUndo.Enabled = False
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = False
- Me.OptionButton2.Enabled = False
- Me.txtNeu.Enabled = False
- Me.txtEdit.Enabled = False
- Me.cmdLoeschen.Enabled = False
- Me.DTPicker1.Enabled = False
- Me.DTPicker2.Enabled = False
- Me.DTPicker1.Value = Date
- Me.DTPicker2.Value = Date
- Me.Label1.Caption = "Eingetragen am"
- Me.Label3.Caption = "Geaendert am"
- Me.Label4.Caption = ""
- Me.lbDatumNeu.Caption = " D A T U M "
- Me.lbDatumVorh.Caption = ""
- Me.lbIndex.Caption = "I N D E X"
- Me.lbAenderungen.Caption = "A E N D E R U G S T E X T"
- Else
- For i = LBound(varIndex) + 1 To UBound(varIndex)
- If i >= 11 Then
- Me.lsbAenderungen.AddItem varIndex(i) & " " & Trim$(varAender(i)) '& " " & varDat(i)
- Else
- Me.lsbAenderungen.AddItem " " & varIndex(i) & " " & Trim$(varAender(i)) '& " " & varDat(i)
- End If
- Next
- Me.cmdEinfuegen_bea.Enabled = False
- Me.cmdInsert.Enabled = False
- Me.cmdAlles.Enabled = (Me.lsbAenderungen.ListIndex < 0)
- Me.cmdEdit.Enabled = False
- Me.cmdLoeschen.Enabled = False
- Me.cmdUndo.Enabled = False
- Me.OptionButton1.Value = False
- Me.OptionButton2.Value = False
- Me.OptionButton1.Enabled = False
- Me.OptionButton2.Enabled = False
- Me.txtNeu.Enabled = False
- Me.txtEdit.Enabled = False
- Me.DTPicker1.Enabled = False
- Me.DTPicker2.Enabled = False
- Me.DTPicker1.Value = Date
- ' Me.DTPicker2.Value = Date
- Me.Label1.Caption = "Eingetragen am"
- Me.Label3.Caption = "Geaendert am"
- Me.Label4.Caption = ""
- Me.lbDatumNeu.Caption = " D A T U M "
- Me.lbDatumVorh.Caption = ""
- Me.lbIndex.Caption = "I N D E X"
- Me.lbAenderungen.Caption = "A E N D E R U G S T E X T"
- Me.lsbAenderungen.Value = Me.lsbAenderungen.List(0)
- Me.lsbAenderungen.ControlTipText = "Klicken Sie doppelt auf die Zeile um alle Daten zu sehen."
- End If
- End Sub
- Private Sub Form_Clear()
- Me.lsbAenderungen.Clear
- Me.txtEdit.Value = ""
- Me.txtNeu.Value = ""
- Me.lbDatumVorh.Caption = ""
- Me.Label4.Caption = ""
- End Sub
- Private Sub AenderungsText_ZurueckSchreiben()
- Dim i As Integer, lgRow As Long
- Dim ws As Worksheet, wsActiv As Worksheet
- On Error GoTo ErrH
- Application.ScreenUpdating = False
- 'Verweis auf aktives Blatt
- Set wsActiv = Application.ActiveSheet
- 'Verweis auf Blatt aenderungen_erf
- Set ws = Application.ActiveWorkbook.Worksheets(strTabname)
- 'um einem ausgeblendeten Blatt zuzugreifen vorher Blatt aktivieren
- ws.Activate
- With ws
- lgRow = .Cells(Rows.Count, 1).End(xlUp).Row
- If lgRow > 1 Then 'mehr als eine Zeile
- 'Blatt ausräumen
- .Range(Cells(2, 1), Cells(lgRow, 6)).ClearContents
- 'vorher gespeicherten Werte zurueckschreiben
- For i = 1 To UBound(varStand_1_Index) - 1
- .Range(Cells(i + 1, 1), Cells(i + 1, 1)).Value = i
- .Range(Cells(i + 1, 2), Cells(i + 1, 2)).Value = varStand_1_Aender(i + 1)
- .Range(Cells(i + 1, 3), Cells(i + 1, 3)).Value = varStand_1_Dat(i + 1)
- .Range(Cells(i + 1, 4), Cells(i + 1, 4)).Value = varStand_1_User(i + 1)
- .Range(Cells(i + 1, 5), Cells(i + 1, 5)).Value = varStand_1_Datgeaen(i + 1)
- .Range(Cells(i + 1, 6), Cells(i + 1, 6)).Value = varStand_1_Usergeaen(i + 1)
- Next
- Else
- For i = 1 To UBound(varStand_1_Index) - 1
- .Range(Cells(i + 1, 1), Cells(i + 1, 1)).Value = i
- .Range(Cells(i + 1, 2), Cells(i + 1, 2)).Value = varStand_1_Aender(i + 1)
- .Range(Cells(i + 1, 3), Cells(i + 1, 3)).Value = varStand_1_Dat(i + 1)
- .Range(Cells(i + 1, 4), Cells(i + 1, 4)).Value = varStand_1_User(i + 1)
- .Range(Cells(i + 1, 5), Cells(i + 1, 5)).Value = varStand_1_Datgeaen(i + 1)
- .Range(Cells(i + 1, 6), Cells(i + 1, 6)).Value = varStand_1_Usergeaen(i + 1)
- Next
- End If
- End With
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- ErrH:
- If Err <> 0 Then
- MsgBox Err.Description, , "FEHLER"
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- End If
- End Sub
- Private Sub Text_Geaendert_Eintragen(intErkennung As Integer, intPos As Integer, Optional varDatumAenderung As Variant)
- Dim i As Integer, lgRow As Long, strUserName$
- Dim ws As Worksheet, wsActiv As Worksheet
- '0 = Texte geaendert Werte aus txtEdit
- '1= Texte neu
- On Error GoTo ErrH
- Application.ScreenUpdating = False
- 'Verweis auf aktives Blatt
- Set wsActiv = Application.ActiveSheet
- 'Verweis auf Blatt aenderungen_erf
- Set ws = Application.ActiveWorkbook.Worksheets(strTabname)
- 'um einem ausgeblendeten Blatt zuzugreifen vorher Blatt aktivieren
- ws.Activate
- strUserName = AnwenderName_Aktuell()
- lgRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
- With ws
- Select Case intErkennung
- Case 0 'geaenderte Texte
- 'Zeile ausräumen
- .Range(Cells(intPos + 2, 2), Cells(intPos + 2, 2)).ClearContents
- .Range(Cells(intPos + 2, 6), Cells(intPos + 2, 6)).ClearContents
- .Range(Cells(intPos + 2, 2), Cells(intPos + 2, 2)).Value = Me.txtEdit.Value
- '.Range(Cells(intPos + 2, 3), Cells(intPos + 2, 3)).Value = CStr(Me.DTPicker2.Value)
- .Range(Cells(intPos + 2, 6), Cells(intPos + 2, 6)).Value = strUserName
- If Not IsMissing(varDatumAenderung) Then
- Select Case varDatumAenderung
- Case 3
- .Range(Cells(intPos + 2, 3), Cells(intPos + 2, 3)).Value = CStr(Me.DTPicker2.Value)
- If .Range(Cells(intPos + 2, 5), Cells(intPos + 2, 5)).Value = "" Then
- .Range(Cells(intPos + 2, 5), Cells(intPos + 2, 5)).Value = CStr(Me.DTPicker2.Value)
- End If
- Case 5
- .Range(Cells(intPos + 2, 5), Cells(intPos + 2, 5)).Value = CStr(Me.DTPicker2.Value)
- If .Range(Cells(intPos + 2, 3), Cells(intPos + 2, 3)).Value = "" Then
- .Range(Cells(intPos + 2, 3), Cells(intPos + 2, 3)).Value = CStr(Me.DTPicker2.Value)
- End If
- End Select
- Else
- .Range(Cells(intPos + 2, 5), Cells(intPos + 2, 5)).Value = CStr(Me.DTPicker2.Value) 'ist es nicht überflüssig?
- End If
- Case 1 'Texte neu
- .Range(Cells(lgRow + 1, 1), Cells(lgRow + 1, 1)).Value = lgRow
- .Range(Cells(lgRow + 1, 2), Cells(lgRow + 1, 2)).Value = Me.txtNeu.Value
- .Range(Cells(lgRow + 1, 3), Cells(lgRow + 1, 3)).Value = CStr(Me.DTPicker1.Value)
- .Range(Cells(lgRow + 1, 4), Cells(lgRow + 1, 4)).Value = strUserName
- End Select
- End With
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- ErrH:
- If Err <> 0 Then
- MsgBox Err.Description, , "FEHLER"
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- End If
- End Sub
- Private Sub AenderungsBlattFormatieren()
- Dim i As Integer, lgRow As Long
- Dim ws As Worksheet, wsActiv As Worksheet
- Dim strPrintArea$
- On Error GoTo ErrH
- Application.ScreenUpdating = True
- DoEvents
- Me.Hide
- Application.ScreenUpdating = False
- 'Verweis auf aktives Blatt
- Set wsActiv = Application.ActiveSheet
- 'Verweis auf Blatt aenderungen_erf
- Set ws = Application.ActiveWorkbook.Worksheets(strTabname)
- 'um einem ausgeblendeten Blatt zuzugreifen vorher Blatt aktivieren
- ws.Activate
- Application.ScreenUpdating = False
- lgRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
- With ws
- 'Druckbereich zuweisen
- strPrintArea = .Range(Cells(1, 1), Cells(lgRow, 6)).Address
- 'alle Zellen haben Textformat
- .Range(Cells(1, 2), Cells(lgRow, 6)).NumberFormat = "@"
- 'in Spalte 2 ab Zeile 2 Zeilenumbruch
- .Range(Cells(2, 2), Cells(lgRow, 2)).WrapText = True
- 'von der ersten Spalte bis zu vierten Spalte
- .Range(Cells(1, 1), Cells(1, 6)).HorizontalAlignment = xlCenter
- .Range(Cells(1, 1), Cells(1, 6)).VerticalAlignment = xlBottom
- .Range(Cells(1, 1), Cells(1, 6)).Font.Name = "Arial"
- .Range(Cells(1, 1), Cells(1, 6)).Font.FontStyle = "Fett"
- .Range(Cells(1, 1), Cells(1, 6)).Font.Size = 10
- .Range(Cells(2, 1), Cells(lgRow, 1)).HorizontalAlignment = xlCenter
- .Range(Cells(2, 1), Cells(lgRow, 1)).VerticalAlignment = xlBottom
- .Range(Cells(2, 3), Cells(lgRow, 3)).HorizontalAlignment = xlRight
- .Range(Cells(2, 3), Cells(lgRow, 3)).VerticalAlignment = xlBottom
- .Range(Cells(2, 5), Cells(lgRow, 5)).HorizontalAlignment = xlRight
- .Range(Cells(2, 5), Cells(lgRow, 5)).VerticalAlignment = xlBottom
- .Range(Cells(2, 4), Cells(lgRow, 4)).HorizontalAlignment = xlRight
- .Range(Cells(2, 4), Cells(lgRow, 4)).VerticalAlignment = xlBottom
- .Range(Cells(2, 6), Cells(lgRow, 6)).HorizontalAlignment = xlRight
- .Range(Cells(2, 6), Cells(lgRow, 6)).VerticalAlignment = xlBottom
- .Range(Cells(1, 1), Cells(1, 1)).Value = "INDEX"
- .Range(Cells(1, 2), Cells(1, 2)).Value = "AENDERUNGSTEXT"
- .Range(Cells(1, 3), Cells(1, 3)).Value = "EINTRAG AM"
- .Range(Cells(1, 4), Cells(1, 4)).Value = "EINTRAG VON"
- .Range(Cells(1, 5), Cells(1, 5)).Value = "GEAENDERT AM"
- .Range(Cells(1, 6), Cells(1, 6)).Value = "GEAENDERT VON"
- 'Zeilenwerte
- .Rows("1:1").RowHeight = 17
- .Rows("2:400").RowHeight = 45
- 'Spaltenwerte
- .Columns("A:A").ColumnWidth = 6
- .Columns("B:B").ColumnWidth = 68
- .Columns("C:C").ColumnWidth = 15
- .Columns("D:D").ColumnWidth = 18
- .Columns("E:E").ColumnWidth = 15
- .Columns("F:F").ColumnWidth = 18
- .Range("A1").Select
- With ActiveSheet.PageSetup
- .PrintTitleRows = "$1:$1"
- ' .PrintArea = ""
- .PrintArea = strPrintArea
- ' .PrintTitleColumns = ""
- .PrintGridlines = True
- .LeftHeader = "&D &T"
- .CenterHeader = ActiveWorkbook.Name
- ' .RightHeader = ""
- ' .LeftFooter = ""
- .CenterFooter = ActiveWorkbook.FullName
- .RightFooter = "&P& /&N"
- .LeftMargin = Application.CentimetersToPoints(1.4)
- .RightMargin = Application.CentimetersToPoints(1.4)
- .TopMargin = Application.CentimetersToPoints(2#)
- .BottomMargin = Application.CentimetersToPoints(2#)
- .HeaderMargin = Application.CentimetersToPoints(1.2)
- .FooterMargin = Application.CentimetersToPoints(1.2)
- ' .PrintHeadings = False
- ' .PrintComments = xlPrintNoComments
- .CenterHorizontally = True
- ' .CenterVertically = False
- .Orientation = xlLandscape
- ' .Draft = False
- .PaperSize = xlPaperA4
- ' .FirstPageNumber = xlAutomatic
- ' .Order = xlDownThenOver
- ' .BlackAndWhite = False
- .Zoom = 95
- '.PrintErrors = xlPrintErrorsDisplayed
- End With
- ' '.PrintOut
- End With
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- ErrH:
- If Err <> 0 Then
- MsgBox Err.Description, , "FEHLER"
- Set ws = Nothing
- wsActiv.Activate
- Set wsActiv = Nothing
- Application.ScreenUpdating = True
- End If
- End Sub
Der Code ist unter Excel 2003/2010/2013 (deutsche Version) 32bit lauffähig.
Ich wünsche euch viel Spaß damit.
Edit by ~blaze~:
*Code durch VB-Tag ersetzt*
aufgrund des Datenumfangs Spoiler hinzugefügt ~VaporiZed
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()