Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
VBA Code geht nicht
#1
Moin,
ich habe eine Kontrollliste wo wir Tourenzeiten vergleichen müssen.

Wenn ich im Register Gesamt auf den Button Berechnen drücke kommt eine Fehlermeldung.

Könnt ihr mir sagen, was der Fehler ist?

Ich würde mich über eine Positive Nachricht freuen.

Vielen dank für die Mühen 

MFG Manfred


Angehängte Dateien
.xlsm   Test.xlsm (Größe: 514,99 KB / Downloads: 7)
Zitieren
#2
Hallo,

schon mal in den Variablen nachgesehen, welche Zellen du da bekommst, wenn die Zeile gelb unterlegt ist ?

MsgBox Sheets(arr(j)).Range(SollSpalte & Treffer) gibt Sheets("01.10.2025").Range("T2") und da steht drin "Soll tägliche Arbeitszeit" ... eine der Überschriften.

Aber eigentlich wird eine Zahl erwartet, die im Uhrzeit-Format angeliefert werden sollte. Zumindest laut deinem Code.

Keine Ahnung, was du da tatsächlich als Wert erwartest.

Das hat man wieder mal davon ... viel zu viele Sheets ... warum wird nicht gleich alles in einer Tabelle erfasst ?
Wenn man die Daten hinterher sowieso zusammenführen muss, ist das vereinzeln doch absoluter Mumpitz.
Bei 2^20 Zeilen und maximal 20 Fahrern, kann man über 180 Jahre pro Tabellenblatt erfassen.
_________
VG Sabina
Zitieren
#3
Hallo


1)
For i = 3 To Tabe
Muss es nicht 3 heißen, wil auf dem Blatt in Zeile 2 Überschrften stehen


2) aber auch dann, im 2. Durchlauf ist in 02.10.2025 U3 leer. Daraus kann keine Zeit gebildet werden.


LG UweD
Zitieren
#4
Moin Logistiker,

tja, das ist wieder so ein Fall, bei dem Hilfsbereite in pure Verzweiflung stürzen: Was ein riesiger Moloch von Tabellenmachwerk, nur um ein paar Arbeitszeiten zu dokumentieren. Das hat sich Euer Jens echt viel Mühe gegeben, um alles so schön bunt hier zu gestalten. 

Was Ihr tatsächlich braucht, kann man (der Übersichtlichkeit wegen) auf zwei Tabellen eindampfen: eine mit den Mitarbeitern und ihren vertraglichen Vereinbarungen zur Arbeitszeit => die Stammdaten, eine zweite mit den aktuellen Leistungsdaten => die Bewegungsdaten. Dazu braucht es weder Kalenderblätter noch bunte Kästchen.

Aus den Stammdaten lässt sich per VBA täglich/stündlich auslesen, wieviel Stunden der Kollege denn dem Laden aktuell schuldet, aus den Bewegungsdaten der Vergleichswert. In den beiden völlig unformatierten Arbeitsblättern stehen nur Daten. Eine (notfalls bunte) Auswertung macht man per Userform, wie auch die Eingabe der Bewegungsdaten, so sie nicht per Import aus einer digitalen Zeiterfassung kommen. Alternativ ginge hier auch ein drittes Arbeitsblatt, allerdings aufwändiger, dies mit den Optionen einer USF zu gestalten.

Das optional um eine Tabelle Kraftfahrzeuge zu erweitern (Kilometerleistung, Wartungsintervalle, Amortisation), ist dann ein Leichtes.

Schöne Grüße
----------------------------------------------------------------------------------------------------
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019 pro & Android12 & XL365
Zitieren
#5
Hallo Miteinander,

da hat einer einfach mal noch 'ne Zeile über der Tabelle eingefügt und fertig ist das Problem.

Wie schon UweD geschrieben hat dann eben die Schleife ab 3 Zählen.

Um solchen Problemen vorzubeugen kann man einfach den Start der Schleife berechnen.

Gruß Uwe
Zitieren
#6
(Gestern, 15:06)PetrolMaxxe schrieb: Hallo Miteinander,

da hat einer einfach mal noch 'ne Zeile über der Tabelle eingefügt und fertig ist das Problem.

Wie schon UweD geschrieben hat dann eben die Schleife ab 3 Zählen.

Um solchen Problemen vorzubeugen kann man einfach den Start der Schleife berechnen.

Zur Ergänzung: Jens seine Beispieldatei war so angelegt, dass wenn Zellen ohne Zeit also leer vorhanden sind kein Fahrer eingetragen war und damit der Fehler nicht passierte. Der Fehlerausschluss wäre so:
Code:
If IsNumeric(Sheets(arr(j)).Range(SollSpalte & Treffer)) Then
    timeSoll = timeSoll + (Sheets(arr(j)).Range(SollSpalte & Treffer) * 24)
End If
If IsNumeric(Sheets(arr(j)).Range(IstSpalte & Treffer)) Then
    timeIst = timeIst + (Sheets(arr(j)).Range(IstSpalte & Treffer) * 24)
End If
Nötig wäre diese Anpassung nicht, wenn die betreffende Zelle 0 enthält.

Gruß Uwe
Zitieren


Gehe zu:


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




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions