online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon delium vom 15.05.2019, 10:56 Options

VBA Dateinamen mit best. Wert in eine Listbox eintragen

Hallo Zusammen

Ich habe folgendes Problem: Ich möchte eine Maske mit 2 Knöpfen (Suchen und Markieren) und 1 Listbox erstellen.

1. Knopf --> Suchen : soll in einem Ordner (mit unterodner) "c:\test\" sämtliche Excel-Mappen öffnen und in der Tabelle "Eingabe" die Spalte X nach einem bestimmten Wert suchen z.B 05/07

Falls dieser Wert vorhanden ist soll das Makro die Namen von diesen Excel-Mappen in eine Listbox eintragen

2. Knopf --> Markieren: Später (nach der Bearbeitung dieser Mappen) möchte ich die gefundene Werte bzw. Zellen mit "Verarbeitet" überschreiben.


Für jede Hilfe bin ich dankbar!

gruss delium


Antwort schreiben

Antwort 1 von coros vom 15.05.2019, 11:27 Options

Hallo delium,

zu1. Kopiere nachfolgenden VBA-Code in das VBA-Projekt der UserForm, die den Button "Suchen" und die Listbox enthält.

[b]Option Explicit

Private Sub CommandButton1_Click()
Dim Dateityp$
Dim Verzeichnis As String, SearchKrit As String
Dim i As Integer
Application.ScreenUpdating = False
SearchKrit = "05/07"
Verzeichnis = "C:\Test\"
Dateityp = Dir(Verzeichnis & "\*.xls")
ListBox1.Clear
Do While Dateityp <> ""
GetObject (Verzeichnis & Dateityp)
For i = 1 To Workbooks(Dateityp).Sheets("Eingabe").Range("X65536").End(xlUp).Row
If Workbooks(Dateityp).Sheets("Eingabe").Cells(i, 24) = SearchKrit Then
ListBox1.AddItem Dateityp
Exit For
End If
Next
Workbooks(Dateityp).Close False
Dateityp = Dir()
Loop
End Sub[/b]


Hier wird jede Datei im Verzeichnis "C:\Test\" geöffnet und der Wert in Spalte X wird geprüft. Entspricht der Wert einer Vorgabe, wird er in der Listbox aufgeführt.
In dem Code musst Du in der Zeile

[b]SearchKrit = "05/07"[/b]


das Kriterium, nachdem gesucht werden soll, eintragen.

Zu 2.: Das habe ich nicht verstanden. Beschreibe das nochmal anders.

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 2 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von delium vom 15.05.2019, 11:54 Options

Hallo Oliver

danke erstmal für die schnelle Antwort.


zu 1: Also dein Code habe ich ausführen lassen
da kommt eine Laufzeitfehler:9

"index ausserhalb des gültigen Bereichs"
beim debuggen springt er auf die Zeile

For i = 1 To Workbooks(Dateityp).Sheets("Eingabe").Range("X65536").End(xlUp).Row

ne andere Frage -- > ist es möglich das Suchwort über die Maske zu steuern z.B mit einem Eingabefeld.

suchwort = TextBox10.Value oder sowas ähnliches?!!

zu 2 --> der Button soll nur die Werte die mit dem Button 1 rausgefunden wurde überschreiben also aus "05/07" soll er z.B "Verarbeitet" machen.

Danke im Voraus

mfg

Antwort 3 von coros vom 15.05.2019, 12:02 Options

Hallo delium,

im Verzeichnis "C:\Test\" liegen nur Exceldateien?
Diese Exceldateien enthalten alle das Tabellenblatt "Eingabe"?
In jeder der Dateien steht etwas in Spalte X?


Wenn das Suchkriterium in einer Textbox steht, so muss die Zeile

[b]SearchKrit = "05/07"[/b]


so

[b]SearchKrit = TextBox10.Text[/b]


abgeändert werden.

