Anzeige
Archiv - Navigation
1756to1760
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Umschalten von Nummern - Nummern ausschl

Umschalten von Nummern - Nummern ausschl
07.05.2020 11:54:43
Nummern
Hallo,
ich habe eine Tabelle die Nummern per Schaltfläche generiert (thx an fcs!!!!) und die Uhrzeit, Datum, Bearbeiter ausgibt.
Es dürfen aber nur bestimmte Zahlen generiert werden bzw. einige Zahlen müssen übersprungen werden und es muss einen Stopp geben, sobald ein bestimmter Zahlenblock aufgebraucht ist.
Beispiel:
Zeile 6:
Nr.von Nr. bis Bst. n.freie Nr.
10000 12499 A 10438
..hier müssen z.B. die Zahlen 10455,10456,10457..bis 10468 & 10470 nicht ausgegeben werden. Und die letzte Zahl ist die 12499 - dann müsste eine Fehlermeldung mit einem Hinweistext kommen.
Hat hier jemand eine Idee?
Einen Riesen Dankeschön vorab.

hier für die Schaltflächen (big thx an fcs):
Option Explicit
Sub prcButton_Plus()
'Hochzählen
Dim Zeile As Long
Zeile = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Call ZaehlenHochRunter(Zeile, bolPlus:=True)
End Sub
Sub prcButton_Minus()
'Runterzählen
Dim Zeile As Long
Zeile = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Call ZaehlenHochRunter(Zeile, bolPlus:=False)
End Sub
Sub ZaehlenHochRunter(ByVal Zeile, bolPlus As Boolean, _
Optional Spalte As Long = 4)
Dim nummer As Long
With ActiveSheet
With .Cells(Zeile, Spalte)
'.Select 'diese Zeile muss nicht sein, es sei den der Cursor soll dort stehen.
nummer = .Value
nummer = nummer + IIf(bolPlus, 1, -1)
If nummer Mod 100 = 0 Then nummer = nummer + IIf(bolPlus, 1, -1)
.Value = nummer
End With
End With
End Sub
hier für logs:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim z As Range, rng As Range
On Error GoTo Fehler
Set rng = Range("D:D")
If Not Intersect(rng, Target) Is Nothing Then
rng.Interior.ColorIndex = xlNone
If Target.Row = 1 Then Exit Sub
For Each z In Target
If z.Offset(0, -1)  "" Then
Application.EnableEvents = False
z.Offset(0, 2) = Format(Date + Time, "HH:MM:SS" + ", " + "DD.MM.YYYY")
z.Offset(0, 3) = Environ("Username")
z.Interior.Color = vbYellow
End If
Next
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number  0 Then MsgBox "Fehler: " & _
Err.Number & vbLf & Err.Description: Err.Clear
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
08.05.2020 05:35:32
Nummern
Du bist im falschen Forum. Bildbearbeitung ist ein anderes.
Bilder lade ich mir nicht runter, da Excel damit nichts anfangen kann.
Hochgeladene Bilder können zwar als solche in Excel importiert werden, sind jedoch bei der Lösung von Problemen nicht sehr hilfreich, da man die eigentlichen Daten nicht ohne große und zeitraubende Umwege direkt in die Tabelle übertragen kann.
Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Schau mal hier
Eine hochgeladene Arbeitsmappe erhöht die Wahrscheinlichkeit, dass Du eine Lösung für Dein Problem erhältst.
Erstelle folglich bitte eine Demomappe, aus der deine Aufgabenstellung klar erkennbar ist und lade diese hoch.
Wenn du an Stelle einer Demomappe deine Originalmappe hochladen willst, diese aber sensible Daten enthält, kannst du diese Daten
http://www.ms-office-forum.de/forum/showthread.php?t=322895
änderrn.
Falls Du den Download des Forums nicht benutzen möchtest beachte bitte: von unsicheren Servern file-upload lade ich keine Datei herunter (lt. Einschätzung meines Virenprogramms)
Das ist nur meine Meinung zu dem Thema.
GrußformelHomepage
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
08.05.2020 16:32:30
Nummern
Hi
Private Function CheckAusschluss(lngNummer As Long) As Boolean
Dim arAusschluss As Variant, i As Long
arAusschluss = Array(10443, 10445, 10447, 12499) ' hier die Ausschlüsse
For i = LBound(arAusschluss) To UBound(arAusschluss)
If arAusschluss(i) = lngNummer Then
CheckAusschluss = True
Exit Function
End If
Next i
End Function

Sub prcButton_Plus()
'Hochzählen
Dim Zeile As Long
Zeile = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Call ZaehlenHochRunter(Zeile, bolPlus:=True)
End Sub

Sub prcButton_Minus()
'Runterzählen
Dim Zeile As Long
Zeile = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Call ZaehlenHochRunter(Zeile, bolPlus:=False)
End Sub

Sub ZaehlenHochRunter(ByVal Zeile, bolPlus As Boolean, Optional Spalte As Long = 4)
Dim nummer As Long
With ActiveSheet
With .Cells(Zeile, Spalte)
nummer = .Value
nummer = nummer + IIf(bolPlus, 1, -1)
Do Until CheckAusschluss(nummer) = False And nummer Mod 100  0
nummer = nummer + IIf(bolPlus, 1, -1)
Loop
If nummer > Cells(Zeile, 2) Or nummer 
cu
Chris
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
08.05.2020 17:01:38
Nummern
Hi Chris,
vielen, vielen Dank für den Code = Lösung! Es funktioniert wunderbar!!!
Wenn ich nun noch gewisse Zahlen oder "Zahlenblöcke" überspringen möchte - hatte ich dies bisher so:
Beispiel: die Zahl 49001 bis zur 49011 soll übersprungen werden.
Die zahl steht bei 49000, es wird eine enue zahl generiert und es soll automatisch auf die 49012 gesprungen werden.
If nummer Mod 49001 = 0 Then nummer = nummer + IIf(bolPlus, 10, -10)
Diese Funktion bekomme ich in Deinen Code nun nicht mehr zum laufen :-( Dieser war auch nicht optimal, da er auf dem "zurück" Button erst bei 49001 die "10" abgezogen hat.
Vielleicht kannst Du mir hier noch helfen.
Nochmals vielen Dank für Deine schnelle Hilfe und Umsetzung!
Beste Grüße!
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
08.05.2020 17:19:01
Nummern
Hi
Deine Anforderungen sind ja schon etwas sprunghaft. Keine Ausnahmen, dann einzelne Ausnahmen und jetzt ganze Zahlenreihen.
Schreibe die Ausnahme-Logik mal in eine Tabelle und stelle das vollständige Beispiel (auch wenn dir sonst noch etwas einfällt) als Mappe ins Forum.
Ich schau dann am Montag wieder hier rein.
cu
Chris
AW: Umschalten von Nummern - Nummern ausschl
11.05.2020 14:52:01
Nummern
Hi,
sorry ich habe mich hier wohl blöd ausgedrückt - sorry!
Hintergrund: Wir benötigen für jeden Kunden eine sogenannte Fibu-Nummer (Finanzbuch-Nummer) - diese Nummern sind in Blöcken den jeweiligen Anfangsbuchstaben (Kundennamen) zugeordnet. Jeder neue Kunde muss eine neue Nummer (noch nie vergeben) bekommen. In diesen freien Zahlblöcken gibt es aber schon vergebene Nummer und es wurden falsche Zahlen/Zahlenblöcke vergeben - daher müssen wir nun bei "H", "Sch" und "Sp" Nummern vergeben die noch frei sein...
...Beispiel für Buchstabe H:
der Block ist hier von 27500 bis 29999.
folgende Nummern sind hier frei:
27500 bis 27625
27627 bis 27829
27831 bis 28916
...für Buchstabe Sch:
der Block ist hier von 49000 bis 49999.
folgende Nummern sind hier frei:
49000 bis 49061
49063 bis 49837
...für Buchstabe Sp:
der Block ist hier von 50000 bis 50499.
folgende Nummern sind hier frei:
50000 bis 50017
50019 bis 50066
50087 bis 50135
50183 bis 50499
Hier als Tabelle
https:\/\/www.herber.de/bbs/user/137424.xlsx
Ich hätte bei H, sch und sp nun alle belegten Nummern per "If nummer Mod *****" eingetragen - vielleicht hast du eine bessere Idee?!
wieder einen Riesen Dank vorab!
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
11.05.2020 16:35:54
Nummern
Hi
Ein leises *wtf* kann ich mir nicht verkneifen. Kundennummern nach Alphabet zu vergeben, habe ich noch nie gehört. Eine bestehende Kundennummer sollte nie wiederverwendet werden (auch wenn der Kunde mal weg fällt), sondern sollte einzigartig (unique) sein/bleiben. Speziell wenn es in einem Finanzsystem verwendet wird.
(Im Gegensatz dazu ist mir das System von Buchungs-/Nummernkreisen bekannt, aber dies wird nach Kategorie bzw. Buchungs-/Kostenart etc. aufgebaut, also auch nicht alphabetisch)
Aber egal, was ich eigentlich hinterfragen wollte. Es kann ja nicht sein, dass du bei jeder Nummernvergabe den Code anpassen willst. Die bereits vergebenen Nummern müssen doch irgendwo als Liste vorhanden sein d.h. der Abgleich erfolgt mit dieser Liste und nicht "hart" einprogrammiert.
Wenn ja, wo ist die Liste bzw. wie sieht die Ausgangslage genau aus.
Alle Parameter welche sich periodisch ändern, sollten wenigstens in eine (Hilfs-)tabelle geschrieben werden, damit sich Änderungen schnell und einfach durchführen lassen. Sonst darfst du als vermutlich einziger VBA'ler im Betrieb nie wieder in den Urlaub.
cu
Chris
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
11.05.2020 18:38:35
Nummern
sorry - dummerweise reload..
Die generierten Nummern sind keine Kundennummern, es sind FiBu-Nummern - diese müssen manuell in unsere SO eingetragen werden bzw. vorher erstellt werden. Diese FiBu Nummern werden für datev benötigt - die Vergabe nach Anfangsbuchstaben wurde bei uns irgendwann einmal eingeführt, wir müssen folgende Zahlenblöcke verwenden: von 10000 bis zur 69999.
Bisher wurden die vergebenen Nummern auf einer ausgedruckten Liste gestrichen...dies führte zu einigen Fehlern und ist im Jahre 2020 nicht der beste Workflow :-)
Mit Hilfe (THX an Hary!) funktioniert es nun - natürlich wäre eine Eingabe der Ausschlüsse per (Hilfs-)tabelle noch genialer - hast Du hierfür eine Idee?
PS: was bedeutet "Urlaub"? :-D
Code:
Sub ZaehlenHochRunter(ByVal Zeile, bolPlus As Boolean, Optional Spalte As Long = 4)
Dim nummer As Long
With ActiveSheet
With .Cells(Zeile, Spalte)
nummer = .Value
nochmal:
nummer = nummer + IIf(bolPlus, 1, -1)
If nummer Mod 100 = 0 Then nummer = nummer + IIf(bolPlus, 1, -1)
Select Case nummer
'hier die vergebenen Nummern eintragen'
' Beispiel für einen Block: Case 10455 To 10468, 10470, 27626, 27830
Case 27626, 27830, 28917 To 29999, 49062, 49837 To 49999, 50018, 50067 To 50086,  _
50136 To 50182
MsgBox "ACHTUNG - es wurden Nummern übersprungen!", vbCritical, "ACHTUNG"
GoTo nochmal
End Select
If nummer = Cells(Zeile, 1) Then
.Value = nummer
MsgBox "Die neue Nummer lautet: " & nummer, vbInformation, "Es wurde eine neue  _
Nummer generiert!"
ElseIf nummer >= Cells(Zeile, 2) Then
MsgBox "Dieser Nummernblock ist nun aufgebraucht - bitte Frau Muster kontaktieren!" _
, vbCritical, "Fehler: Nummernblock aufgebraucht"
Exit Sub
End If
End With
End With
End Sub

PS: was bedeutet "Urlaub"? :-D
Anzeige
AW: Umschalten von Nummern - Nummern ausschl
11.05.2020 18:17:06
Nummern
Hi,
sorry ich habe mich hier wohl blöd ausgedrückt - sorry!
Hintergrund: Wir benötigen für jeden Kunden eine sogenannte Fibu-Nummer (Finanzbuch-Nummer) - diese Nummern sind in Blöcken den jeweiligen Anfangsbuchstaben (Kundennamen) zugeordnet. Jeder neue Kunde muss eine neue Nummer (noch nie vergeben) bekommen. In diesen freien Zahlblöcken gibt es aber schon vergebene Nummer und es wurden falsche Zahlen/Zahlenblöcke vergeben - daher müssen wir nun bei "H", "Sch" und "Sp" Nummern vergeben die noch frei sein...
...Beispiel für Buchstabe H:
der Block ist hier von 27500 bis 29999.
folgende Nummern sind hier frei:
27500 bis 27625
27627 bis 27829
27831 bis 28916
...für Buchstabe Sch:
der Block ist hier von 49000 bis 49999.
folgende Nummern sind hier frei:
49000 bis 49061
49063 bis 49837
...für Buchstabe Sp:
der Block ist hier von 50000 bis 50499.
folgende Nummern sind hier frei:
50000 bis 50017
50019 bis 50066
50087 bis 50135
50183 bis 50499
Hier als Tabelle
https:\/\/www.herber.de/bbs/user/137424.xlsx
Ich hätte bei H, sch und sp nun alle belegten Nummern per "If nummer Mod *****" eingetragen - vielleicht hast du eine bessere Idee?!
wieder einen Riesen Dank vorab!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige