Was bedeutet der Code zu Deutsch und im einzelnen

Grüezi Frank

24 Seiten in 2 Stunden empfinde ich nicht als schnell. Und die
ersten paar Seiten sind ja in jedem Buch identisch.

Is ja schon in Ordnung, lass dich nicht kirre machen :smile:

Ich habe alles genauso gemacht wie in Abb.19,also es in das
Direktfenster eingegeben und bis auf besagte letzte Zeile hat
auch alles funktioniert. Wo liegt denn nun der Fehler? Bei mir
oder fehlt was in der Zeile?

Ich würde mal einen einfachen Schreibfehler in der Zeile vermuten, dann nämlich erhalte ich auch diese Meldung.

Um eine eigene Struktur zu erstellen,müsste ich erstmal alle
Codes haben und dann müsste ich nochmal im Buch nachlesen,
welcher Code in die Tabbi und welcher in die Codes gehören. Es
wird ja sicherlich einen Grund geben,warum es mehrere
Möglichkeiten gibt.

Grundsätzlich gehören in die einzelnen Tabellenblätter nur die Ereignis-Codes für das betreffende Tabellenblatt (da gibt es nur einige die klar vorgegeben sind), in ‚Diese Arbeitsmappe‘ die Ereignis-Codes für die Mappe als Ganzes und alle anderen Codes sollten in einem allgemeinen Modul gespeichert werden.

Doch es gibt keine Regeln ohne Ausnahme - und ‚Faulheit‘ kann auch ein Grund sein, ‚allgemeinen Code‘ in einem Tabellenblatt zu speichern.
Er ist dann halt nur dort verwendbar und nicht in der ganzen Mappe.

Dei Datei liefert erstmal die Grundlagen in allgemeiner Form - spezifischer wird es dann in Fach- und Sachbüchern, die sich speziell mit der VBA-Programmierung von Excel auseinander setzten.

Keine Bange, wie bei jedem Lernprozess kommt auch hier irgendwann der Druchbruch.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Mal sehen ob ich das richtig verstanden habe.

