VBA Listenabfrage

Liebe www-Gemeinde,

aus den Zelleninhalten eines Tabellenblattes möchte ich per VBA-Makro ein Verzeichnis erstellen. Abhängig vom Inhalt einer Zelle soll ein Unterverzeichnis erstellt werden.

Dim Pfad as String, Kunde as String
Pfad = „C:\01_Arbeit“
Kunde = UCase(Cells(8, 4).Value)

Wenn nun Kunde bestimmte Werte annimmt, z.B.
If
Kunde = „AAA“ oder „BBB“ oder „CCC“
soll werden:

Pfad = Pfad & „Gute_Arbeit“

Kann mir jemand helfen, einen Container (Array?) und eine Abfrage dazu zu schreiben? Der Container soll editierbar sein. Die Erweiterung kann soll manuell erfolgen.

Vielen Dank für Eure Unterstützung.

MfG MwieMichel

Hallo Michel,

aus den Zelleninhalten eines Tabellenblattes möchte ich per
VBA-Makro ein Verzeichnis erstellen. Abhängig vom Inhalt einer
Zelle soll ein Unterverzeichnis erstellt werden.

okay.

Dim Pfad as String, Kunde as String
Pfad = „C:\01_Arbeit“
Kunde = UCase(Cells(8, 4).Value)
Wenn nun Kunde bestimmte Werte annimmt, z.B.
If
Kunde = „AAA“ oder „BBB“ oder „CCC“
soll werden:
Pfad = Pfad & „Gute_Arbeit“

Auch einig. okay.

Kann mir jemand helfen, einen Container (Array?) und eine
Abfrage dazu zu schreiben? Der Container soll editierbar sein.
Die Erweiterung kann soll manuell erfolgen.

?, nicht okay, hab’s leider nicht verstanden.

Gruß
Reinhard

Hallo Michel,

Hallo Reinhard,
Ich habe eine Vorlage für ein Auftragsblatt. Das wird von verschiedenen Personen ausgefüllt und zugeschickt. Aus verschiedenen Instanzen (kann man das so bezeichnen?) oder Kopien dieser Vorlage kopiere ich per VBA mehrere Informationen und erstelle daraus einen Verzeichnisnamen für eine Berechnung.
Während die meisten Kunden in das Hauptverzeichnis abgelegt werden sollen, gibt es bestimmte Kunden, die in einem Unterverzeichnis abgelegt werden sollen.

Dim Pfad as String, Kunde as String
Pfad = „C:\01_Arbeit“
Kunde = UCase(Cells(8, 4).Value)

Die Zelle Cells(8,4) enthält den Kundennamen. Um das Unterverzeichnis zu erstellen könnte ich nun abfragen:
If Kunde = „AAA“ Then
Pfad = Pfad & „Gute_Arbeit“
End If
Und das für alle fraglichen Kunden wiederholen habe. Ich würde mir wünschen dies durch Liste (oder einen Array?) bündeln zu können.
Also etwa:
Ist Kunde in einer Liste vorhanden dann ändere Pfad in Pfad\Gute_Arbeit.
Sorry, wenn ich mich unverständlich oder kompliziert ausdrücke.

Gruß
Reinhard

Vielen Dank für Deine Mühe und Deine Hilfe.
MfG MwieMichel

Hallo Michel,

Ich habe eine Vorlage für ein Auftragsblatt. Das wird von
verschiedenen Personen ausgefüllt und zugeschickt.

wie schicken sie die Mappe zu? Email, über Netzwerk?
Werden diese zugeschickten Mappen gespeichert oder nur paar daten ausgelesen?
Haben die Mappen im Namen das datum oder wie werden die auseinander
gehalten?

Aus
verschiedenen Instanzen (kann man das so bezeichnen?) oder
Kopien dieser Vorlage kopiere ich per VBA mehrere
Informationen und erstelle daraus einen Verzeichnisnamen für
eine Berechnung.

