Herbers Excel-Forum - das Archiv
Option Explicit
Betrifft: Option Explicit
von: junny
Geschrieben am: 27.11.2003 12:11:06
Hallo Leute,
kann mir jemand ein wenig auf die Sprünge helfen??
Wann muss Option Explicit/
Private Sub rein?? Wie siehst da mit F8 aus?
Ich hab hier ein Makro welches in eienm Sheet steht, ist das in Ordnung? sprich läuft es automatisch ab??
DANKE!! Grüsse volker
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' alle Buchstaben Groß in einem bestimmten Bereich
Dim RaBereich As Range, RaZelle As Range
Application.EnableEvents = False
' Bereich der Wirksamkeit
Set RaBereich = Range("I5:I319")
Application.EnableEvents = False
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, RaBereich) Is Nothing Then
RaZelle.Value = UCase(RaZelle.Value)
End If
Next RaZelle
Application.EnableEvents = True
Set RaBereich = Nothing
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim vorigeZelle As Range
Set vorigeZelle = ActiveCell
' automatisches ausfüllen Materialcode Kantengrafik, Gesamtstückzahl
'Serie
Range("U6").Select
ActiveCell.FormulaR1C1 = "=IF((RC[-16])>0,R5C21,"""")"
Selection.AutoFill Destination:=Range("U6:U319"), Type:=xlFillCopy
'Materialcode
Range("W5").Select
ActiveCell.Formula = "=CONCATENATE(I5,H5)"
Selection.AutoFill Destination:=Range("W5:W319"), Type:=xlFillDefault
'Erfassungsnummer
Range("X6").Select
ActiveCell.FormulaR1C1 = "=IF((RC[-19])>0,R5C24,"""")"
Selection.AutoFill Destination:=Range("X6:X319"), Type:=xlFillCopy
'Kantengrafik
Range("AV5").Select
ActiveCell.Formula = "=O5"
Selection.AutoFill Destination:=Range("AV5:AV319"), Type:=xlFillDefault
'Gesamtstückzahl
Range("AW5").Select
ActiveCell.Formula = "=E5"
Selection.AutoFill Destination:=Range("AW5:AW319"), Type:=xlFillDefault
vorigeZelle.Select
End Sub
Betrifft: AW: Option Explicit
von: Russi
Geschrieben am: 27.11.2003 12:15:16
Hallo Volker!
Der Befehl Option Explicit besagt, dass in Modulen eine Variablendeklaration ("DIM ...") unbedingt erforderlich ist. Werden Variablen benutzt, die nicht deklariert sind, führt dies zu einer Fehlermeldung.
Deine Makros laufen automatisch ab. Der Code in Worksheet_Change wird immer ausgeführt, wenn sich das betreffende Arbeitsblatt ändert. Workbook_BeforeSave immer dann, bevor die Datei gespeichert wird.
Viele Grüße
Russi
Betrifft: AW: Option Explicit
von: junny
Geschrieben am: 27.11.2003 13:14:46
Hai Russi,
Danke, jedoch laufen meine makro Momentan nicht, und ich weiß auch nicht warum (Einzelschritt ist nicht scharf)
weißt Du noch was??
Gruss volker
Betrifft: AW: Option Explicit
von: Russi
Geschrieben am: 27.11.2003 13:26:27
Moin Volker!
Wie Du angegeben hast machst Du VBA nur mit Recorder, deshalb wage ich die Frage: Hast Du die Module an den richtigen Stellen platziert?
Die Worksheet_Change-Geschichte gehört in den Code Deines Tabellenblattes, der Code von Workbook_BeforeSave in "DieseArbeitsmappe"
Hast Du das so eingetragen?
Russi
Betrifft: AW: Russi/xXx Option Explicit
von: junny
Geschrieben am: 27.11.2003 13:54:22
Hai Russi,
ja die makros sitzen an den richtigen Stellen, es will trotz allem nicht!
wenn ich aus Privat Sub Workbook BeforeSave....
Sub() mache, kann ich mich auch mit F8 durchtesten das makro an sich passt!!
Option Explicit habe ich entfernt (Tipp von Kollege xXx)
Grüsse volker
Betrifft: AW: Russi/xXx Option Explicit
von: Russi
Geschrieben am: 27.11.2003 14:06:06
Sorry, aber hier muss ich wohl passen. Ich habe selbst bereits einige Mappen entwickelt, bei denen ich derartige Makros eingebaut habe. Und alle funktionieren...
Zwei Dinge sehen bei mir jedoch immer anders aus:
1. Statt private habe ich public benutzt.
2. ich habe bis heute noch nicht rausgefunden, wozu die Zeile "(ByVal Target As Range)" gut ist. Also hab ich sie generell gelöscht.
Ein sehr dünner Strohhalm, aber vielleicht versuchst Du das auch mal?
Russi
Betrifft: DANKE Russi
von: volker
Geschrieben am: 27.11.2003 14:17:26
Hai Russi,
Momentan teste ich das an einer ausgefüllten Liste, da hakst manchmal noch bei meiner Vorlage hatte ich den Before Save nicht in der Arbeitsmappe stehen, vielleicht gehts dann zukünftig.
Danke Gruss volker
Betrifft: AW: Option Explicit
von: xXx
Geschrieben am: 27.11.2003 13:27:07
Hallo,
welcher Fehler?
Lösche Option Explicit
Gruß aus'm Pott
Udo
http://www.excelerator.de
P.S. Das Forum lebt auch von den Rückmeldungen der Frager an die Antworter!
Betrifft: AW: Option Explicit
von: junny
Geschrieben am: 27.11.2003 14:19:40
Hai Udo,
hab ich mal gemacht.
Kann ich ein Private Sub auch im Einzelschritt ablaufen lassen? wie?
Danke für die Hilfe volker
Betrifft: AW: Option Explicit
von: FCH
Geschrieben am: 27.11.2003 14:33:24
Hi,
also Option Explicit ist schon sinnvoll, um Fehler bei der Deklaration zu vermeiden.
Das Private sollte auch erhalten bleiben, da diese Subs ja nun mal nicht Puplic sein sollen.
Und nun zu deinem Problem:
Deine Intersect-Syntax war falsch, d.h. du musst irgendwann mal zum Debuggen aufgefordert worden sein und hast dann den Code abgebrochen. Dadurch bleib dein
Application.EnableEvents = False
Erhalten und es tat sich logischer Weise nix mehr.
So müsste es gehen (insTabellenblatt-Modul):
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' alle Buchstaben Groß in einem bestimmten Bereich
Dim RaBereich As Range, RaZelle As Range
Application.EnableEvents = False
' Bereich der Wirksamkeit
For Each RaZelle In Range(Target.Address)
If Not Intersect(RaZelle, Range("I5:I319")) Is Nothing Then
RaZelle.Value = UCase(RaZelle.Value)
End If
Next RaZelle
Application.EnableEvents = True
Set RaBereich = Nothing
End Sub
Gruß
FCH
Betrifft: DANKE FCH (hier lernt man richtig was)
von: junny
Geschrieben am: 27.11.2003 14:40:37
o.T.