Namens-Frage
#41
Hallo  KurtKurt57

da sagst du bist ein Bastler, dann probiere meinen geändertenCode doch einfach mal aus. Was soll dabei gross passieren??

In der Literatur von Microsoft findest du die Beschreibung von Fehlerbehandlungen, falls Excel einmal abstürzt. Das ist extra vorgesehen um Laufzeitfehler zu ver,eiden! Sie durch eine Fehlerbehandlung abzufangen. Ganz wichtig ist bei Application.EnableEvents das du versteht, die Events bleiben solange abgeschaltet, bis das Makro sie am Ende wieder einschaltet!! Ich hoffe das hast du verstanden, oder?? Abgeschaltet ffür unbegrenzte Zeit!!

Stürzt Excel dann mit einer Fehlermeldung ab, wer schaltet die EnasbleEvents dann bitte wieder ein???  Verstehst du jetzt warum Excel wieder funktionierte wenn du die Datei geschlossen hast, und sie wieder Öffnest?  Excel ist ein Programm, und das kann nicht selbst denken, verhält sich absolut korrekt gemäss seiner Befehle!!

Es ist die Aufgabe des Programmierers solche Fehler abzufangen. Damit weiss ich immer noch nicht WAS ihn verursacht???
Aber die Events werden bei meinem Code vor der MsgBox Fehlermeldung wieder eingeschaltet, damit das Makro wiieder funktioniert. Das ist alles!

mfg Gast 123

Hallo

die With Klammer hat bei VBA den Sinn die Schreibweise der Syntax zu verkürzen. Steht dort With Application dann achte auf alle Nachfolgenden Zeilen die mit einem Punkt beginnen. Diese Befehle beziehen sich alle auf das With, dann  braucht man den Text nicht mehr zu schreiben! Das siehst du am Anfang beim Befehl .EnableEvents = False und vor Ende With wird wieder eingeschaltet mit .EnableEvents = True  Ich denke das verstehst du jetzt.

Im Fehlerfall musste ich dashalb bei dem Label Fehler:, mit Doppelpunkt als Sprungmarke für den Fehlerfall die volle Syntax schreiben. Mit Application.EnableEvents = True  zum Wiedereinschalten der Events. Das sind auslösende Ereignisse, wie eine Zelle anklicken oder was eingeben usw.

Was den eigentlichen Fehler bei Target auslöst ist mir noch unklar, aber das Makro läuft bei meinem Code weiter. Es meldet nur das es im Fehlerfall nicht vollständig ausgeführt wurde, weil es durch die Fehlerroutine abgebrochen wurde. Den Fehlker selbst muss man dann noch suchen bis man ihn findet.

Bekannte Errorbehandlungen von Microsoft sind:
On Error Goto 0             setzt die Fehlermeldung auf Null
On Error GoTo Fehler     Spriung zur Fehlerbehandlung, statt Fehler kann da auch ERRORHANDLING stehen
On Error Resume Next   überspringt den Fehlker und macht im Code weiter
Err.Clear oder Err = 0     löscht die interne Fehler Nummer, als Laufzeitfehler bekannt

Beobachte bitte mal was du genau machst wenn eine Fehlermeldung kommt. Vielleicht verstehen wir dann was ihn auslöst. Beobachten ist sehr wichtig.

mfg  Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • kurtkurt57
Antworten Top
#42
Danke, grossen Dank, Gast123 Hab es gemacht, es funktioniert jetzt Super .. verstanden hab ich auch viel.... Hoffentlich meldet sich Boris noch mit der neuen Version. 

Also, Fehlerabfangen bringt was, selbst wenn man nicht weiss, was der Fehler ist. Aber, das ist eigentlich das typische an Fehlern, dass man nicht weis, was sie sind, denn wenn man's wüsste, würd man sie nicht machen....

ich hab jetzt eingefügt:
Code:
  Target.Offset(2, 0).Resize(2, 100).ClearContents.ClearColors
        End If
        Target.Offset(2, 0) = WorksheetFunction.Sum(Selection)
        Target.Offset(2, 0).Interior.ColorIndex = 6••••ˇˇˇˇ

also das: "Target.Offset(2, 0).Interior.ColorIndex = 6" hat er akzeptiert, und er funktioniert. Aber diesen Appendix: ".ClearColors"  hinter "clearContent", den mag er nicht. Erreagiert mit Fehlermeldung. Woran liegt das? (Was soll man da eigentlich machen? Auf "Debuggen" drücken?) Danach wieder Sperre. -> Exel beenden, -> Datei neu starten ... geht alles wieder.... Vllt. hat das ja auch damit was zu tun, dass ich am Mac arbeite und Excel ist nur auf den Mac angepasst....?
Antworten Top
#43
Hallo

freut mich das wir jetzt soweit gekommen sind, vielleicht habe ich sogar die Lösung für den Fehler gefunden.

Das man in einer Syntac Zeile  ClearContents + ClearColor  zusammenschreiben kann ist bei Excel NICHT möglich!
Mache bitte daraus zwei Zeilen wie ich unten in dem Test Makro beschrieben habe. Damit funktioniert der Code für ClearColor!

Code:
Sub test()
ActiveCell.ClearContents
ActiveCell.Interior.Color = xlNone
End Sub

Wenn du damit dein Problem gelöst hast klinke ich mich aus dem Thread aus, und wünsche dir mit Boris noch eine gute Zusammenarbeit.
Würde mich echt freuen wenn wir damit das Target Problem gelöst haben. 

mfg Gast 123
Antworten Top
#44
Hi,

der Hinweis von Gast 123 zu den Events ist vollkommen korrekt. hatte ich doch nicht damit gerechnet, dass es direkt beim Öffnen zum Fehler kommen kann. Hätte ich aber selbst direkt einbauen sollen - insofern Danke an Gast 123 für diesen völlig berechtigten Hinweis.
Mir ist aber nicht wirklich klar, was Du überhaupt mit der Mappe bezwecken möchtest. Zudem ist es normal, dass die Anforderungen steigen, sobald ein Problem aus der Welt geschafft wurde. Damit wird dieser Thread aber irgendwann unendlich lang. Zudem benötigen scheinbar triviale Anforderungen oft ne Menge Codezeilen - das unterschätzt man gerne mal Wink
Ich hab den Code jetzt nochmal ein wenig umgeschrieben. Schau ihn Dir mal an, bastel damit weiter und eröffne dann besser einen neuen Thread für weiter Fragen.
Und mach Dich unbedingt mit ein paar VBA-Basics vertraut - das hilft Dir auch ungemein für das Gesamtverständnis. Und wenn Du bei einzelnen VBA-Schlüsselwörtern nicht weiterkommst, drück F1 für die Onlinehilfe (ich hoffe, dass das beim Mac auch so ist).

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static lngCol As Long
On Error GoTo ERR_HANDLER
Dim lngRowSize As Long, lngColSize As Long
'### Hier kannst Du die nötigen Zell-Parameter direkt im Code erfassen / anpassen / ändern
Const STR_TARGET As String = "A4:AZ5" 'in diesem Zellbereich wirkt das SelectionChange-Ereignis
Const STR_ROWSIZE As String = "A10" 'in dieser Zelle steht die Rowsize
Const STR_COLSIZE As String = "A11" 'in dieser Zelle steht die Columnsize
lngRowSize = Range(STR_ROWSIZE).Value
lngColSize = Range(STR_COLSIZE).Value
With Application
    If Not Intersect(Target, Range(STR_TARGET)) Is Nothing Then
        .EnableEvents = False
        Target.Resize(lngRowSize, lngColSize).Select
        If Target.Column < lngCol Then
            Target.Offset(2, 0).Resize(2, 100).ClearContents '100 steht nur für "genügend Spalten"
        End If
        Target.Offset(2, 0) = WorksheetFunction.Sum(Selection)
    End If
    lngCol = Target.Column
ERR_HANDLER:
    .EnableEvents = True
End With
End Sub
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste