vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebox 
Autor: Hollie
Datum: 20.04.23 12:53

Hallo "imebro",
"PersChef" trägt seine Code in Spalte "O" ein?
Am 13.04. schreibst Du Spalte "K". Gut, wahrscheinlich eine Fehlangabe wg. Eile.

Eines noch vorweg, das habe ich eben erst gemerkt. Das Sperren der Zellen pro Zeile. Bei mir
funktioniert Deine Zeile "objCell.EntireRow.Locked = True" in "Workbook_BeforeSave" nicht. Ich habe
deshalb "Worksheet_Change" ergänzt (siehe Codeausschnitt).
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 17 Then '=Spalte "Q"
    Select Case Target.Row
      Case 9 To 20           'Zeilen 9...20
        If ActiveSheet.Cells(Target.Row, 17) = Date Then
          ActiveSheet.Range(Cells(Target.Row, 1), Target.Cells(Row, 17)).Locked _
            = True 'neu
          ActiveSheet.Protect(Password:="XXXXXXX", UserInterfaceOnly:=True) = _
          True
          ThisWorkbook.Save
          MsgBox "Zeile " & Target.Row & ":" & vbCrLf & "Dieser Urlaub ist" & _
            "jetzt nicht mehr veränderbar!", 64
        End If
    End Select
  End If
End Sub
'Die Zeile "objCell.EntireRow.Locked = True" in "Workbook_BeforeSave" 
' streichen/deaktivieren.
Es ist wirklich schwer, etwas nachzuvollziehen, wenn man nicht alle Details eines Projektes kennt.
In meiner Testdatei hab ich das folgendermaßen nachvollzogen:
als "Code" für die Eingabespalte "K" verwende ich "ok" (ich muss ja den "Code" vom PersCh nicht verschleiern)
die Zellen "O9"..."O20" sind "bedingt formatiert" mit "=Wenn(K9="ok;"ok","")" usw. Zeile fortlfd. angepasst natürlich;
die Zellen "P9"..."P20" sind "bedingt formatiert" mit "=Wenn(O9="ok";"genehmigt","") usw. Zeile fortlfd. angepasst natürlich;

Im Ablauf passiert nun folgendes:
- PersCh gibt Code in "K9" ein (bei mir "ok")
- Zelle "O9" reagiert wegen "=Wenn(K9="ok;"ok","")" und beschreibt sich mit "ok"
- Zelle "P9" reagiert wegen "=Wenn(O9="ok";"genehmigt";"") und beschreibt sich selbst mit "genehmigt"
- jetzt tritt "Worksheet_Calculate" in Aktion und sucht alle 12 Zeilen der Spalte "O" nach einem "ok" ab
(denn hier steht ja "For Each objCell In Range("O9:O20")") und
wird in Zeile 9 (also Zelle "O9") fündig ("If .Text = "ok" Then").
Weil nun hier "If Not IsDate" wahr ist (die Zelle "Q9" ist ja noch leer), wird das Datum eingetragen
(If Not IsDate(.Offset(0, 2).Value) Then .Offset(0, 2) = Date).
(PS: dieses Eintragen ruft "Worksheet_Calculate" erneut auf, ist aber nicht von Belang, da das ergebnislos bleibt.)
- Jetzt tritt (automatisch) das Ereignis "Worksheet_Change" ein und reagiert auf den erfolgten Datums-Eintrag in Zelle "Q9".
"Worksheet_Change" ermittelt Zeile 9 und Spalte 17 ("Q") und fragt mit
"If ActiveSheet.Cells(Target.Row, 17) = Date Then", ob hier ein Datum drinsteht. Ergebnis positiv, ja, es ist so.
- Da positiv geprüft wurde, kommt es nun zu
(1.) "ActiveSheet.Range(Cells(Target.Row, 1), Target.Cells(Row, 17)).Locked = True" (neu: das Zellen-Sperren)
(2.) "ActiveSheet.Protect(Password:="XXXXXXX", UserInterfaceOnly:=True) = True" (Tabellenblatt schützen)
(3.) "ThisWorkbook.Save" (Arbeitsmappe speichern)
- "ThisWorkbook.Save" ruft "Workbook_BeforeSave" auf und hier werden alle Zellen "Q9"..."Q20" auf einen
Eintrag "Datum" geprüft ("For Each objCell In .Range("Q9:Q20")").
Jede Zeile, die in Spalte "Q" einen Datumseintrag hat ("If IsDate(objCell.Value) Then"),
wird nun duch die Anweisung "objCell.Interior.Color = RGB(221..." ausgegraut
(das passiert übrigens auch für Zeilen, die schon mal durch das Genehmigungsverfahren gelaufen sind).
- Nun kehrt die Programmabfolge SPEICHERND nach "Worksheet_Change" zurück, denn es gilt noch die MsgBox-Anweisung zu erledigen.
- Ist das geschafft, läuft "Worksheet_Calculate" weiter ab, denn es wurden ja noch nicht alle Zeilen auf Datumseintrag
geprüft. Das wäre für Deine Anwendung eigentlich nicht weiter notwendig,
da aber überall "For Each objCell In Range("O9:O20")" (also "für alle Zellen "O9" bis "O20"") angewiesen ist,
muss also auch alles (hier ohne weitere Ergebnisse) abgearbeitet werden.

Was ich nun noch mehr für Dich tun könnte, das weiß ich nicht. Bei mir läuft es so ab, wie Du es gewünscht hast
(natürlich alles nur auf "PersCh" bezogen). VG.
PS: sollte es immer noch nicht laufen, dann besser per Mail, denn wir müssen diesen Beitrag ja nicht noch weiter aufblasen.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
VBA-Code ergänzen durch autom. Speicherung und Messagebox547imebro03.04.23 15:06
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...158imebro05.04.23 14:39
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...126Hollie12.04.23 12:10
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...135imebro13.04.23 08:46
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...109Hollie13.04.23 11:01
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...125imebro13.04.23 12:29
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...105Hollie15.04.23 08:42
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...103Hollie15.04.23 08:48
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...104Hollie15.04.23 08:53
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...108imebro18.04.23 12:19
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...85Hollie18.04.23 18:39
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...110imebro19.04.23 10:43
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...83Hollie19.04.23 14:28
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...104imebro19.04.23 15:14
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...87Hollie19.04.23 21:43
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...78imebro20.04.23 10:41
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...90Hollie20.04.23 12:53
Re: VBA-Code ergänzen durch autom. Speicherung und Messagebo...105imebro20.04.23 14:29

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel