Microsoft Excel

Herbers Excel/VBA-Archiv

Verknüpfungen verschiedener Mappen

Betrifft: Verknüpfungen verschiedener Mappen von: Rico
Geschrieben am: 13.09.2004 08:54:52

Guten Morgen liebe Experten


ich habe mal so eine Frage die mir übers Wochenende gekommen ist;

Zuerst muss ich aber die Voraussetzungen erklären die meiner Idee zugrunde liegen:

1. Auf dem Server (vom Client aus aufm Laufwerk "G") liegen Excel-Mappen gespeichert die per VBA automatisch den Namen des Auftrages bekommen (sprich Auftrags-Nummern / "032433" zum Beispiel)

2. Diese Auftrags-Mappen beinhalten unter anderem zwei Kalkulationsblätter in denen verschiedene Werte intresant für andere Excel-Mappen sind.

NUN meine Idee:

Ich würde in einer Excel-Mappe ein Worksheet erstellen und dort in Spalte A die Auftrags-Nummer eingeben sodass zum Beispiel in Spalte B dann die Info aus der jeweiligen Arbeitsmappe automatisch "gesogen" und eingefügt wird.

Genauer gesagt: In der Mappe "Übersicht" geb ich in A1 zum Beispiel die Auftrags-Nummer "032433" ein. Nun sollte in B1 der Wert der Zelle G14 aus der Mappe "032433" die aufm Server gespeichert ist (in dieser Mappe hat es etwa 10 Arbeitsblätter... die gewünschte Info stammt aus dem Blatt "Kalkulation")

Wenn ich alles aus einer Mappe entnehmen würde, könnte ich das ja theoretisch mit dem SVERWEIS machen... wie mach ich das aber, wenn die Quelldatei ständig ne andere ist?

Bin für jeden hilfreichen Tip dankbar...

Gruss Rico

  


Betrifft: AW: Verknüpfungen verschiedener Mappen von: WernerB.
Geschrieben am: 13.09.2004 09:29:15

Hallo Rico!

1 .Die nachstehende Funktion gehört in ein normales Standard-Modul.
2. Das nachstehende Macro gehört in das Modul des Tabellenblattes, in dem die Auftragsnummer ein- und der gesuchte Wert ausgegeben werden soll.

Noch zwei Anmerkungen zum Makro:
Den Pfad musst Du natürlich anpassen.
Die Syntax "R14C7" (= Row 14, Column 7; das entspricht der Zelladresse "G14") muss so eingehalten werden.



Function xl4Value(strParam As String) As Variant
xl4Value = ExecuteExcel4Macro(strParam)
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strSource As String
    If Target.Column <> 1 Then Exit Sub
    Range("B" & Target.Row).ClearContents
    If Target.Cells.Count <> 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    strSource = "'G:\TEMP\TRALALA\[" & Target.Text & ".xls]Kalkulation'!R14C7"
    Range("B" & Target.Row).Value = xl4Value(strSource)
End Sub

Viel Erfolg wünscht
WernerB.

P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !


  


Betrifft: Danke mal im Voraus.. Rückmeldung folgt... von: Rico
Geschrieben am: 13.09.2004 09:36:05

das ging ja schnell ;-)

danke im Voraus.. ich komm jetzt grad nicht dazu das zu testen... werd ich heute so schnell als möglich machen und Rückmeldung geben obs klappt.

Gruss Rico


  


Betrifft: ....geht nicht... was mach ich falsch?!? von: Rico
Geschrieben am: 13.09.2004 14:22:58

Hallo nochmals ;-)

habs jetzt reinkopiert und den Code folgendermassen angepasst:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strSource As String
    If Target.Column <> 1 Then Exit Sub
    Range("B" & Target.Row).ClearContents
    If Target.Cells.Count <> 1 Then Exit Sub
    If Target.Value = "" Then Exit Sub
    strSource = "'G:\Spezial\Auftrags-Dossiers\Aufträge\[" & Target.Text & ".xls]Kalkulation'!R5C2"
    Range("B" & Target.Row).Value = xl4Value(strSource)
End Sub



den Pfad hab ich aus der Eigenschaft der Datei kopiert und die Zelle ist B2 (die Zelle is verbunden mit C2.. ob das evt. zu Koruptionen führt? >> Fehlermeldung gibts keine).

Die Funktion hab ich in ein Modul beim Blatt wo ich die Eingabe mache reinkopiert und den Code bei beiden Blättern in ein normales Modul... aber es tut sich nix.. gibt aber auch keinen Fehler.