Zu 2.: Folgt später.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 4 von delium vom 15.05.2019, 12:05 Options

Hallo oliver

im Verzeichnis "C:\Test\" liegen nur Exceldateien?
--> Ja nur Exceldateien

Diese Exceldateien enthalten alle das Tabellenblatt "Eingabe"?
--> Ja

In jeder der Dateien steht etwas in Spalte X?
--> nein nicht immer.

gruss

Antwort 5 von coros vom 15.05.2019, 12:26 Options

Hallo delium,

es liegt daran, dass teilweise in Spalte X nichts steht. Was steht in den anderen Spalten. Gibt es eine Spalte, die Daten enthält bis zu der Zeile, in der auch in Spalte X nach dem Kriterium gesucht werden soll? Wenn ja, welche ist das?

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 6 von delium vom 15.05.2019, 12:44 Options

Hallo Olliver


Die Spalten von O bis X können evtl. die gesuchte Werte enthalten aber bei der Suche sollten Sie natürlich nicht auftauchen. Die andere Spalten haben verschiedene Überschriften z.B Bezeichnung, art, kennzahl etc.

PS:
Die Zellen mit den Werten, die für mich relevant sind bloß von X24 bis X33.

mfg

Antwort 7 von coros vom 15.05.2019, 12:53 Options

Hallo delium,

kopiere nachfelgende Codes in das VBA-Projekt Deiner UserForm.

[b]Option Explicit
Const Verzeichnis = "C:\Test\"

Private Sub CommandButton1_Click()
Dim Dateityp$
Dim i As Integer
Application.ScreenUpdating = False
Dateityp = Dir(Verzeichnis & "\*.xls")
ListBox1.Clear
Do While Dateityp <> ""
GetObject (Verzeichnis & Dateityp)
For i = 24 To 33
If Workbooks(Dateityp).Sheets("Eingabe").Cells(i, 24) = TextBox10.Text Then
ListBox1.AddItem Dateityp
Exit For
End If
Next
Workbooks(Dateityp).Close False
Dateityp = Dir()
Loop
End Sub

Private Sub CommandButton2_Click()
Dim i As Integer, j As Integer
For i = 0 To ListBox1.ListCount - 1
GetObject (Verzeichnis & ListBox1.List(i, 0))
For j = 24 To 33
If Workbooks(ListBox1.List(i, 0)).Sheets("Eingabe").Cells(j, 24) = TextBox10.Text Then
Workbooks(ListBox1.List(i, 0)).Sheets("Eingabe").Cells(j, 24) = "Verarbeitet"
Windows(ListBox1.List(i, 0)).Visible = True
Workbooks(ListBox1.List(i, 0)).Close True
Exit For
End If
Next
Next
End Sub[/b]


Das sollte jetzt funktionieren. Der Suchbegriff muss in TextBox10 stehen. Wenn nicht, den Code entsprechend abändern.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 8 von delium vom 15.05.2019, 13:47 Options

Hallo Oliver

Vielen Dank es funktioniert super..:-) bis auf paar Kleinigkeiten (zu mindest bei mir)

1) Unterordner werden nicht durchgesucht.
2) Der 2. Button markiert nur den ersten Wert. Rest wird nicht markiert.

ps: kann ich den Suchfeld erweitern z.B
anstatt
For i = 24 To 33 --> For i = 20 To 50

dementsprechend ändern sich die if Zeilen auch natürlich.

mfg

Antwort 9 von delium vom 15.05.2019, 13:48 Options

Hallo Oliver

Vielen Dank es funktioniert super..:-) bis auf paar Kleinigkeiten (zu mindest bei mir)

1) Unterordner werden nicht durchgesucht.
2) Der 2. Button überschreibt nur den ersten Wert. Rest bleibt weiterhin z.B "05/07".

ps: kann ich den Suchfeld erweitern z.B
anstatt
For i = 24 To 33 --> For i = 20 To 50

dementsprechend ändern sich die if Zeilen auch natürlich.