Eine _ Variable _,für die kein expliziter Datentyp per Deklaration angegeben wurde besitzt demnach den Datentyp „Variant“,der sehr viel Speicher belegt(Ich gehe davon aus,dass hier die Gesamtgröße der Datei gemeint ist.

Nehmen wir jetzt mal ein Beispiel aus meiner Tabbi:

Dim Spa As Long, N As Integer. Hier wurde nun die Spalte mit dem Datentyp „Long“ belegt,der einen Speicherbedarf von 4 Bytes und einem Wert von
-2.147.483.648 bis 2.147.483.647 beinhaltet.

Wenn aber in meinen Spalten bzw. Zellen nur Werte von max. 10000 vorkommen,ist doch der Datentyp „Long“ nicht sehr nützlich und ich könnte stattdessen besser den Datentyp „Integer“ nehmen.

Mir ist natürlich klar,dass es bei der Größe meiner Datei keinen entscheidenden Unterschied macht,aber mir geht es ja auch nur ums Prinzip.Schliesslich steht im Buch,man solle direkt von Beginn an auf sowas achten.

LG Frank

P.S. Ich hoffe,ich nerve niemanden hier mit meiner Fragerei

Deshalb werde ich Reinhard mal per Mail anschreiben und ihn
fragen.

Hallo Frank,

ja, mach ma…
bin seit 21.2 hier im KH. Morgen entscheiden die Ärzte ob ich wieder an
meinen heimischen Compi kann oder weiter hier offline bleiben muß.

Gruß
Reinhard

Hallo Reinhard,

ich habe dir schon eine Mail geschrieben. Aber so wichtig ist das nun auch nicht. Seh du erstmal zu dass du wieder gesund und munter wirst,und wenn du dann Zuhause bist und du dann Zeit und Lust hast,können wir mal über mein Problem reden.

Ich wünsche dir jedenfalls alles alles Gute und schnelle Genesung.

LG Frank

Hallo Thomas,

Grundsätzlich gehören in die einzelnen Tabellenblätter nur die
Ereignis-Codes für das betreffende Tabellenblatt (da gibt es
nur einige die klar vorgegeben sind), in ‚Diese Arbeitsmappe‘
die Ereignis-Codes für die Mappe als Ganzes und alle anderen
Codes sollten in einem allgemeinen Modul gespeichert werden.

Ich habe mir nunmal was gebastelt

Private Sub Workbook_Open()
ActiveCell.Range(„A1:E154“).Select
Selection.ClearContents
End Sub

Das wäre meiner Ansicht nach ein Code,der in „Diese Arbeitsmappe“ gehört,weil es ja ein Ereignis-Code ist. Beim Öffnen der Arbeitsmappe markiere Zellen A1:E154 und lösche den Inhalt.

Habe ich das soweit richtig verstanden?

Keine Bange, wie bei jedem Lernprozess kommt auch hier
irgendwann der Druchbruch.

Na dein Wort in Gottes bzw. mein Ohr :smiley:

LG Frank

Darf ich noch mal?
Hallo Frank,

es ist richtig: Alle Variablen die nicht explizit deklariert werden, haben den Typ Variant. Wenn du mal in der Hilfe von Excel VBA nach dem Begriff „Datentypen“ suchst, bekommst du eine Liste aller Typen mit Platzbedarf. Z.B. für Integer 2 byte, für long 4 byte und für Variant je nach Inhalt: Wenn Zahlen dreinstehen 16 byte, wenn Text drin steht 22 byte + die Länge des Textes. Mal angenommen, du brauchst in deinem Code 100 Variable, die Ganzzahlen enthalten, dann brauchst du mit Integer 100x2=200 byte, mit Long 100x4=400 byte und mit Variant 100x16=1600byte. Also, ob es nun 200 oder 1600 byte sind, wer schaut heute schon noch auf solche Unterschiede, bei dem Speicherplatz, den man heute hat.
Aber klar, wenn man riesige Variablenmengen hat, sollte man trotzdem darauf achten, es zu minimieren.
Aber:! Bei z. B. Zeillenzahlen in Excel ist das etwas anders: Excel(2010) kann bis zu 1048576 Zeile haben. Bei einem Objekt wie Cells(z, s) muss also der Speicherplatz für die Zeile so ausgelegt sein, dass die maximale Zeilenzahl angegeben werden kann, auch wenn du sie nicht ausnutzt.
Excel ist zwar in der Beziehung tolerant; auch wenn du Zeile und Spalte nur als Integer definierst, kommt das richtige raus. Aber in vielen Programmiersprachen gibt es Probleme, wenn man z.B. einer Funktion einen Integer-Wert übergibt, obwohl sie einen Long-Wert erwartet.
Man sollte also immer so deklarieren, wie es größt möglch sein kann.
In der Hilfe von Excel VBA ist auch meistens mit angegeben, welcher Datentyp erwartet wird und welcher von Funktionen zurückgegeben wird.

Gruß, Andreas

Hallo Reinhard,

bin seit 21.2 hier im KH. Morgen entscheiden die Ärzte ob ich
wieder an
meinen heimischen Compi kann oder weiter hier offline bleiben
muß.

Ich drück Dir die Daumen! Werd’ mal schnell wieder gesund.

Ich wünsch Dir alles, was Du Dir selbst wünschst.

Gruß Rainer

Hallo Andreas,

die habe ich mir schon angesehen. Mir ging es jetzt nur darum,ob es sich um die Zahlenwerte in einer Zelle handelt(z.B. Zelle F13 als Byte deklariert obwohl Werte >255 drin stehen.Das würde ja dann nicht hinhauen.

LG Frank

Darf ich auch hier noch mal?

Hallo Thomas,

Ich habe mir nunmal was gebastelt

Private Sub Workbook_Open()
ActiveCell.Range(„A1:E154“).Select
Selection.ClearContents
End Sub

Das wäre meiner Ansicht nach ein Code,der in „Diese
Arbeitsmappe“ gehört,weil es ja ein Ereignis-Code ist. Beim
Öffnen der Arbeitsmappe markiere Zellen A1:E154 und lösche den
Inhalt.

Habe ich das soweit richtig verstanden?

Du bist schon auf dem richtigen Weg. Aber einige Anmerkungen:
Angenommen, du hast eine Mappe mit 3 Tabellenblättern. Wenn du die Mappe speicherst, dann schließt und wieder öffnest, ist wieder das Blatt aktiv, das beim Speichern aktiv war.
Wenn du jetzt den Code

ActiveCell.Range("A1:E154").Select
Selection.ClearContents

laufen lässt, bezieht sich der immer auf das aktive Blatt, also das, was beim Speichern aktiv war, bzw. jetzt beim Öffnen wieder aktiv ist.
Auf welchem Blatt der Code etwas löscht weißt du also nur, wenn du dir gemerkt hast, welches Blatt beim Speichern aktiv war. Das ist ein ziehmlich riskantes Spiel. Wenn du möchtest, dass beim Öffnen immer nur in einem bsetimmten Blatt etwas gelöscht wird, musst du das Blatt mit angeben, also z.B.

Sheets("Tabbi").ActiveCell.Range("A1:E154").Select
Selection.ClearContents

Nächste Anmerkung: Wenn du ActiveCell.Range(„A1:E154“).Select schreibst, ist der Bereich „A1:E154“ relativ zu ActiveCell. Wenn also z.B. die aktive Zelle gerade B2 ist, dann wird mit dem Select nicht A1:E154 augewählt sondern B2:F155, nämlich die erste Zelle (A1) relativ zur aktiven Zelle (B2). Ich weiß, das war etwas hoprig erklärt. Probier’s einfach mal aus: Setze deine aktive Zelle irgendwo hin, lass deinen Code laufen und schau, was selektiert wird. Dann verstehst du es sicher.
Also, um wirklich A1:E154 auszuwählen, lass das ActiveCell weg:

Sheets("Tabbi").Range("A1:E154").Select
Selection.ClearContents

Dritte Anmerkung:
In VBA Code ist das Select zu 99% entbehrlich. Es kommt bei Neulingen meistens daher, dass sie vom Makrorekorder aufzeichnen lassen, was sie gerade tun. Um von Hand Zellen zhu leeren, müssen sie natürlich erst mal selektiert werden.
Der Rekorder zeichnet genau das auf, was du tust. Deswegen steht dann auch das Select im Code, obwohl es hier wie fast überall unnötig ist. Du kannst deine beiden Codezeilen in eine zusammenfassen:

Sheets("Tabbi").Range("A1:E154").ClearContents

Das macht den Code auch etwas schneller. Wenn du mal viele Dinge automatisch in einem Makro laufen lässt, sieht das auch besser aus, wenn da nicht so ein „Geflimmer“ von Auswählen und Bätter hin- und herschalten zu sehen ist.

Ich merke aber, dass du, wenn vielleicht auch noch keinen Spaß, so doch Interesse an der Sache hast. Mach weiter so, und hör nicht auf zu fragen.

Gruß, Andreas

Hallo Frank,

eine Zelle kannst du nicht deklarieren. Du kannst nur Variable deklarieren. Und da hast du Recht: Wenn in der aktiven Zelle eine Wert von z.B. 425245373537554 steht und du hast den Code

Dim a as Integer
a = ActiveCell.Value

dann gibt’s einen Überlauffehler, weil der Integer-Datentyp keine so großen Zahlen aufnehmen kann.

Gruß, Andreas

Hallo Frank,

Wenn ich aber schon bei so einer kleinen Erklärung bzw.
Beispiel,wie in Abb. 19 in der von dir erwähnten Broschüre auf
nen Fehler stosse >Debug.Print
A v tiveCell.Value>Enter>Laufzeitfehler 424 „Objekt
erforderlich“,dann frag ich mich,ob ich das je lerne.

Tippfehler: A c tiveCell.Value

Gruß, Andreas

Hallo Reinhard,

hab mich schon gewundert, dass du dich so absentierst.

Gute Besserung !!

Gruß, Andreas

Hallo Andreas,

das sollte jetzt auch nur mal als Beispiel dienen,ob ich das mit dem Ereignis-Code auch richtig verstanden habe, trotzdem gut zu wissen,das man es noch anders schreiben kann.

Mir ist es auch aufgefallen,dass es mit dem ActiveCell.Range(„A1:E154“).Select zu Problemen kommt,wenn nicht dieselbe Zelle aktiv ist,sondern die Selektierung verschiebt.

Und wieder was gelernt. Dankeschön

LG Frank

Nee Andreas,der Tippfehler ist nur hier im Posting.

Hab jetzt alles aus dem Direkt-Fenster rausgelöscht und alles nochmal eingegeben.Jetzt funktioniert es.Scheint sich wohl verschluckt zu haben oder was auch immer.

Gruss Frank

Grüezi Frank

Private Sub Workbook_Open()
ActiveCell.Range(„A1:E154“).Select

Hier nur das eine oder das andere:

Also entweder ActiveCell (wenn es nur um die momentan aktive Zelle geht) oder aber eben Range(„A1:E154“) wenn Du einen bestimmten Bereiche direkt ansprechen willst.

ActiveCell kommt in erster Linie vom Makro-Recorder, denn der Selektiert und Aktiviert, was das Zeug hält, was aber zu >99% nicht notwendig ist.

Selection.ClearContents
End Sub

Das wäre meiner Ansicht nach ein Code,der in „Diese
Arbeitsmappe“ gehört,weil es ja ein Ereignis-Code ist. Beim
Öffnen der Arbeitsmappe markiere Zellen A1:E154 und lösche den
Inhalt.

Habe ich das soweit richtig verstanden?

Ja, das ist grundsätzlich korrekt so

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezi Reinhard

Auch von meiner Seite nur allerbeste Besserung - habe dich auch schon vermisst hier.

Mit herzlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Auch von mir alles Gute und gute Besserung!

Guten Morgen allerseits,

nachdem mir Andreas mit seinem Tip über die Taste F8 wieder was neues beigebracht hat,musste ich dies auch direkt ausprobieren. Da ich 2*22" Monitore habe kann ich also schön sehen,was mit jeder einzelnen Zeile passiert.

meine Fragen beziehen sich nun auf folgende Codes aus meiner Datei:

Sub Erstellen()
Dim Spa As Long, N As Integer
Application.ScreenUpdating = False
With Worksheets(„Tabbi“)
With .Range(„A1:smiley:O9“)
.ClearContents
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
.Font.Bold = True
End With
For Spa = 6 To 104 Step 7
.Cells(3, Spa + 1).Value = „Tisch“
.Cells(3, Spa + 1).Font.Bold = True
.Cells(7, Spa + 1).Value = „QS“
.Cells(7, Spa + 1).Font.Bold = True
.Cells(7, Spa + 5).Value = „Durch“
.Cells(7, Spa + 5).Font.Bold = True
.Cells(8, Spa + 1).Value = 0
.Cells(8, Spa + 5).Value = 0
With .Cells(2, Spa + 1)
.MergeCells = False
For N = 7 To 10
With .Borders(N)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 10
End With
Next N
End With
With .Cells(2, Spa + 5)
For N = 7 To 10
With .Borders(N)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 45
End With
Next N
End With
With .Cells(8, Spa + 1)
For N = 7 To 10
With .Borders(N)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
Next N
End With
With .Cells(8, Spa + 5)
For N = 7 To 10
With .Borders(N)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 5
End With
Next N
End With
.Cells(2, Spa + 1).Font.Bold = True
.Cells(2, Spa + 5).Value = 0
.Cells(2, Spa + 5).Font.Bold = True
.Cells(3, Spa + 5).Value = „Bonus“
.Cells(3, Spa + 5).Font.Bold = True
Next Spa
End With
Application.ScreenUpdating = True

Nachdem ich nun jede Zeile nach und nach mit F8 abgearbeitet habe ist mir aufgefallen,dass zuerst der Bereich gelöscht wird(With .Range(„A1:smiley:O9“)
.ClearContents)und dann nach und nach wieder gefüllt wird.Da die Bezeichnungen „Tisch“,„QS“,„Durch“ und „Bonus“ in diesem Bereich von mir aus kontinuirlich dort stehen können,halte ich diesen Code für unnötig.

Sollte dieser Code aber nötig sein,was zur Zeit wahrscheinlich nur Reinhard weiss,warum kann dieser Teil
.Cells(2, Spa + 1).Font.Bold = True
.Cells(2, Spa + 5).Value = 0
.Cells(2, Spa + 5).Font.Bold = True
.Cells(3, Spa + 5).Value = „Bonus“
.Cells(3, Spa + 5).Font.Bold = True

der Übersichtlichkeit nicht hier drunter stehen
.Cells(3, Spa + 1).Value = „Tisch“
.Cells(3, Spa + 1).Font.Bold = True
.Cells(7, Spa + 1).Value = „QS“
.Cells(7, Spa + 1).Font.Bold = True
.Cells(7, Spa + 5).Value = „Durch“
.Cells(7, Spa + 5).Font.Bold = True
.Cells(8, Spa + 1).Value = 0
.Cells(8, Spa + 5).Value = 0

Die Funktionalität ist dieselbe,nur für mich als blutigen Anfänger ist das strukturiert,übersichtlicher und verständlicher

Wie ich allerdings diesen Teil verstehen soll,keine Ahnung,da mir die Hilfe nichts verständliches dazu bringt. Target bedeutet ja eigentlich Ziel,aber Count und Row…hm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim OK As Boolean, N As Integer, Wert, Auswahl As String
On Error GoTo hell
If Target.Count > 1 Then Exit Sub
If Target.Row > 166 Or Target.Row

Hallo Frank,

erst mal zum letzten Teil (den Rest schaue ich mir heute Abend an):

Wie ich allerdings diesen Teil verstehen soll,keine Ahnung,da
mir die Hilfe nichts verständliches dazu bringt. Target
bedeutet ja eigentlich Ziel,aber Count und Row…hm

Private Sub Worksheet_Change(ByVal Target As Range)
Dim OK As Boolean, N As Integer, Wert, Auswahl As String
On Error GoTo hell
If Target.Count > 1 Then Exit Sub
If Target.Row > 166 Or Target.Row 1 Then Exit Sub

Wurden gleichzeitig mehrere Zellen geändert, wird die Routine verlassen.

If Target.Row > 166 Or Target.Row

Warnung: Antwort ist lang :smile:
Hallo Frank und einige andere,

zuerst das Wichtigste.
Ich habe mich sehr über die netten Worte zu meinem KH-Aufenthalt
gefreut, das ging (den Rücken) runter wie Öl.
(geht den Rücken runter wie Öl ist eine mir aus/seit der Jugendzeit
bekannte Aussage die bedeutet, es war sehr sehr schön) :smile:

Sowas ist wichtig in dieser kalten Welt, vergleichbar mit der Sonne
die man wieder strahlend sieht, nach grauen Tagen…
Danke dafür.

@Frank, ist schon ein riesenlanger Thread, brauch da einige Zeit den genauer durchzulesen und gezielt zu antworten.
Mal so aus dem Gedächtnis mal paar Antworten.

Ich benutze Long grundsätzlich IMMER für Zeilen- und Spaltenvariablen.
Das erspart mir die Denkzeit soll ich jetzt Integer nehmen, gar Byte.
Völlig unnütz und die Regel, in dem Fall immer Long zu nehmen ist leicht zu merken und umzusetzen.

Technischer Hintergrund dessen ist, bei Zeilen- und Spalten wird
SOWIESO mit Long gerechnet bzw. bei anderen Definitionen/Deklarationen
z.B. Byte, Integer diese von Vba in Long umgewandelt.

Dies gilt für Benutzung von Cells, Cells erwartet Longwerte, wenn
die Variablen dies nicht sind werden sie umgewnadelt.
(Range weiß ich gar nicht, *schäm*)

Herausfinden kannst du sowas, also welche Datentypen eine Funktion
erwartet, z.B. im Objektkatalog (F2).
Es ist es für jeden VBA-Lernenden empfehlenswert sich mal genauer mit
dem Objektkatalog zu beschäftigen.

Nepumuk, der spielt in der gleichen Liga wie Thomas, schrieb dazu mal:
http://www.herber.de/forum/archiv/952to956/t954760.htm

Zu dem was du angeschnitten hast mit Modulen und Modulaufteilung usw.
gibt es auch was von ihm:

http://www.herber.de/forum/archiv/960to964/963009_Da…

Viele VBAler bedauern/bedauerten es daß Nepumuk diese Wort zum Sonntag Reihe nur kurz angefangen hat *sniff*

Ich weiß nicht wie Thomas R. mit VBA begann. Ich begann mit
einem Buch von Bernd Held. Fehlkauf aus vielerlei Gründen.
Brauchst nicht nach dem Titel zu fragen, gilt für alle.
Ist schon 10 Jahre Staubschicht darauf.

Andere Autoren von VBA Büchern für Beginner kenne ich nicht
und kann dazu nichts sagen.
Ich begann mit dem was Thomas auch dir riet, Foren.

Mitlesen. Wo du weder Frage noch Antwort verstehst, ist egal,
Hauptsache du hast es überflogen. Pick dir die Anfragen raus
wo du die Fragestellung genau verstehst, probiere für dich das zu
lösen. Dein evtl. Versagen ist a) normal, b) siehts ja keiner.

Dann wird diese Fragestellung gelöst. Sezesiere den Antwortcode.
Solange bis du ihn verstehst. Hakts irgendwo, kein Akt, frage im
Beitrag den Antworter. Er oder ein anderer erklärt dir das sicher
gerne.

Und Zug um Zug derart wächst dein Wissen. Und irgendwann kommt
DEIN Tag, eine Anfrage kommt und DU entwickelst eine Lösung.
Und, wenn dann der Anfrager schreibt: Danke, klappt fühlst du Stolz.

Wichtig ist einzig daß deine Lösung funktioniert.
Wenn dann jmd. mit mehr Wissen (hat er ja nur durch mehr Erfahrung/Übung) bekommen, eine einfachere schneller oder sonstwie
bessere Lösung präsentiert, na und, ist doch klar daß jemand
mit 4 Jahren Vba mehr weiß als Du mit deinem halben oder ganzen Jahr der Beschäftigung mit VBA, sezesiere dessen Antwortcode.

So habe ich mir VBA beigebracht. Angenommen du und ein Kumpel
beginnen gleichzeitig mit Vba. Er macht laufend VBA-Kurse, du nur
„Foren“. Sicher, daß erste Halbjahr/Jahr ist er dir klar überlegen.
Was der alles schon kann, da staunst du nur.

Aber es kommt der Zeitpunkt wo du die ersten Erfolgserlebnisse
in Foren hast und dann bald darauf schaust du dir nochmals
die Codes an die er baute als du die nicht kapierst hast.
Siehe da, du verstehst sie, kannst sie gar verbessern.

Ab diesem Zeitpunkt haste deinen Kumpel „im Sack“. Er kann letzlich
nur die Beispliele die im Kurs dran kamen. Du warst aber gezwungen
auf Fragen aus der Praxis einzugehen die so weder in Büchern stehen
usw.

Wenn er nur brav in seinen Kursen mitmacht und von mir aus auch deren
hausaufgaben macht hat er mittel- und gar langfristig keine Chance
derart dein Wissen zu erwerben.

Der Code den ich dir schrieb ist ja gewachsener Code. Erst war nur
dieses zu tun, dann kam jenes dazu , dann dies, dann das.
Auch deshalb sieht er so aus wie er aussieht.

Jetzt wo hoffentlich alles was zu tun ist bekannt ist würde ich ihn
eventuell annerster von der Grundstruktur aufbauen.
Quien sabe, ich nich *gg* Habe ihn mir jetzt noch nicht wieder
angeschaut.

Irgendwo stand was von fehlenden Kommentaren. Klar fehlen die,
hier ist ein Forum und sehr oft hätte ich für auskommentieren nochmal
den gleichen oder oft auch mehr Aufwand als/wie für den reinen Code.
Es fehlt auch jedwede Fehlerroutine und einiges mehr.
Im Rahmen eines Forums ist mir das zuviel.

Schick 'nen Scheck und alles ist vorhanden :smile:)
Bei Kommentaren, das ist quasi nur die Arbeitszeit um zu erläutern
was da Mappenbezogen in dieser Codesequenz getan wird.
Da hat jeder der das für seinen Code machen will nur das eher
Problem, wie formuliere ich das sodaß es andere Verstehen und auch ich
selbst wenn ich den Code nach paar Monaten wiedersehe.

Fehlerroutinen sind VBA-mäßig gewaltig schwieriger.
Sicher, so eine Fehlerroutine zu basteln die bei jedem Fehler
eine Meldung bringt „Es ist ein Fehler aufgetreten, fragen sie ihren
Admin“ ist recht einfach zu bauen.

Viel viel aufwendiger ist es je nach Fehler die genau richtigen
MsgBoxen zu bringen.

Auch wenn ich jetzt zu deiner/deinen Anfrage(n) noch nichts
schrieb so ist doch hoffentlich manches hier schonmal hilfreich
für dein Excel-Vba Wissen.

Übrigens Frank, du hast geschrieben du willst evtl. das Projekt
abblasen. Meinst du damit jetzt das Projekt"Auswertung von Kniffelpartie durch Excel/Vba" durch manuelles Auswerten zu ersetzen
oder das/mein VBA- Projekt durch ein anderes VBA-Projekt?

Gruß
Reinhard