Excel VBA - Vergleiche von Werten unterschiedlicher Tabellen

Erkläre mir mal was du mit obigem Code genau machen willst bzw. was du unter "zusammenfügen" verstehst.
 
okay, also: ich habe mir überlegt, die tabellen 2 seperaten überprüfungen zu unterziehen.

überprüfung 1:
- im grunde genommen das was du vorher gepostest hast, ich sag mal die "syntax überprüfen", dass in artikelnr kein buchstabe ist und dass genau 6 buchstaben usw

überprüfung 2:
- in unserer datenbank sind die "richtigen" werte gespeichert. daher habe ich mir gedacht, dass ich, wenn eine neue "riesentabelle" (entspricht tabelle1 oder katalogtabelle) reinkommt, die "richtigen" tabellen/werte aus der datenbank abrufe und in der riesentabelle (also in der "mappe") in einer weiteren tabelle (tabell2 oder tabelle3 usw) speicher. das hat dann halt den vorteil dass man einfacher vergleichen kann.

beispielhaft habe ich jetzt gebaut (bzw habs versucht), dass ein dialogfenster geöffnet wird wenn das makro ausgeführt wird, bei dem man den pfad der datei die ich hochgeladen hab (= die "riesntabelle") eingeben muss.
das klappt auch noch.

anschließend soll der inhalt (also alle zellen) kopiert und in die andere mappe übertragen werden.
da will excel aber den range-befehl nicht haben.

hast du das denn so ein bisschen verstanden was ich versuche zu machen? :P ich kann das echt schlecht erklären... >< xD
 
Ich frage mich ob es nicht generell besser wäre die Eingabe und auch die Änderung direkt zu prüfen.

Es gibt das Worksheet_Change-Ereignis, dort könnte man jetzt prüfen ob zum Beispiel etwas in Spalte 1 (Artikelnummer) eingegeben wurde.

In diesem Fall wird in der "Referenzdatei" geprüft ob die eingegebene Artikelnummer dort vorhanden ist und es könnten auch gleich die weiteren zu der Nummer gehörenden Werte wie Sortiment und Seitenzahl so ermittelt werden.

In dem Ereignis können bestimmte Spalten angegeben werden bei denen es erforderlich ist die Eingabe zu prüfen. Bei allen anderen Spalten kann einfach etwas eingegeben werden.

Überleg dir mal was du von einer solchen Lösung hältst!?
 
also prinzipiell klingt das auch gut... allerdings sind ja nicht in allen tabellen alle spalten vorhanden. was ich damit sagen will ist, dass in tabelle1 bspw eine spalte artikelnr und eine spalte sortiment existieren, und in tabelle2 bspw nur eine spalte sortiment und eine spalte größe (jetzt mal hypothetisch gesprochen, aber in meinem falle ist das ja ähnlich)

außerdem kann ich mir unter der methode noch nicht allzu viel vorstellen... könntest du das nochmal erklären? :S ich google sonst auch nochmal^^
 
Also wenn ich jetzt Daten eingebe, dann wird immer beim Verlassen der Zelle das Worksheet_Change Ereignis ausgelöst.

Die Tabelle in der ich jetzt die Daten eingebe sieht beispielsweise so aus:

Artikelnummer | Sortiment | freier Zusatztext | Seitenzahl |

Gebe ich jetzt in der Spalte "Artikelnummer" etwas ein wird das Ereignis aufgerufen und erkannt das die Eingabe geprüft werden muss:

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then
    'Artikelnummer prüfen
    pruefe_nummer()
ElseIf Target.Column = 2 Then
    'Sortiment prüfen
    pruefe_sortiment()
ElseIf Target.Column = 4 Then
    'Seitenzahl prüfen
    pruefe_seitenzahl()
End If

End Sub

Die Spalte 3 wird nicht geprüft da das ja ein freier Zusatztext ist. Es kann hier jeweils eine eigene Funktion aufgerufen werden.
 
ah :D und die methoden pruefe_nummer(), pruefe_sortiment() und pruefe_seitenzahl() müsste man dann selber mit den jeweiligen bedingungen programmieren, oder?

und: prüft er die verschiedenen spalten in abhängigkeit von den anderen? dh: einem bestimmten sortiment wird eine bestimmt seitenzahl zugeordnet. (oder entsprechend: auf einer bestimmten seite darf nur ein bestimmtes sortiment abgebildet werden)