mfg

Antwort 10 von coros vom 15.05.2019, 14:02 Options

Hallo delium,

schreibe bitte mal, wass Du als Endresultat erwartest. Von Unterordner stand nirgends etwas. Außerdem stand

Zitat:
einem bestimmten Wert


und nicht, dass der Wert mehrfach in einer Datei vorkommt und überschrieben werden soll.

Außerdem weiß ich nicht, was Du mit der Erweiterung des Suchfeldes meinst?!?

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 11 von Delium vom 15.05.2019, 14:17 Options

Hallo Olliver

Tut mir leid wenn ich mich nocht so klar ausgedruckt habe..

Also der Ordner "Test" hat mehrere Unterordner. Jeder Unterordner hat Excel-Mappen die gleich aufgebaut sind z.B alle haben die Tabelle = "Eingabe" und alle haben die Spalte X mit Werten gefüllt, die Werte können mehrmals vorkommen untereinander usw.

mit deinem Code wird nur der erste gefundene Wert überschrieben wenn ich denn "Button 2" mehrmals drucke werden die anderen Werten natürlich auch überschrieben.(wäre einfacher mit einem Click alle Zellen mit "Verarbeitet" zu überschreiben)

Suchfeld erweitern:
Es kann sein dass in Zukunft eine oder zwei Zeilen dazu kommt die durchsucht werden soll d.h
Spalte X Zeile 24 bis Spalte X Zeile 40

Meine Frage war ob dies durch ändern der Variablen möglich ist?

mfg

Antwort 12 von Delium vom 15.05.2019, 14:27 Options

Zitat:
...(wäre einfacher mit einem Click alle Zellen mit "Verarbeitet" zu überschreiben)


Ich meine alle Zellen die gesuchten Wert enthalten.

Beispiel:
Ich suche "05/07"

als Ergebnis werden mehrere Excel-Mappen angezeigt.

mit dem "Button 2" alle Zellen die den Wert "05/07" haben werden überschrieben.

mfg

Antwort 13 von coros vom 15.05.2019, 14:41 Options

Hallo delium,

damit alle Werte einer Datei, die dem Suchkriterium entsprechen, überschrieben werden, lösche in dem Ereignis "CommandButton2_Click" den Befehl

[b]Exit For[/b]


der nach unter Befehl "Workbooks(ListBox1.List(i, 0)).Close True" steht heraus. Dann werden alle Werte überschrieben.

Zum Erweitern des Bereiches musst Du die Zaheln 24 bzw. 33 ändern. Diese Zeilen sagen aus, dass die Prüfung in Zeile 24 anfängt und nach Zeile 33 beendet ist.

Das mit den Unterverzeichnissen muss ich nachreichen. Wird aber erst heute Abend was, da ich jetzt weg muss (Termin). Ich melde mich dann wieder.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 14 von Delium vom 15.05.2019, 14:43 Options

Hallo Oliver

Danke nochmal für den riesen Beitrag..:)


gruss

Antwort 15 von delium vom 15.05.2019, 15:55 Options

Hallo Oliver

wenn ich "Exit For" lösche kommt wieder die Laufzeitfehler:9

"index ausserhalb des gültigen Bereichs"
beim debuggen springt er auf die Zeile

If Workbooks(ListBox1.List(i, 0)).Sheets("Eingabe").Cells(j, 24) = TextBox1.Text Then

für den Unterordner suche habe ich einen Code gefunden aber konnte es nicht einbauen:

With Application.FileSearch
ChDir Pfad
.LookIn = Pfad
.SearchSubFolders = True
.FileType = msoFileTypeExcelWorkbooks

mfg

Antwort 16 von coros vom 15.05.2019, 17:20 Options

Hallo delium,

