Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
876to880
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
876to880
876to880
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

sverweis per VBA

sverweis per VBA
15.06.2007 09:05:00
rbunten
Hallo zusammen,
habe nachfolgenden sverweis:
=WENN(ISTNV(SVERWEIS(A8; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3;FALSCH) ) ;"0,00€";(SVERWEIS(A8; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3;FALSCH) ) )
1) Dieser sverweis sollte nun in einem Makro laufen, damit diese Formel nicht mehr im Tabellenblatt zu sehen ist.
2) Die Pfadangabe sollte variabel sein
Ordner = mai 07 (sollte variabel sein und über die Zelle A1 gesteuert werden)
Datei = JE 05.07 (sollte variabel sein und über die Zelle A2 gesteuert werden)
Kann mir da jemand helfen, bin in VBA sind so gut.
Gruß
Ralle

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: sverweis per VBA
15.06.2007 10:40:00
Chaos
Servus,
ich arbeite eher weniger mit SVerweisen, aber wenn ich das richtig verstanden habe:
Du gibst in A8 den Suchwert ein und läßt diesen Wert in der Quelldatei in der Tabelle A9:G88 in Spalte1 suchen. Bei Treffer gibt er dann den Wert aus Spalte 3 zurück, bei keinem Treffer soll 0,00 Euro schreiben.
Ist das so richtig oder was macht der Sverweis sonst?
Gruß
Chaos