Ich kenn mich da ja nicht aus und weiss auch nicht ob Du die Idee verstanden hast die ich verfolge; die Angaben sind als Beispiel zu verstehen.. ich will diese Funktion in ein Gesamt-Projekt einarbeiten damit ich Excel-Blätter hab die als "Datenbank" dienen und andere die andere Funktionen haben und mit Infos aus den "Datenbanken" gespeist werden sollten mittels "Aufruf mit Auftrags-Nummer"... in der Art eines SVERWEISes...

tut mir leid, wenn ich mich nicht "fach-chinesisch" richtig ausdrücke.. ist halt schwierig als Laie die richtigen Beschreibungen zu finden.

Merci falls noch was kommen sollte an Tips...

Gruss Rico


  


Betrifft: AW: ....geht nicht... was mach ich falsch?!? von: WernerB.
Geschrieben am: 13.09.2004 15:54:13

Hallo Rico,

die Funktions-Code gehört in ein normales Standard-Modul;
das Makro ("Private Sub Worksheet_Change(ByVal Target As Range)") gehört in das Tabellenblatt-Modul.

Du hast als Quelladresse "R5C2" geschrieben, dies bedeutet "B5"; in Deiner Anfrage hast Du hierzu eine andere Angabe gemacht.

Verbundene Zellen im Zusammenhang mit Makros können Ärger verursachen; da mir Deine Datei nicht vorliegt, kann ich aber nicht beurteilen, ob das auch in Deinem Fall so ist.

Mit meinem Vorschlag kann man keinen SVERWEIS ersetzen, jedoch einen Wert aus einer geschlossenen Datei auslesen, wenn Pfad, Dateiname, Blattname und Zelladresse der geschlossenen Quelldatei bekannt sind.


Gruß
WernerB.


  


Betrifft: Erklärung... von: Rico
Geschrieben am: 13.09.2004 16:43:20

Hallo Werner

danke fürs Feedback.

Also dass mit dem geänderten Zellbezug war mir schon klar.. drum hab ichs auch geändert.

Frage: Als Pfad geb ich den Ordner an, in welchem die vielen verschiedenen Auftrags-Excel-Blätter gespeichert sind. oder?

merci und Gruss
Rico


  


Betrifft: AW: Erklärung... von: WernerB.
Geschrieben am: 14.09.2004 07:44:12

Hallo Rico,

in der nachstehenden Zeile müssen alle Weg-Informationen über die auszulesende Datei enthalten sein:

strSource = "'G:\Spezial\Auftrags-Dossiers\Aufträge\[" & Target.Text & ".xls]Kalkulation'!R5C2"

Pfad: G:\Spezial\Auftrags-Dossiers\Aufträge\
Dateiname: [" & Target.Text & ".xls] ("TargetText " ist die Eingabetext, den Du in einer beliebigen Zelle in der Spalte "A" Deiner Zieldatei machst)
Blattname: Kalkulation
Zelladresse: R5C2 (= "B5")

Mit der nachstehenden Anweisung werden diese Informationen an die Funktion übergeben, die den Wert ausliest; dieser Wert wird dann in die Spalte "B" Deiner Zieldatei in der selben Zeile eingetragen, in der Du in der Spalte "A" den Dateinamen (z.B. "123456" – ohne Anführungszeichen) eingetippt hast.

Range("B" & Target.Row).Value = xl4Value(strSource)


Wenn Funktion und Makro in den richtigen Modulen stehen (ich hoffe, Du kennst den Unterschied zwischen einem "normalen Standard-Modul" und einem "Tabellenblatt-Modul"), läuft der ganze Prozess automatisch los, sobald Du den Dateinamen in der Spalte "A" eingetippt hast.


Gruß
WernerB.


  


Betrifft: Vielen Dank von: Rico
Geschrieben am: 14.09.2004 10:35:51

Hallo Werner

Danke vielmals für die ausführliche Erklärung!! Das ist sehr lehrreich für mich und ich bin froh, dass es so hilfsbereite Menschen wie Dich gibt die einem auch den Code zu entschlüsseln helfen... ist mir sehr viel lieber als blos irgendein Code zu kopieren und nicht zu wissen was damit genau gesteuert wird.

Gruss aus der verregneten Schweiz ;-(

Rico


  


Betrifft: AW: Vielen Dank von: WernerB.
Geschrieben am: 14.09.2004 12:46:45

Hallo Rico,

vielen Dank für das Feedback.
Ich hoffe, Du kommst jetzt mit Makro und Funktion zurecht.


Gruß
WernerB.


 

Beiträge aus den Excel-Beispielen zum Thema "Verknüpfungen verschiedener Mappen"