Seite 1 von 1
[Gelöst] Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 18:54
von Sandy86
Hallo zusammen,
mal wieder fuchst es bei meiner Tabelle.
In meiner Calc unter Spalte B1:B2500 sollen Seriennummern aufgelistet werden, welche freilich nicht doppelt vorkommen dürfen.
Ich vermisse eine Funktion wie bei Excel, worunter ich unter Daten-Gültigkeit eine Formel wie =zählenwenn($B$1:$B$2500;B1)=1 o.ä. eingebe, welche mir dann eine Fehlermeldung (z.B. Seriennummer bereits vorhanden!) ausspuckt.
Möchte mir da jemand weiter helfen?
Lg Sandra
Re: Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 20:08
von miesepeter
Hallo und ja ich möchte -
du könntest es mit einer bedingten Formatierung realisieren. Die bedingte Formatierung wird in Zelle B1 eingegeben und dann mit dem Formatübertragungspinsel auf alle anderen Zellen der Spalte B übertragen. (Mischung absolute und relative Adressierung - siehe Screenshot.)
Ciao

- BedingteFormatierung.png (39.9 KiB) 5727 mal betrachtet
Re: Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 20:58
von Sandy86
Hallo Miesepeter, danke für deine schnelle Antwort.
miesepeter hat geschrieben:Hallo und ja ich möchte -
du könntest es mit einer bedingten Formatierung realisieren. Die bedingte Formatierung wird in Zelle B1 eingegeben und dann mit dem Formatübertragungspinsel auf alle anderen Zellen der Spalte B übertragen. (Mischung absolute und relative Adressierung - siehe Screenshot.)
Ciao
Leider funktioniert dein Lösungsweg bei mir nicht. Verhindert dieser denn komplett die Doppeleintragung, inklusive Fehlermeldung, oder werden hier lediglich alle Duplikate rot markiert?
Evtl. steht die eine Bedingung den anderen zweien (welche rein dem Zweck der Formatierung des Zellhintergrunds dienen - Screenshot) widersprüchlich gegenüber?

- Snip1.PNG (23 KiB) 5699 mal betrachtet
LG
Re: Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 21:33
von miesepeter
Sandy86 hat geschrieben:verhindert dieser denn komplett die Doppeleintragung, inklusive Fehlermeldung, oder werden hier lediglich alle Duplikate rot markiert?
Evtl. steht die eine Bedingung den anderen zweien (welche rein dem Zweck der Formatierung des Zellhintergrunds dienen - Screenshot) widersprüchlich gegenüber?
Hallo,
es werden nur die Duplikate rot markiert, es wird keine Gültigkeit bewirkt. Bei meinem Test erbrachte die Formel richtige Darstellung.
Ob die Bedingungen von oben nach unten abgearbeitet werden, kann ich nicht sagen, das kannst du aber doch leicht selbst feststellen (dein Screenshot sagt: funktioniert nicht).
Inwieweit man die Funktion der Gültigkeit einbringt, da bin ich überfragt.
Hast du mal bei
Gültigkeit > Kriterien :: Zellbereich nachgesehen, dort kann auch eine Formel eingegeben werden...
Es wird sich schon jemand finden, der mehr dazu ausführen kann...
Ciao
Re: Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 22:26
von Stephan
Du kannst über Daten-Gültigkeit eine Function auslösen die die Prüfung macht, dazu in Daten Gültigkeit eintragen:
Zulassen: Ganze Zahl
Daten: gleich
Wert: 123456789
(dieser Eintrag dient nur dazu einen Zellwert anzugeben der garantiert nie vorkommen wird, d.h. die Eingabe ist letztlich beliebig solange der Wert nur nie in Realität eingeben wird)
und bei Register "Fehlermeldung":
Aktion: Makro
und folgende Function angeben:
Code: Alles auswählen
Function pruefen(CellValue As String, CellAddress As String) As Boolean
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
oXCellRange = thiscomponent.Sheets(0).getCellRangeByName("$B$1:$B$2500")
oXCell = thiscomponent.Sheets(0).getCellRangeByName("B1").Value
Dim args(1) As Variant
args(0) = oXCellRange
args(1) = oXCell
result = oFunctionAccess.callFunction("COUNTIF",args())
If result >= 1 AND VAL(CellValue) = oXCell Then
Msgbox "schon vorhanden"
pruefen = False
Else
pruefen = True
End If
End Function
Gruß
Stephan
Re: Doppelte Seriennummern verhindern
Verfasst: Mi, 09.12.2015 22:28
von Stephan
Ob die Bedingungen von oben nach unten abgearbeitet werden
ja, werden sie. Bei der gegeben Reihenfolge wird dadurch ein roter Hintergrund u.U. überschrieben. Also erste Bedingung an letzte Stelle und es sollte gehen
Gruß
Stephan
Re: Doppelte Seriennummern verhindern
Verfasst: Do, 10.12.2015 07:58
von Stephan
Da muss ich dir nach einem Test widersprechen! Ist die erste Bedingung erfüllt, bleiben die weiteren Bedingzngen unbebachtet.
Das heißt, wenn die Bedingung für "Rot" eintritt, wir die Zelle rot gefärbt, egal was danach noch für Bedingungen kommen.
In der Tat. Danke für Deine Aufmerksamkeit und den Hinweis.
Ich weiß jetzt garnicht warum ich das falsch im Kopf hatte.
Gruß
Stephan
Re: Doppelte Seriennummern verhindern
Verfasst: Do, 10.12.2015 17:09
von Sandy86
Hallo zusammen,
die Makrofunktion klingt ganz gut, habe alles genau so eingestellt wie bei Deiner Tabelle vorgegeben, Stefan,
dennoch liegt der Hund noch irgendwo begraben.
Makros stelle ich hier ein, richtig?

- Snip2.PNG (13.49 KiB) 5490 mal betrachtet
paljass als Gast hat geschrieben:Eventuell waäre eine Beispieldatei zum Nachgucken gut.
Ja, ich habe das Layout, um Verwirrungen bezüglich des obigen "Zellhintergrundfarbenproblems" auszumerzen, etwas verändert. Wundert Euch also bitte nicht.
Auf Daten/Gültigkeit könnt Ihr entsprechende Einstellungen nachvollziehen.
Seite 2:
Lg und danke im Voraus
Sandra
Re: Doppelte Seriennummern verhindern
Verfasst: Fr, 11.12.2015 20:15
von Sandy86
Leute, schaut doch bitte mal drüber!
Lg
Re: Doppelte Seriennummern verhindern
Verfasst: Sa, 12.12.2015 08:08
von F3K Total
Moin,
habe den Code etwas angepaßt.
Code: Alles auswählen
Function pruefen(CellValue As String, CellAddress As String) As Boolean
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
oXCellRange = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName("$B$1:$B$10000")
oXCell = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName(CellAddress)
oXCell.formula = CellValue
Dim args(1) As Variant
args(0) = oXCellRange
args(1) = oXCell.formula
result = oFunctionAccess.callFunction("COUNTIF",args())
If result >= 1 Then
msgbox ("Die Seriennummer ist bereits vorhanden!",16,"Doppelter Eintrag")
pruefen = False
Else
pruefen = True
End If
End Function
Zwei Dinge:
- Du hast mit ...Sheets(0) auf das erste Tabellenblatt zugegriffen, deine Daten stehen auf dem zweiten
- Bei mit funzte es bei neuen Zeilen erst, nachdem ich XCell.formula = CellValue zugefügt hatte, sprich die eingetippte Seriennummer wird per Makro in die Zelle geschrieben und dannach ausgewertet.
Gruß R
Re: Doppelte Seriennummern verhindern
Verfasst: Sa, 12.12.2015 12:54
von Sandy86
Servus F3K,
danke für Deine Mühe.
Hast Du es selbst getestet?
Nach Übertragung Deines Makros zeigt es mir zwar nun endlich die Fehlermeldung an, welche aber weder die Eingabe verhindert, aber noch schlimmer, keinen Unterschied macht, ob die Seriennummer tatsächlich vorhanden ist oder nicht. -> siehe Screens

- Snip 3.PNG (11.42 KiB) 5313 mal betrachtet

- snip 3.1.PNG (4.43 KiB) 5313 mal betrachtet
Wie gehe ich weiter vor?
Gruß
Sandra
Re: Doppelte Seriennummern verhindern
Verfasst: Sa, 12.12.2015 14:39
von F3K Total
Ups,
da war ein Fehler, es muss
und nicht
sein
Alles zusammen, noch mit Löschfunktion:
Code: Alles auswählen
Function pruefen(CellValue As String, CellAddress As String) As Boolean
oFunctionAccess = createUnoService( "com.sun.star.sheet.FunctionAccess" )
oXCellRange = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName("$B$1:$B$10000")
oXCell = thiscomponent.Sheets.getbyname("Alle Teile_2").getCellRangeByName(CellAddress)
oXCell.formula = CellValue
Dim args(1) As Variant
args(0) = oXCellRange
args(1) = oXCell.formula
result = oFunctionAccess.callFunction("COUNTIF",args())
If result > 1 Then
if msgbox ("Die Seriennummer ist bereits vorhanden!"&chr(13)&"Soll die Neueingabe gelöscht werden?",20,"Doppelter Eintrag") = 6 then
oXCell.formula = ""
endif
pruefen = False
Else
pruefen = True
End If
End Function
Gruß R
Re: Doppelte Seriennummern verhindern
Verfasst: Sa, 12.12.2015 21:07
von Sandy86
Vielen, vielen Dank, F3K.
Klappt nun hervorragend!
LG