welche sortimente aufw elchen seiten abgebildet werden dürfen,ist in einer tabelle dokumentiert. wenn das programm also erkennt, dass ein sortiment eingegeben ist, könnte man dann auch mithilfe der anderen tabelle prüfen, ob die seitenzahl für das sortiment zulässig ist?
dh das programm würde dann melden: Achtung, die seitenzahl oder das sortiment ist falsch! wenn die kombination in der anderen tabell nicht zu finden ist.

wäre das möglich?^^ ansosnten klingt die möglichkeit echt interessant!
 
Zu deinen Fragen: Ja, Ja, Ja, Ja.


So hier mal ein Vorschlag wie ich mir das so vorgestellt habe.

Es gibt die Datei "Referenz.xls" mit den Tabellen "Tabelle1" (enthält gültige Artikelnummern, Artikelbezeichnung, Sortimentskurzbezeichnung und den Preis) und "Tabelle2" (enthält Sortimentsbezeichnung kurz, Sortimentsbezeichnung lang, Seite von und Seite bis).

Hier sind also alle Artikel mit den gültigen Angaben sowie die gültigen Angaben auf welchen Seiten bestimmte Artikel stehen dürfen.

Dann gibt es noch die Datei "Katalog" in der die Angaben erfasst werden mit der "Tabelle1" (enthält Artikelnummer, Beschreibung, Preis, Sortiment kurz, Sortiment lang und Seitenzahl).

Wenn in den oben fettgeschriebenen Zellen etwas verändert wird, dann wird auf die Referenzdatei zugegriffen und kontrolliert ob die Werte gültig sind.

Kannst dir die Dateien ja mal anschauen und ein bisschen damit "spielen".

NACHTRAG:
Was ich oben vergessen habe. Das was nicht fett ist, sind die Spalten die beliebig verändert werden können (sind natürlich nur Beispiele).
 

Anhänge

Zuletzt bearbeitet:
sooo, hab da mal drinrumgestöbert- ist auf jeden fall sinnvoll, aber ich bin mir nicht sicher inwieweit ich das ziel (nämlich die überprüfung der tabelle) mit dieser methode erreichen kann, wenn hier im grunde genommen erst bei änderung überprüft wird (habe ich das denn dann so richtig verstanden?)

eine weitere frage habe ich noch: ich habe den von dir geschriebenen vorschlag zur "überprüfung der syntax" der artikelnr sehr ähnlich übernommen- nun brauche ich aber ja auch sowas in der art für die überprüfung der sortimente.
ich habe etwas geschrieben, das funktionert, allerdings ist das leider eine 26-fach verschachtelte if-schleife.

' überprüfen des Sortiments
For a = 3 To zeilen
If Tabelle1.Cells(a, 3) = "DOB" Then '1. schleife
Else
If Tabelle1.Cells(a, 3) = "Schuhe" Then '2. schleife
Else
If Tabelle1.Cells(a, 3) = "Sonst. Textilien" Then '3. schleife
Else

usw...
und das ganze halt 26 fach verschachtelt, für jedes sortiment eine schleife. ich habe das sowohl mit der "&"-verbindung als auch der "Or"-verbindung und auch als If Not. irgendwie kam aber nie das richtige ergebnis.
kannst du mir sagen, wie ich das einfacher darstellen kann? xD

und ich hoffe, es stört dich nicht, dass ich immer mal wieder zwischenfragen stelle, du beantwortest sie so gut :D
 
...wenn hier im grunde genommen erst bei änderung überprüft wird...

Also wenn du es schaffst eine Eingabe bereits auf Richtigkeit zu prüfen noch bevor sie gemacht wird, dann bist du der Größte.

Eine bereits fertige Tabelle kannst du damit nicht prüfen, das ist klar.
Es war dafür gedacht das wenn du jetzt eine neue Datei anlegst, das dann die Eingaben geprüft werden.

Man könnte die Funktionen aber auch für die nachträgliche Prüfung nehmen. Müsste dann halt angepasst werden.


Zu der IF-Abfrage bzw. der/den Schleife(n) kann ich nicht viel sagen. Ich weiß ja nicht wie es wirklich aussieht und was da genau machen willst.
 
Zurück