Mir unklar wie du aus Zellwerten einen Baum erzeugst.
Ist dein Verzeichnisbaum überhaupt so ein Verzeichnisbaum wie im Win
Explorer? Berechnungen finden in Zellen statt oder in einem Vba-Code.

Während die meisten Kunden in das Hauptverzeichnis abgelegt
werden sollen, gibt es bestimmte Kunden, die in einem
Unterverzeichnis abgelegt werden sollen.

Ich würde
mir wünschen dies durch Liste (oder einen Array?) bündeln zu
können.

Das mit Container, Array, Liste verstehe ich nicht.

Beginnen wir bitte mal mit der Schulung für Dummies wie mich :smile:
Wochenbeginn, Freitags haben dir paar Mitarbeiter Mappen zugesandt.
In welchem Pfad stehen die bzw. sinds Emails o.ä.?
Dann öffnest du die Mappen, oder soll das auch Vba-Code automatisch
machen?

Wodran erkennt der Code welche Mappen zu öffnen sind oder welche
geöffneten Mappen ausgelsen werden sollen.

Zu den Listen. In der Mappe wo der Code ist könnte ja ein Blatt sein
mit zwei Spalten. Eine ist der Kundenname, die andere das (Unter-)
Verzeichnis. Ist es das was du mit Liste/Array meinst?

Gruß
Reinhard

Hallo Michel,

Hallo Reinhard,
vielen Dank für Deine Geduld.

wie schicken sie die Mappe zu? Email, über Netzwerk?
Werden diese zugeschickten Mappen gespeichert oder nur paar
daten ausgelesen?

Das Formblatt (die Vorlage) liegt in einem für die ganze Firma zugänglichen Verzeichnis. Die Formblätter (bzw. deren Kopien) werden von den Verantwortlichen ausgefüllt und via Lotus Notes an die Berechnungsabteilung geschickt. Wir speichern diese Blätter dann in einem bestimmten Verzeichnis (Windows).

Haben die Mappen im Namen das datum oder wie werden die
auseinander
gehalten?

Der Dateiname setzt sich zusammen aus Datum (6-stellig, YYMMDD), Sachnummer, Projektnummer, Kunde, Text, jeweils durch einen Unterstrich getrennt. Das soll uns helfen, eine Berechnung auch ein Jahr später noch fix zu finden. Hier gibt es mehr oder weniger gute Einhaltung der Syntax, halt je nach Bearbeiter. Der Auftragseingang erfolgt auf Windows-System, hier gibt es auch ein Verzeichnis zum Speichern. Die Berechnungen werden dann aber auf Linux-System durchgeführt.

Mir unklar wie du aus Zellwerten einen Baum erzeugst.
Ist dein Verzeichnisbaum überhaupt so ein Verzeichnisbaum wie
im Win
Explorer? Berechnungen finden in Zellen statt oder in einem
Vba-Code.

So erstelle ich ein Verzeichnis auf LINUX-Seite (über Samba-Server, Sub und Dim schenk ich mir mal) aus:

Pfad = „\Taede145\projekte“

Kunde = UCase(Cells(8, 4).Value)
ProjektA = Replace(Cells(9, 4).Value, " ", „-“)
ProjektB = Replace(Cells(10, 4).Value, " ", „-“)
PNummer = Cells(15, 4).Value
SAPNummer = Cells(16, 4).Value
EDatum = Date
SDatum = Mid(EDatum, 7, 4) & Mid(EDatum, 4, 2) & Left(EDatum, 2)

Pfad = Pfad & Kunde & „“
UPfad = SDatum & „_“ & SAPNummer & „_“ & PNummer & „_“ & Kunde & „_“ & ProjektA & „_“ & ProjektB
Pfad = Pfad & UPfad
MkDir Pfad

Während die meisten Kunden in das Hauptverzeichnis abgelegt
werden sollen, gibt es bestimmte Kunden, die in einem
Unterverzeichnis abgelegt werden sollen.

Das mit Container, Array, Liste verstehe ich nicht.

Ich hätte gerne eine Art Liste, in die ich alle die Kunden eintrage (da könnten ggf. noch welche hinzukommen, andere wegfallen) die ein Unterverzeichnis in \projekte bekommen. In meinem Fall sollen alle Nutzfahrzeugkunden im Unterverzeichnis \projekte\CVS\ landen. Im entsprechenden Feld .Cells(8,4) steht z.B. „MAN“. Das Verzeichnis soll dann „\projekte\CVS\MAN*“ sein. Bei „BMW“ aber „\projekte\BMW*“

Beginnen wir bitte mal mit der Schulung für Dummies wie mich

-)

Wochenbeginn, Freitags haben dir paar Mitarbeiter Mappen
zugesandt.
In welchem Pfad stehen die bzw. sinds Emails o.ä.?
Dann öffnest du die Mappen, oder soll das auch Vba-Code
automatisch
machen?

Ich öffne Lotus Notes und sehe all die e-mails mit Excel-Sheet zur Beauftragung im Anhang an. Die speichere ich im Verzeichnis der Berechnungsabteilung. Da ich die Geometrie aus SAP ebenfalls aus der Windowswelt laden muss, möchte ich das Linux-Verzeichnis von Windows aus erstellen (mit der beschriebenen Syntax eben). Händisch eintippen ist öde und birgt zu viele Risiken der Falscheingabe (vertippen und so…).

Wodran erkennt der Code welche Mappen zu öffnen sind oder
welche
geöffneten Mappen ausgelsen werden sollen.

Ich öffne die fraglichen Mappen manuell. Das waren im Januar über 70. Normal sind etwa 35 im Monat, also 1 bis 2 an einem Arbeitstag, das aber unregelmäßig. Einmal 6 an einem Tag, und dann wieder eine Woche nix.

Zu den Listen. In der Mappe wo der Code ist könnte ja ein
Blatt sein
mit zwei Spalten. Eine ist der Kundenname, die andere das
(Unter-)
Verzeichnis. Ist es das was du mit Liste/Array meinst?

Das Problem ist, dass die Beauftragung teilweise auch durch Mitarbeiter erfolgt, bei denen ich mir nicht sicher bin ob sie so genau wissen was sie tun. Daher beabsichtige ich die Routinen im persönlichen Arbeitsblatt abzulegen und nicht in der Vorlage.
Weiter gedacht soll die Vorlage den Ersteller beim Ausfüllen unterstützen (z.B. mit einer lokalen ini, die bestimmte Felder schon mal vorbelegt, oder Formularen), das ist aber noch Zukunftsmusik, da das eher mein Hobby ist, und meine Freizeit begrenzt.

Gruß
Reinhard

Vielen Dank noch mal für Deine Engelsgeduld.
MfG MwieMichel

Hallo Reinhard,
bin beim Stöbern auf eine Lösung gestoßen:

Dim CVS_Kunde As Variant
Dim Kunde As String, Pfad as String
Dim i As Integer, n As Integer

Pfad = „\Taede145\projekte“
Kunde = UCase(Cells(8, 4).Value)

CVS_Kunde = Array(„MAN“, „CATERPILLAR“, „AGCO“, „SCANIA“)
n = UBound(CVS_Kunde)
For i = 0 To n
If Kunde = CVS_Kunde(i) Then
Pfad = Pfad & „CVS“
End If
Next

Vielen Dank noch mal für die Antworten, Fragen und das Anregen zum Überdenken.
MfG MwieMichel

For i = 0 To n

If Kunde = CVS_Kunde(i) Then
Pfad = Pfad & „CVS“
End If
Next

Hallo Michel,
nur ein Optik Tipp
Du willst wissen ob Kunde_CVS(i) mit Kunde übereinstimmt.
Schreib es anderherum
If CVS_Kunde(i)=Kunde

Es funktioniert natürlich auch wie Du es geschrieben hast, da eine logische Aussage überprüft wird, aber du würdest nie schreiben

If 7= IntVar then debug.print „Wahr“

Grüße
Winter