Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Objektvariable oder With-Blockvariable nicht festgelegt (Fehler 91

410 views
Skip to first unread message

Willy Steffen

unread,
Mar 1, 2009, 12:21:01 PM3/1/09
to
Hallo guten Abend NG
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?
Hier den Code:

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

stefan onken

unread,
Mar 2, 2009, 2:57:04 AM3/2/09
to
hallo Willy,
meist fehlt mir ein End If oder End With bei der Meldung.
Auf den ersten Blick sehe ich den Fehler jedoch nicht.
Wenn die Fehlermeldung kommt, kannst du darin auf Debuggen klicken und
die den Fehler hervorrufende Zeile ist gelb unterlegt. Welche?
Wie lautet denn der Code der anderen Makros (Blattschutz_Nein , KWJ)?
Ist der Code und die Tabellen in derselben Datei?
Ich versuche in solchen Fällen, über in den Code eingefügte MsgBoxen
oder das Direktfenster den Fehler einzugrenzen.

Gruß
stefan


On 1 Mrz., 18:21, Willy Steffen

Andreas Killer

unread,
Mar 2, 2009, 1:11:44 PM3/2/09
to
Willy Steffen schrieb:

> 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 _

Willy Steffen

unread,
Mar 2, 2009, 4:27:02 PM3/2/09
to
Hallo Stefan
Sorry habe vergessen die Markierung zu machen.
Es ist ziemlich am Anfang und zwar folgender Satz ist gelb. Ohne diesen Satz
läuft das Pgm ohne Probleme durch. Die Programme sind jeweils in einem
separaten Modul. Hoffentlich kannst Du nun was sehen.
Auf jeden Fall vielen Dank für Deine Bemühungen.
Tschüss
Willy

'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:

Willy Steffen

unread,
Mar 2, 2009, 4:32:01 PM3/2/09
to
Hallo Andreas
Vielen Dank für die Unterstützung. Sorry habe nicht gedacht, dass der
Blattschutz nötig ist. Ich habe den Code nachträglich bei Stefan Onken
eingetragen.
Werde Dein Code am Mittwoch ausprobieren. Unterdessen vielen Dank und Gruss
Willy

"Andreas Killer" schrieb:

Willy Steffen

unread,
Mar 6, 2009, 6:47:01 PM3/6/09
to
Hallo Andreas
Dein Code lief ohne Probleme durch, jedoch wurden die Kommentare nicht
gelöscht. Ich danke Dir auf jeden fall für Deine Hilfe.
Deshalb habe ich weiter herum probiert, und nun geht es:
Hier den Code:

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, Test

Dim Abk As Object
Dim TagFei As Date
Dim cmt As Comment
Dim Ktext As String


'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(2, BeginnSpalte), Cells(2, EndeSpalte)).ClearComments

'Anzahl Jahre 2008 - 2011
'Mit Farbe ausgefüllte Zellen löschen
Range(Cells(1, BeginnSpalte), Cells(4, EndeSpalte)) _
.Interior.ColorIndex = xlNone

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
Test = Cells(2, SchlPlan).Value
If Cells(1, SchlPlan).Interior.ColorIndex = Farbe _
And Test = FeiWo Then Situation = 1
'Situation 2 ist Feiertag und hat keine rosa Markierung
If Test = FeiWo And Cells(1, SchlPlan).Interior.ColorIndex _
= xlNone Then Situation = 2

'Auswahl
Select Case Situation
Case 1
'nichts machen, Kommentar korrigieren
Set cmt = Cells(2, SchlPlan).Comment
If Not cmt Is Nothing Then
Ktext = cmt.Text
'On Error Resume Next
'Cells(2, SchlPlan).AddComment
Cells(2, SchlPlan).Comment.Text _
Text:=Ktext & Chr(10) & TitFei & " / " & TagFei
Else

Cells(2, SchlPlan).AddComment
Cells(2, SchlPlan).Comment.Text _
Text:=TitFei & " / " & TagFei
End If

Situation = 0
Case 2
'Feiertag rosa markieren und Kommentar hinzufügen

Range(Cells(1, SchlPlan), Cells(4, SchlPlan)) _
.Interior.ColorIndex = Farbe
'Neuer Kommentar schreiben
Set cmt = Cells(2, SchlPlan).Comment
If Not cmt Is Nothing Then
Ktext = cmt.Text
'Cells(2, SchlPlan).AddComment
Cells(2, SchlPlan).Comment.Text _
Text:=Ktext & Chr(10) & TitFei & " / " & TagFei
Else

Cells(2, SchlPlan).AddComment
Cells(2, SchlPlan).Comment.Text _
Text:=TitFei & " / " & TagFei
End If

Situation = 0
End Select
Next SchlPlan
Next SchlFei
Next JahrZeile

'Blattschutz etc. aktivieren
Call Blattschutz.Blattschutz_Ja
'Gehe zur Aktuelle Woche
Call GoToAktuelleWoche
End Sub


"Andreas Killer" schrieb:

Michael Schwimmer

unread,
Mar 8, 2009, 7:56:34 PM3/8/09
to
Hallo Willy,

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

Willy Steffen

unread,
Mar 9, 2009, 10:53:01 AM3/9/09
to
Hallo Michael
Ich danke Dir für die Bemerkung. Ich muss zugeben ich bin im VBA ein
Anfänger und habe mich rechts links informiert und Teile aufgenommen um meine
Anwendung so zu gestalten, die meinem Bedürfnis entspricht.
Mit den Variablen und den Datentypen habe ich meine Probleme und die ganze
Sache im einzelnen nicht verstanden, vor allem die Objekt-Variablen
Deklaration in Zusammenhang SET usw., Datentypenfehler und zuletzt auch wenn
in der Zelle ein Format ist das dort funktioniert und beim Makro dann
probleme gibt.
Gibt es da ein Analyseprogramm?
Nun habe ich gemeint, dass As Lomg eben nicht Variant ist sondern ein
Datentyp für sich!
Vielleicht kannst Du mir ja ein Typ geben wo ich für Laien nützliche
Informationen erhalte? rsp nachlesen kann?
Vielen Dank im Voraus für Deine Bemühungen
Willy

"Michael Schwimmer" schrieb:

Michael Schwimmer

unread,
Mar 10, 2009, 6:25:40 AM3/10/09
to
Hallo Willy,

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.

0 new messages