AW: sverweis per VBA
15.06.2007 21:29:00
Daniel
Hi
wenn du Excelfunktionen direkt in VBA verwenden willst, geht das über WORKSHEETFUNCTION.xxx
danach kannst du die Excel-Funktionen (in Englischer Schreibweise) auch in VBA verwenden, mit den gleichen Pametern wie in Excel, allerdings müssen Zellbezüge als RANGE-Objekte eingegeben. (bei dir also WORKSHEETFUNCTION.VLOOKUP(...)
das wird bei deiner Funktion allerdings etwas aufwendig.
ich würde daher folgendermassen vorgehen:
1. Formel per VBA in eine Zelle reinschreiben (mit RANGE("C1").formulalocal=""
2. die Zelle mit dem Ergebnis auslesen
3. Zelle wieder löschen
du kannst den Formeltext dabei auch aus mehreren Teilen als String zusammensetzten, also in etwa so:

Formeltext = "=WENN(ISTNV(SVERWEIS(A8; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\"
Formeltext = Formeltext &" Range("a1").value & "\[" & range("a2").value
Formeltext = Formeltext & ".xls]GESAM'!$A$9:$G$88;3;FALSCH) ) ;""0,00€"";(SVERWEIS(A8; 'C: _
\Dokumente und Einstellungen\Desktop\TXT-Dateien\"
Formeltext = Formeltext & Range("a1").value & "\[" & range("a2").value
Formeltext = Formeltext &  ".xls]GESAM'!$A$9:$G$88;3;FALSCH) ) )"
Range("B1").formulalocal = Formeltext
xxx = Range("B1").text
range("B1").clear


zu beachten ist dabei, daß alle Anführungszeichen, die direkt zur Excelfformel gehören, doppelt eingegeben werden müssen, damit Excel sie von den Anf.Zeichen, die das Textende eines Strings kennzeichnen, unterscheiden kann.

Anzeige
AW: sverweis per VBA
18.06.2007 15:26:31
rbunten
... das ist genau richtig!!!
Hoffe Du kannst mir helfen!!!
Gruß
Ralle

AW: sverweis per VBA
18.06.2007 17:37:00
Chaos
Servus Ralle,
gibts in Spalte drei eine Überschrift? Wenn ja, welche?
Kann man schon machen.
Gruß
Chaos

AW: sverweis per VBA
19.06.2007 09:37:12
rbunten
Hi Chaos,
ja, es gibt eine Überschrift = Planwert.
Ich habe Dir mal zwei Dateien hochgeladen (Datei1.xls und JE 05.07.xls).
Die Datei1.xls ist die Ausgangsdatei, hier soll der sverweis durchgeführt werden. Der Suchwert steht in der Spalte A6:A10. Dieser soll in der Quelldatei JE 05.07.xls in der Tabelle GESAM A9:G88 in Spalte 1 gesucht werden. Bei Treffer soll dann der Wert aus Spalte 3 zurückgegeben werden, bei keinem Treffer soll 0,00 Euro erscheinen. Das ganze soll wie gesagt per Makro ablaufen, damit der sverweis nicht in der Zelle steht sonder nur der Wert.
Die Pfadangabe für die Quelldatei soll über die Zellen A1 und A2 variabel sein.
=Wenn(istnv(sverweis(A6; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\A1\[A2]GESAM'!$A$9:$G$88;3;falsch) );"";(sverweis(A6; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\A1\[A2]GESAM'!$A$9:$G$88;3;falsch) ))
A1 = Ordner (variabel)
A2 = Datei (variabel)
Ich hoffe ich konnte dir mein Problem etwas anschaulicher darstellen und Du kannst mir bei meinem Probelm helfen.
Gruß
Ralle

Anzeige
hier die fehlenden Dateien!!!
19.06.2007 09:49:51
rbunten
Datei1.xls =

Die Datei https://www.herber.de/bbs/user/43369.xls wurde aus Datenschutzgründen gelöscht


Je 05.07.xls = https://www.herber.de/bbs/user/43370.xls
Gruß Ralle
Sorry!!!

AW: hier die fehlenden Dateien!!!
19.06.2007 11:42:00
Chris
Servus Ralle,
wo sollen die Daten eigentlich erscheinen, gleiche zelle wie ausgelesen oder z.B. in B1?
gruß chaos

AW: hier die fehlenden Dateien!!!
rbunten
Hallo chaos,
die Daten sollen in der Spalte C erscheinen.
Also z.B. Suchkreterium in A1 und Ausgabe der Daten in C1.
Gruß
Ralle

Anzeige
AW: hier die fehlenden Dateien!!!
19.06.2007 16:01:00
Chris
servus ralle,
ich bin mir nicht ganz sicher, was du wirklich willst. Willst du jetzt nur die Werte von A6 bis A10(Suchwert) suchen und die Werte dann entsprechend in C1 -C4 ausgeben oder willst du das für jede Zelle in spalte a machen?
Ich hab das entsprechend deiner Vorgabe so gelöst:
A1 = Ordner für den Pfad
A2 = Dateiname, ohne .xls
Das Makro öffnet die entsprechende Datei sucht den Wert aus A6 der Zieldatei in Tabelle A8:A88 der Quelldatei, bei Treffer gibt es den Wert in C1 aus, bei keinem Treffer, kommt 0,00 in der Zieldatei.
Also mal nur für A6.
Wenn du was anderes willst, dann musst du das genauer spezifizieren. Den Pfad musst du natürlich noch anpassen.
Alt+F11, u.s.w.
hier mal ein Bsp.:
https://www.herber.de/bbs/user/43382.xls
Gruß
Chaos

Anzeige
AW: hier die fehlenden Dateien!!!
19.06.2007 16:23:00
Chaos
Servus Ralle,
für jede zeile (A6:A10), hab ich es jetzt so gelöst:

Sub suche1()
Dim Wert, wert1
Dim i As Byte
Dim ordner As String, datei As String, n As String, a As String
Application.DisplayAlerts = False
On Error Resume Next
n = ActiveWorkbook.Name
ordner = ActiveWorkbook.Sheets("Tabelle1").Range("A1").Value
datei = ActiveWorkbook.Sheets("Tabelle1").Range("A2").Value
For i = 6 To 10
Wert = ActiveWorkbook.Sheets("Tabelle1").Range("A" & i).Value
Workbooks.Open Filename:="C:\Documents and Settings\stadter\Desktop\" & ordner & "\" & datei & " _
.xls"
With ActiveWorkbook
ActiveWorkbook.Sheets("GESAM").Range("B1").ClearContents
ActiveWorkbook.Sheets("GESAM").Range("A8:A88").Select
Selection.Find(What:=Wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  Wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "" Then
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "0,00 €"
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets(" _
GESAM").Range("B1").Value
ActiveWorkbook.Close
End With
Next i
Application.DisplayAlerts = True
End Sub


geht jetz über die For-Schleife von Zeile 6 bis 10 und schreibt die entsprechenden Werte in Spalte C daneben.
Vielleicht trifft es das noch besser.
Ansonsten weiß ich auch nicht genau, ob du "das" willst.
Gruß
Chaos

Anzeige
hier die fehlenden infos!!!
19.06.2007 17:20:00
rbunten
Hallo Chaos,
erstmal vielen Dank für Deine Bemühungen.
Ich versuche es nochmals zu erklären:
Habe eine Datei "Zusammenfassung.xls" Das Suchketerium sind die Werte aus der Spalte A9 bis A100.
Nun soll in der Quelldatei JE 05.07.xls dieses Suchkreterium in der Spalte A9 bis A100 gesucht werden. Wird dieser Wert gefunden solle der dazugehörige Wert aus der Spalte C in die dazugehörige Spalte C der Datei Zusammenfassung.xls eingetragen werden. Dies soll für alle Werte in der Spalte A der Datei Zusammenfassung gemacht werden.
Die Pfadangabe für die Quelldatei soll über die Zellen B1 und B2 variabel sein.
=Wenn(istnv(sverweis(A6; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\B1\[B2]GESAM'!$A$9:$G$88;3;falsch) );""; (sverweis(A6; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\B1\[B2]GESAM'!$A$9:$G$88;3;falsch) ))
B1 = Ordner (variabel)
B2 = Datei (variabel)
Anbei nochmals zwei Dateien:
https://www.herber.de/bbs/user/43389.xls
https://www.herber.de/bbs/user/43390.xls
Ich hoffe ich konnte Dir damit weiterhelfen und Du hast noch Lust mein Problem zu lösen.
Gruß
ralle

Anzeige
AW: hier die fehlenden infos!!!
19.06.2007 20:49:56
Chaos
Servus,
warum nicht gleich so? Sind ja schon fast am Ziel:

Sub suche1()
Dim Wert, wert1
Dim i As Byte
Dim ordner As String, datei As String, n As String, a As String
Application.DisplayAlerts = False
On Error Resume Next
n = ActiveWorkbook.Name
ordner = ActiveWorkbook.Sheets("Tabelle1").Range("B1").Value
datei = ActiveWorkbook.Sheets("Tabelle1").Range("B2").Value
For i = 9 To 100
Wert = ActiveWorkbook.Sheets("Tabelle1").Range("A" & i).Value
Workbooks.Open Filename:="C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\" & ordner & "\" &  _
datei & " _
.xls"
With ActiveWorkbook
ActiveWorkbook.Sheets("GESAM").Range("B1").ClearContents
ActiveWorkbook.Sheets("GESAM").Range("A9:A100").Select
Selection.Find(What:=Wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  Wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "" Then
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "0,00 €"
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets("  _
_
GESAM").Range("B1").Value
ActiveWorkbook.Close
End With
Next i
Application.DisplayAlerts = True
End Sub


Das Makro, macht genau das.
1. nimmt den Wert aus Zelle A i (von 9 bis 100) , sucht diesen in der anderen Datei und schriebt ihn, wenn vorhanden in die Zelle (Spalte C) neben den Suchwert.
Wenn der Wert nicht vorhanden ist, dann steht da 0,00 Euro (als Text). Willst du das als Zahl muß die Zelle B1 in der Quelldateals Währung formatiert werden und das ="0,00" in =0 umgewandelt werden.
Habe das getestet und das funktioniert auch.
oder, wenn die Zieldatei immer Zusammenfassung.xls heißt, dann auch so:


Sub suche1()
Dim Wert, wert1
Dim i As Byte
Dim ordner As String, datei As String, n As String, a As String
Application.DisplayAlerts = False
On Error Resume Next
n = ActiveWorkbook.Name
ordner = Workbooks("Zusammenfassung.xls").Sheets("Tabelle1").Range("B1").Value
datei = Workbooks("Zusammenfassung.xls").Sheets("Tabelle1").Range("B2").Value
Workbooks.Open Filename:="C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\" & ordner & "\" &  _
datei & " _
.xls"
For i = 9 To 100
Wert = Workbooks("Zusammenfassung.xls").Sheets("Tabelle1").Range("A" & i).Value
With ActiveWorkbook
ActiveWorkbook.Sheets("GESAM").Range("B1").ClearContents
ActiveWorkbook.Sheets("GESAM").Range("A9:A100").Select
Selection.Find(What:=Wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  Wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "" Then
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "0,00 €"
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets("  _
_
GESAM").Range("B1").Value
End With
Next i
Application.DisplayAlerts = True
End Sub


Dann sparst du dir das ständige Öffnen und schließen der Quelldatei. Viel Spaß. Falls was unverständlich ist, kannst du gerne weiterfragen.
Gruß
Chaos

Anzeige
AW: hier die fehlenden infos!!!
20.06.2007 09:05:25
rbunten
Hallo Chaos,
vielen vielen Dank für Deine Hilfe. Du bist echt klasse. Es funktioniert super.
Habe aber noch eine Frage:
Dieses Makro wird natürlich immer von A9:A100 ausgeführt. Schön wäre es wenn dieser Bereich dynamisch wäre, also nur soweit geht wie auch Werte in der Spalte A vorhanden sind.
Wenn in Spalte A das Suchkreterium steht würde ich normaler weise in die Spalte C den sverweis schreiben:
Zelle C9:
=WENN(ISTNV(SVERWEIS($A9; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3; FALSCH));"0,00€";(SVERWEIS($A9; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3; FALSCH)))
Zelle C10:
=WENN(ISTNV(SVERWEIS($A10; 'C:\Dokumente und Einstellungen\Bunten\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88; 3;FALSCH));"0,00€";(SVERWEIS($A10; 'C:\Dokumente und Einstellungen\Bunten\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88; 3;FALSCH)))
usw.
Dieses würde ich jetzt einmalig für die ganze Tabelle Zusammenfassung machen.
Um jetzt nicht die ganzen Sverweise neu zu schreiben, wäre es schön, wenn ich zwei Zellen hätte in der ich den
Order = mai 07 und die
Datei = JE 05.07.xls
variabel gestalten könnte!
ISt soetwas möglich?
Gruß
ralle

Anzeige
AW: hier die fehlenden infos!!!
20.06.2007 11:28:00
Chaos
Servus Ralle,
war mir klar, dass du sowas willst. Ist natürlich ein bisschen aufwendiger, aber ich schau mal, wie sich das realisieren läßt.
Was du jetzt mit Ordner und Datei als variabel meinst, versteh ich allerdings jetzt nicht. Du gibst doch in B1 den Ordner und in B2 die Datei ein. Ist also schon variabel, das Makro öffnet die Datei (B2), die im Ordner(B1) steht. Oder willst du deine Sverweise aktualisieren.
Gruß
Chaos

AW: hier die fehlenden infos!!!
20.06.2007 11:46:00
Chaos
Servus Ralle,
doch nicht so aufwendig!
nur noch beschriebene Zellen, allerdings nur für A9:A100.

Sub suche1()
Dim Wert, wert1
Dim i As Byte
Dim ordner As String, datei As String, n As String, a As String
Application.DisplayAlerts = False
On Error Resume Next
n = ActiveWorkbook.Name
ordner = ActiveWorkbook.Sheets("Tabelle1").Range("B1").Value
datei = ActiveWorkbook.Sheets("Tabelle1").Range("B2").Value
For i = 9 To 100 ' oder i = 9 To 65536
Wert = ActiveWorkbook.Sheets("Tabelle1").Range("A" & i).Value
If Range("A" & i).Value  "" Then
Workbooks.Open Filename:="C:\Documents and Settings\stadter\Desktop\" & ordner & "\" & datei & " _
.xls"
With ActiveWorkbook
ActiveWorkbook.Sheets("GESAM").Range("B1").ClearContents
ActiveWorkbook.Sheets("GESAM").Range("A9:A100").Select ' oder ("A9:A65536")
Selection.Find(What:=Wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  Wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "" Then
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = 0
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets(" _
GESAM").Range("B1").Value
ActiveWorkbook.Close
End With
End If
Next i
Application.DisplayAlerts = True
End Sub


Wenn du den Bereich von A9:A100 erweitern willst (dynamisch), dann schreib einfach 65536 und zwar sowohl für i, als auch für den abzusuchenden Bereich.
Dauert dann natürlich extrem lange.
Gruß
Chaos

Anzeige
AW: hier die fehlenden infos!!!
20.06.2007 13:00:00
rbunten
Hi Chaos,
ist es denn möglich meine bstehenden sverweis um die variablen ORDNER und DATEI zu aktualisieren?
Bei diesen sverweisen wird auf die Datei JE 05.07.xls zugegriffen
Zelle C9:
=WENN(ISTNV(SVERWEIS($A9; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3; FALSCH));"0,00€";(SVERWEIS($A9; 'C:\Dokumente und Einstellungen\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88;3; FALSCH)))
Zelle C10:
=WENN(ISTNV(SVERWEIS($A10; 'C:\Dokumente und Einstellungen\Bunten\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88; 3;FALSCH));"0,00€";(SVERWEIS($A10; 'C:\Dokumente und Einstellungen\Bunten\Desktop\TXT-Dateien\mai 07\[JE 05.07.xls]GESAM'!$A$9:$G$88; 3;FALSCH)))
usw.
Ich möchte aber gerne das der sverweis bei bedarf auch auf andere Dateien zugreift die geanu so aufgebaut sind, nur einen anderen Namen haben.
Gruß
ralle

AW: hier die fehlenden infos!!!
20.06.2007 13:50:00
Chaos
Servus ralle,
also meines Wissens geht das nicht. aber ich kann dir ein entsprechendes Makro zum Abändern des Sverweises schreiben:

Sub suchen_ersetzen()
Dim Ordner As String, datei As String, Ordnerneu As String, dateineu As String
Ordner = InputBox("zu ersetzender Ordner ?")
datei = InputBox(" zu ersetzende Datei?")
Ordnerneu = InputBox("neuer Ordner?")
dateineu = InputBox("neue Datei?")
Cells.Replace What:=Ordner & "\" & "[" & datei & "]", Replacement:=Ordnerneu & "\" & "[" &  _
dateineu & "]", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub


das in die jeweilige Arbeitsmappe einfügen, die du ändern willst, dann werden alle Bezüge in den Zellen entsprechend geändert. Geht aber auch nur für den gleichen Grundpfad:
C:\Test\xy\Ordner\Datei für das geht es nicht: C:\Test\xy\Datei
Du darfst dich allerdings nicht vertippen, sonst findet Excel die Datei nicht, aber das kennst du ja.
Gruß
Chaos

AW: hier die fehlenden infos!!!
20.06.2007 14:12:00
rbunten
Hi chaos,
ich muss dich leider schon wieder belästigen. Ich bin irgendwie zu doof heute.
Ich habe Dir nochmal eine Beispieldatei hochgeladen mit meinen sverweisen. Kannst Du mir bitte sagen wo ich da das Makro einfügen muss. Und wo kann ich die Eingabe für die Variablen Ordner und Datei vornehmen?

Die Datei https://www.herber.de/bbs/user/43428.xls wurde aus Datenschutzgründen gelöscht


Gruß
Ralle
PS:Man ist dass heute warm!!!!

AW: hier die fehlenden infos!!!
20.06.2007 15:11:39
Chaos
naja,
die Hitze schlägt aufs Hirn, oder ?
Spaß beiseite. Habe dir das Makro in Tabelle1 hinterlegt. Wenn du das makro startest wirst du nach dem aktuellen Ordner, dann nach der aktuellen Datei im Ordner gefragt, dann nach dem neuen ordner und der neuen Datei.
Das sind 4 InputBoxen nacheinander. Es gibt also keine zellen, wo man was einträgt.
Als kleine Anmerkung von mir, du kannst das auch über suchen und ersetzen machen, was anderes macht das Makro eh nicht.
und mir ist aufgefallen, dass die tabelle, auf die du verweist nicht immer GESAM heißt, sondern hier z.B. ESAMT.
Das muss auch geändert werden, sonst gibt es Probleme!!!
Das macht auch mit dem anderen Makro Probleme!!!
Oder du willst die Tabelle auch immer ändern, dann kommt bei dem Makro das raus.

Sub suchen_ersetzen()
Dim Ordner As String, datei As String, Ordnerneu As String, dateineu As String, tabelle As  _
String, tabelleneu As String
Ordner = InputBox("zu ersetzender Ordner ?")
datei = InputBox(" zu ersetzende Datei?")
tabelle = InputBox("zu ersetzende Tabelle?")
Ordnerneu = InputBox("neuer Ordner?")
dateineu = InputBox("neue Datei?")
dateineu = InputBox("neue Datei?")
tabelleneu = InputBox("neue Tabelle?")
Cells.Replace What:=Ordner & "\" & "[" & datei & "]" & tabelle, Replacement:=Ordnerneu & "\" & " _
[" & _
dateineu & "]" & tabelleneu, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub


Hier hab ich dir die Möglichkeit eingebaut, dass du die tabelle auch noch angeben kannst (zelle B3, nur tabellennamen, also z.B.: GESAM, oder ESAMT)


Sub suche1()
Dim wert, wert1
Dim i As Byte, s As Byte, t As Byte
Dim ordner As String, datei As String, n As String, tabelle As String
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Sheets("Tabelle1").Range("A65536").End(xlUp).Offset(0, 0).Select
s = ActiveCell.Row
n = ActiveWorkbook.Name
ordner = ActiveWorkbook.Sheets("Tabelle1").Range("B1").Value
datei = ActiveWorkbook.Sheets("Tabelle1").Range("B2").Value
tabelle = ActiveWorkbook.Sheets("Tabelle1").Range("B3").Value
For i = 9 To s
wert = ActiveWorkbook.Sheets("Tabelle1").Range("A" & i).Value
If Range("A" & i).Value  "" Then
Workbooks.Open Filename:="C:\Documents and Settings\stadter\Desktop\" & ordner & "\" & datei & " _
.xls"
With ActiveWorkbook
ActiveWorkbook.Sheets(tabelle).Range("B1").ClearContents
ActiveWorkbook.Sheets(tabelle).Range("A65536").End(xlUp).Offset(0, 0).Select
t = ActiveCell.Row
ActiveWorkbook.Sheets(tabelle).Range("A9:A" & t).Select
Selection.Find(What:=wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets(tabelle).Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets(tabelle).Range("B1").Value = "" Then
ActiveWorkbook.Sheets(tabelle).Range("B1").Value = 0
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets( _
tabelle).Range("B1").Value
ActiveWorkbook.Close
End With
End If
Next i
Application.DisplayAlerts = True
End Sub


Du musst natürlich "Tabelle1" durch deinen "Tabellennamen" ersetzen.
Die mappe ist ohne tabellenangabe:
https://www.herber.de/bbs/user/43437.xls
Gruß
Chaos

AW: hier die fehlenden infos!!!
20.06.2007 12:57:00
Chaos
Servus Ralle,
und hier jetzt das Endprodukt:

Sub suche1()
Dim wert, wert1
Dim i As Byte, s As Byte, t As Byte
Dim ordner As String, datei As String, n As String, a As String
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Sheets("Tabelle1").Range("A65536").End(xlUp).Offset(0, 0).Select
s = ActiveCell.Row
n = ActiveWorkbook.Name
ordner = ActiveWorkbook.Sheets("Tabelle1").Range("B1").Value
datei = ActiveWorkbook.Sheets("Tabelle1").Range("B2").Value
For i = 9 To s
wert = ActiveWorkbook.Sheets("Tabelle1").Range("A" & i).Value
If Range("A" & i).Value  "" Then
Workbooks.Open Filename:="C:\Documents and Settings\stadter\Desktop\" & ordner & "\" & datei & " _
.xls"
With ActiveWorkbook
ActiveWorkbook.Sheets("GESAM").Range("B1").ClearContents
ActiveWorkbook.Sheets("GESAM").Range("A65536").End(xlUp).Offset(0, 0).Select
t = ActiveCell.Row
ActiveWorkbook.Sheets("GESAM").Range("A9:A" & t).Select
Selection.Find(What:=wert, After:=ActiveCell, LookIn:=xlValues, LookAt _
:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
:=False).Activate
If ActiveCell.Value  wert Then
GoTo weiter
Else
ActiveCell(1, 3).Select
wert1 = ActiveCell.Value
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = wert1
GoTo weiter
End If
End With
weiter:
With ActiveWorkbook
If ActiveWorkbook.Sheets("GESAM").Range("B1").Value = "" Then
ActiveWorkbook.Sheets("GESAM").Range("B1").Value = 0
End If
End With
With Workbooks(n)
Workbooks(n).Sheets("Tabelle1").Range("C" & i).Value = Workbooks(datei & ".xls").Sheets(" _
GESAM").Range("B1").Value
ActiveWorkbook.Close
End With
End If
Next i
Application.DisplayAlerts = True
End Sub


sucht letzte Zeile in A im Ziel(Zusammenfassung), führt das Makro von Zeile 9 bis letzte Zeile aus und der Clou:
das Makro sucht nur in vorhandenen Daten in der Quelldatei, also wenn A9 bis A20 beschrieben ist wird auch nur in A9 bis A20 gesucht, vorausgesetzt du hast in Spalte A nicht irgendwelche Formeln stehen unter den Werten.
Gruß
Chaos

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige