Sub FeiertageMarkieren()
'Wird manuell aufgerufen
'Feiertage Zeile 1 bis Zeile 4 jeweils rosa Färben
Dim Situation As Integer
Dim BeginnSpalte As Long, EndeSpalte
Dim JahrZeile As Long, SchlPlan, SchlFei, FeiWo, LetztFei
Dim MonatJan As String, TitFei, Farbe
Dim Abk As Object
Dim TagFei As Date
'Blattschutz etc. unterdrücken
Call Blattschutz.Blattschutz_Nein
'Benötigte Variabeln berechnen
BeginnSpalte = Cells(1, (Range("Delais").Column) + 1).Column
EndeSpalte = Cells((Range("EndeX").Row), (Range("EndeX").Column)).Column
Set Abk = ThisWorkbook.Worksheets(2)
LetztFei = 12 'Letzter Feiertag im Jahr (Total 12 pro Jahr).
Situation = 0
ActiveWorkbook.Colors(5) = RGB(255, 204, 255)
Farbe = 5 'rosa
'Kommentare Feiertage löschen
Range(Cells(Range("EndeX").Row, BeginnSpalte), _
Cells((Range("EndeX").Row), (Range("EndeX").Column))).Comment.Delete
'Anzahl Jahre 2008 - 2011
For JahrZeile = 6 To 9
'Ab erster Feiertag 2007
For SchlFei = 2 To LetztFei
'hole Feiertag in Tabelle 2 und berechne die Kalenderwoche
TagFei = Abk.Cells(JahrZeile, SchlFei).Value
FeiWo = KWJ(Abk.Cells(JahrZeile, SchlFei).Value)
TitFei = Abk.Cells(1, SchlFei).Value
'durchlaufe alle Spalten Tabelle 1
For SchlPlan = BeginnSpalte To EndeSpalte
'Situation 1 ist Feiertag und hat rosa Markierung
If Columns(SchlPlan).Interior.Color = Farbe _
And Cells(2, SchlPlan).Value = FeiWo Then _
Situation = 1
'Situation 2 ist Feiertag
If Cells(2, SchlPlan).Value = FeiWo Then _
Situation = 2
'Situation 3 hat rosa Markierung
If Columns(SchlPlan).Interior.Color = Farbe _
Then Situation = 3
'Auswahl
Select Case Situation
Case 1
'nichts machen, Kommentar korrigieren
Cells(2, SchlPlan).Comment.Clear
Range(Cells(2, SchlPlan)).Comment.Text TitFei & Date
Situation = 0
Case 2
'Feiertag rosa markieren
Range(Cells(1, SchlPlan), Cells(4, SchlPlan)) _
.Interior.ColorIndex = Farbe
'Kommentar löschen
Cells(2, SchlPlan).ClearComments
'Neuer Kommentar schreiben
Cells(2, SchlPlan).AddComment
Cells(2, SchlPlan).Comment.Text _
Text:=TitFei & Chr(10) & TagFei
Situation = 0
Case 3
'Rosa Markierung weg
Range(Cells(1, SchlPlan), Cells(4, SchlPlan)) _
.Interior.ColorIndex = xlNone
'Kommentar weg
Range(Cells(1, SchlPlan), Cells(4, SchlPlan)) _
.Comment.Delete
Situation = 0
End Select
Next
Next
Next
'Blattschutz etc. aktivieren
Call Blattschutz.Blattschutz_Ja
'Gehe zur Aktuelle Woche
Call GoToAktuelleWoche
End Sub
Gruß
stefan
On 1 Mrz., 18:21, Willy Steffen
> Ich habe eine Aenderung in einem Makro fornehmen wollen und jetzt kriege ich
> den Fehler "Objektvariable oder With-Blockvariable nicht festgelegt (Fehler
> 91)" Ich habe herumgeübt aber es will einfach nicht gehen. Kann mir da jemand
> helfen?
Gute Nachricht, schlechte Nachricht.
Die gute, Du kannst für den Fehler wahrscheinlich nix, der tritt nur
dann auf wenn keine Kommentare da sind. Hab ich behoben.
Die schlechte, es gibt ein Object "Blattschutz" das irgendwo anders
initialisiert wird..., weil "Call Blattschutz.Blattschutz_Nein" wird
bei mir nicht ausgeführt.
Der Rest sieht ok aus.
Andreas.
Sub FeiertageMarkieren()
'Wird manuell aufgerufen
'Feiertage Zeile 1 bis Zeile 4 jeweils rosa Färben
Dim Situation As Integer
Dim BeginnSpalte As Long, EndeSpalte
Dim JahrZeile As Long, SchlPlan, SchlFei, FeiWo, LetztFei
Dim MonatJan As String, TitFei, Farbe
Dim Abk As Object
Dim TagFei As Date
Dim Kommentare As Comment
'Blattschutz etc. unterdrücken
Call Blattschutz.Blattschutz_Nein
'Benötigte Variabeln berechnen
BeginnSpalte = Cells(1, (Range("Delais").Column) + 1).Column
EndeSpalte = Cells((Range("EndeX").Row), _
(Range("EndeX").Column)).Column
Set Abk = ThisWorkbook.Worksheets(2)
LetztFei = 12 'Letzter Feiertag im Jahr (Total 12 pro Jahr).
Situation = 0
ActiveWorkbook.Colors(5) = RGB(255, 204, 255)
Farbe = 5 'rosa
'Kommentare Feiertage löschen
Set Kommentare = Range(Cells(Range("EndeX").Row, BeginnSpalte), _
Cells((Range("EndeX").Row), (Range("EndeX").Column))).Comment
If Not Kommentare Is Nothing Then Kommentare.Delete
'Anzahl Jahre 2008 - 2011
For JahrZeile = 6 To 9
'Ab erster Feiertag 2007
For SchlFei = 2 To LetztFei
'hole Feiertag in Tabelle 2 und berechne die Kalenderwoche
TagFei = Abk.Cells(JahrZeile, SchlFei).Value
FeiWo = KWJ(Abk.Cells(JahrZeile, SchlFei).Value)
TitFei = Abk.Cells(1, SchlFei).Value
'durchlaufe alle Spalten Tabelle 1
For SchlPlan = BeginnSpalte To EndeSpalte
'Situation 1 ist Feiertag und hat rosa Markierung
If Columns(SchlPlan).Interior.Color = Farbe And Cells(2, _
SchlPlan).Value = FeiWo Then Situation = 1
'Situation 2 ist Feiertag
If Cells(2, SchlPlan).Value = FeiWo Then Situation = 2
'Situation 3 hat rosa Markierung
If Columns(SchlPlan).Interior.Color = Farbe Then _
'Kommentare Feiertage löschen
Range(Cells(Range("EndeX").Row, BeginnSpalte), _
Cells((Range("EndeX").Row), (Range("EndeX").Column))).Comment.Delete
der Code
Public Sub Blattschutz_Nein()
'Ereignisse unterdrücken
Application.EnableEvents = False
'Blattschutz wird entfernt
ActiveSheet.Unprotect ("abc")
'automatische Bildschirm Auffrischung wird ausgeschaltet
Application.ScreenUpdating = False
'automatische Berechnung wird ausgeschaltet
Application.Calculation = xlCalculationManual
End Sub
der Nächste
Public Sub Blattschutz_Ja()
'automatische Berechnung wird eingeschaltet
Application.Calculation = xlCalculationAutomatic
'automatische Bildschirm Auffrischung wird ausgeschaltet
Application.ScreenUpdating = True
'Blattschutz wird aktiviert
ActiveSheet.Protect ("abc")
'Ereignisse wieder Erlauben
Application.EnableEvents = True
End Sub
der Letzte
Function KWJ(ByVal DatumKWJ As Date) As String
'Liefert die mit dem passenden Jahr als "KW-JJ"
Dim Jahr As Integer, Woche As Integer
Dim TeilKWJ As Long
TeilKWJ = DateSerial(Year(DatumKWJ + (8 - Weekday(DatumKWJ)) Mod 7 - 3), 1,
1)
Woche = ((DatumKWJ - TeilKWJ - 3 + (Weekday(TeilKWJ) + 1) Mod 7)) \ 7 + 1
Jahr = Year(DatumKWJ)
'Woche = KW(DatumKWJ)
If Year(DatumKWJ + 7) <> Jahr Or Year(DatumKWJ - 7) <> Jahr Then
'Datum knapp am Jahreswechsel
If Month(DatumKWJ) > 6 Then
'Dezember: Gehört sie zum nächsten Jahr?
If Woche < 26 Then Jahr = Jahr + 1
Else
'Januar: Gehört sie zum letzten Jahr?
If Woche > 26 Then Jahr = Jahr - 1
End If
End If
KWJ = Woche & "-" & Right(Jahr, 2)
End Function
"stefan onken" schrieb:
"Andreas Killer" schrieb:
"Andreas Killer" schrieb:
Am Fri, 6 Mar 2009 15:47:01 -0800 schrieb Willy Steffen:
> Dim BeginnSpalte As Long, EndeSpalte
> Dim JahrZeile As Long, SchlPlan, SchlFei, FeiWo, LetztFei
> Dim MonatJan As String, TitFei, Farbe, Test
eine kleine Anmerkung zu deiner Deklaration. Die Variablen EndeSpalte,
SchlPlan, SchlFei, FeiWo, LetztFei, TitFei, Farbe und Test sind alle vom
Typ Variant.
Die automatische Typenumwandlung bei Variant kann zu schwer erkennbaren
Fehlern führen, man sollte sich darüber immer im Klaren sein.
Viele Grüße
Michael
--
http://michael-schwimmer.de
Masterclass Excel VBA ISBN-10: 3827325250
Das Excel-VBA Codebook ISBN-10: 3827324718
Microsoft Office Excel 2007-Programmierung ISBN-10: 3866454139
"Michael Schwimmer" schrieb:
Am Mon, 9 Mar 2009 07:53:01 -0700 schrieb Willy Steffen:
> Nun habe ich gemeint, dass As Lomg eben nicht Variant ist sondern ein
> Datentyp für sich!
Long ist tatsächlich ein Datentyp für sich. Es geht aber darum, dass für
jede deklarierte Variable auch ein Datentyp angegeben werden sollte. Lässt
man diesen weg, hast du eben eine Variantvariable.
Anders als in anderen Programmiersprachen verwenden Variablen, die einer
ZEILE stehen, eben nicht den Datentyp, der beispielsweise bei der ersten
oder letzten Deklaration in einer Zeile verwendet wird.
Probier mal folgendes:
Sub Datentypen()
Dim x As Single, y
y = "1,234567890123456789"
x = y
If x <> y Then MsgBox "x ungleich y"
MsgBox "Typ x = " & VarType(x) & vbCrLf & _
"Typ y = " & VarType(y)
MsgBox "x = " & Format(x, "0.000000000000000000") & vbCrLf & _
"y = " & Format(y, "0.000000000000000000")
End Sub
> Vielleicht kannst Du mir ja ein Typ geben wo ich für Laien nützliche
> Informationen erhalte? rsp nachlesen kann?
Gute Computerbücher sind teuer, je spezieller, desto teurer (wegen der sehr
geringen Auflage). Es gibt im Netz aber garantiert gute Seiten, die als
Einstieg dienen, da können dir sicherlich die anderen Teilnehmer dieser NG
weiterhelfen.
Später sollte dann schon einmal ein Buch angeschafft werden, wobei zwischen
Billig und Preiswert unterschieden werden muss. Einfach mal die Bewertungen
und Kommentare bei Amazon durchlesen (die schlechten aber nicht vergessen).
Über Einsteigerbücher kann ich dir nichts sagen, aber der Name Kofler bürgt
eigentlich für Qualität, von dem habe ich selbst ein paar Bücher.
Das wichtigste ist aber das Probieren und der Makrorekorder. Einfach mal
eine Aktion aufzeichnen und dann anschauen. Als erstes solltest du dann
lernen, das .Select rauszuschmeißen und direkt (und vollständig) zu
referenzieren, aber das nur so am Rande.
Das Objektmodell von Excel ist sehr komplex, das durchschaut man nicht über
Nacht und wenn man es ausführlich beschreiben will, passt es auch nicht in
ein Buch. Deshalb verwende ich auch heute noch oft den Makrorekorder, die
Hilfe und den Objektkatalog.
Der Objektkatalog (F2) in der Entwicklungsumgebung wird oft nicht beachtet,
ist aber IMO unverzichtbar und ein wichtiger Einstiegspunkt in die Hilfe.
Die ist übrigens gar nicht so schlecht, man muss halt nur erst einmal
finden, wonach man eigentlich sucht.