hier nun wie versprochen den Code, der alle Dateien in einem Verzeichnis und deren Unterverzeichnisse öffnet, nach dem Kriterium aus TextBox10 prüft und bei Betätigen des 2. Buttons die Daten überschreibt.
Kopiere nachfolgenden Codes wieder in das VBA-Prpjekt der UserForm.

[b]Option Explicit
Dim Obj As Object
Dim AnzDateien As Object
Dim Durchläufe As Object
Dim Dateityp As Object

Const Verzeichnis = "C:\Test\"

Private Sub CommandButton1_Click()
ListBox1.Clear
Prüfung_start
End Sub

Private Sub CommandButton2_Click()
Dim i As Integer, j As Integer
For i = 0 To ListBox1.ListCount - 1
Workbooks.Open (ListBox1.List(i, 0))
For j = 24 To 33
If ActiveWorkbook.Sheets("Eingabe").Cells(j, 24) = TextBox10.Text Then
ActiveWorkbook.Sheets("Eingabe").Cells(j, 24) = "Verarbeitet"
End If
Next
ActiveWorkbook.Close True
Next
End Sub

Private Sub Prüfung_start()
Set Obj = CreateObject("Scripting.FileSystemObject")
Set AnzDateien = Obj.getfolder(Verzeichnis)
Prüfung
End Sub

Private Sub Prüfung()
Application.ScreenUpdating = False
Dim i As Integer
For Each Dateityp In AnzDateien.Files
If Right(Dateityp.Name, 4) = ".xls" Then
Workbooks.Open (Dateityp.Path)
For i = 24 To 33
If ActiveWorkbook.Sheets("Eingabe").Cells(i, 24) = TextBox10.Text Then
ListBox1.AddItem Dateityp.Path
Exit For
End If
Next
ActiveWorkbook.Close True
End If
Next

For Each Durchläufe In AnzDateien.subfolders
Set AnzDateien = Durchläufe
Prüfung
Next
End Sub[/b]


MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du
ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 17 von delium vom 15.05.2019, 20:09 Options

Hallo Oliver

Es läuft einfach PERFEKT..:)

Danke

mfg

Antwort 18 von AdamFrank vom 22.05.2019, 21:22 Options

Hallo Oliver

Ich habe ein ähnliches Problem.. Kannst du mir da evtl. helfen wäre nett..

Ich habe in mehreren Ordnern .html dateien
Mit einem Makro möchte ich

1) ein Ordner auswählen können
2) und in diesem Ordner sämtliche .html dateien durchsuchen
3) falls in einer der Dateien der Begriff </Table> mehr als 3 mal vorkommt,
4) soll das Makro nach dem 4. </Tabel> bis auf das vor letzte die folgende Zeile einfügen
"<h3 style="page-break-before:always"></h3>"

Die .html dateien haben ca. 3 bis 20 Tabellen

Bsp. Html Datei:

<HTML>
<HEAD>
</HEAD>

<TABLE >
</TABLE>
-----> Hier nicht

<TABLE >
</TABLE>
-----> Hier nicht

<TABLE >
</TABLE>
-----> Ab Hier <h3 style="page-break-before:always"></h3>

<TABLE >
</TABLE>
-----> Hier <h3 style="page-break-before:always"></h3>


<TABLE >
</TABLE>
-----> und Hier <h3 style="page-break-before:always></h3>

<TABLE >
</TABLE>
-----> Hier nicht

</BODY>
</HTML>

Danke im Voraus.

mfg Adam

Ähnliche Themen

In Listbox richitgen Eintrag aus DB eintragen
Catze81  22.03.2007 - 97 Hits -

listbox ohne dubletten
schnallgonz  16.05.2007 - 341 Hits - 2 Antworten

Excel VBA Übernahme aus Listbox
voodoo-burner  25.07.2007 - 144 Hits - 1 Antwort

ListBox wird nicht aktualisiert
Seradest  04.09.2007 - 58 Hits -

VBA - Problem mit Listbox
blaueled  14.10.2007 - 94 Hits - 1 Antwort

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026