Verknüpfung mehrere Tabellen.Zellen einfügen

Verknüpfung mehrere Tabellen.Zellen einfügen bei geschlossener Datei

Hallo Forum,

habe ein sehr verzwicktes Problem und bin mir nicht sicher ob es überhaupt eine Lösung gibt.
Versuche euch meine Problemstellung zu schildern.
Grundlage: Eine Haupttabelle (ich nenne sie Jahresübersicht = J2011)
Viele (ca.300) externe Nebentabellen.(ich nenne sie Auftrag01 bis 300 = A01…)
Alle auf einem Server.

Nun werden Daten auf A01 gesammelt.
Diese werden momentan mittels Verknüpfung ( = ) an J2011 übertragen.
Habe es mittlerweile auch hinbekommen, dass sie in Office 2011 aktualisiert werden.
Ebenso werden Berechnungen von J2011 an A01 mittels (=) übertragen.

So nun mein Problem:
Die Aufträge A01- … sind nicht fortlaufend, oder es müssen im laufenden Jahr welche eingefügt oder gelöscht werden. ( in der J2011 Tabelle) Mache ich dies aber, verschieben sich alle Verknüpfungen. Würde ich alle Tabellen öffnen, passt sich dies automatisch an.
Allerdings kann ich (ne möchte ich nicht) alle Dateien immer öffnen um eine Zeile, in der J2011 einzufügen.

Hoffe es ist einigermaßen verständlich. Könne mir auch eine Kombination mit Access vorstellen.
(Habe nur von Access keine Ahnung). So beim schreiben denke ich auch an alle Zeilen anlegen und die nicht benötigten ausblenden. Was aber wenn ich mal eine Zwischen Nr. einbauen möchte.
A01-02 oder so.

Also ich bin sehr offen für jeden Vorschlag ! Lerne auch gerne dazu.

Jetzt schon besten Dank für eure Hilfe

Die Aufträge A01- … sind nicht fortlaufend, oder es müssen im
laufenden Jahr welche eingefügt oder gelöscht werden. ( in der
J2011 Tabelle) Mache ich dies aber, verschieben sich alle
Verknüpfungen. Würde ich alle Tabellen öffnen, passt sich dies
automatisch an.

Allerdings kann ich (ne möchte ich nicht) alle Dateien immer
öffnen um eine Zeile, in der J2011 einzufügen.

Hallo myoddo,

Liegen Deine externen Nebentabellen A01… zusammen in EINEM Verzeichnis?
Wenn ja, dann lass’ doch einfach mit einem Makro alle öffnen und wieder
schließen und Dein Problem löst sich mit einem Mausklick.

Gruß
g.s.

Ne,
jeder Auftrag hat seine eigene Datei.
In der sind noch Zeichnungen/Bilder/ Angebote usw.
Hoffe du hast noch ne Lösung
Gruß

Hallo,
Excel gibt Dir dennoch die Möglichkeit, alle verknüpften Files über eine Prozedur automatisch zu öffnen und wieder zu schließen. Heute ist es schon ein wenig spät. Kann ev. morgen weitere Hinweise liefern, wenn Da das möchtest.
Gruß
Gerd

Na das wäre SUPER
Jetzt schon mal Danke

Na das wäre SUPER

Jetzt schon mal Danke

Hallo,
bin wieder zu Hause. Also:
nachfolgend Vorlagen, Du mußt sie natürlich für Dich anpassen!
Lege sie in einen Modul in Deiner Hauptmappe (ich glaube, Du hast
sie J2011 oder ähnlich genannt).

Sub VerknüpfteMappenÖffnen()
 Dim LinkArray As Variant, i%
 LinkArray = ActiveWorkbook.LinkSources(xlExcelLinks)
 If Not IsEmpty(LinkArray) Then
 For i = 1 To UBound(LinkArray)
 If Not IsOpenMap(LinkArray(i)) Then
 Workbooks.Open FileName:=LinkArray(i), updatelinks:=3
 '0 = Bezüge nicht aktualisieren
 '1 = Externe Bezüge aktualisieren, nicht Fernbezüge
 '2 = Fernbezüge aktualisieren, nicht externe Bezüge
 '3 = Externe und Fernbezüge aktualisieren
 'Nähers sh. Hilfe zu "Open"
 'Sollen Auto\_Open\_Makros ausgeführt werden, muß
 'RunAutoMacros-Methode hinzugefügt werden, z.B:
 'wb.RunAutoMacros xlAutoOpen
 End If
 Next i
 End If
End Sub

'Hilfsroutine, prüft ob Mappe schon offen (für alle Fälle...)
Function IsOpenMap(MapName$) As Boolean
 Dim wb As Workbook
 For Each wb In Application.Workbooks
 If wb.Name = MapName Then
 IsOpenMap = True
 Exit Function
 End If
 Next wb
End Function

'Und zum Schließen in einem Rutsch:
Sub AlleMappenSchließen()
 Dim wb As Workbook
 For Each wb In Application.Workbooks
 If wb.Name ThisWorkbook.Name Then
 'Die Hauptmappe enthält ja diesen Code, sie muß natürlich 
 'offen bleiben, die anderen aber schließen.
 wb.Close savechanges:=True
 'True = wenn Du allfällige Änderungen speichern willst
 'Sollen Auto\_schließen\_Makros ausgeführt werden, muß
 'RunAutoMacros-Methode hinzugefügt werden, z.B:
 'wb.RunAutoMacros xlAutoClose
 End If
 Next wb
End Sub

Hoffe, das hilft Dir!
Gruß
Gerd

Achtung, Code kann ‚falsche‘ Mappen schließen

For Each wb In Application.Workbooks
If wb.Name ThisWorkbook.Name Then
,
wb.Close savechanges:=True

Hallo Gerd,

in deinem Code ist eine Falle versteckt.

Der würde eiskalt auch meine Personl.xls mitschließen was mir rein gar nicht passen würde.

Was ich grad nicht weiß, man kann ja im Ordner XLStart und noch einem Mappen mitladen beim Start von Excel, die wären dann auch futsch *annnehm*

Ist sicherer für Fremd-PCs aufgrund deiner Arrayliste schließen.

So kann ja jeder schnell testen, was bei ihm alles so offen ist, xlas usw. mal weglassend.

Sub tt()
Dim wb
For Each wb In Application.Workbooks
 MsgBox wb.Name
Next wb
End Sub

Gruß
Reinhard

wo muss der code hin?
Hallo Jungs,
finde ich ja super, dass ihr euch für mich so viel mühe macht.
Leider müssen wir bei 0 anfangen.
Ne Excel Mappe anlegen und öffnen kann ich.
Reicht auch für etwas mehr. Aber wo muss ich den den Code eintragen ?
Frage auch mal noch gar nicht nach, was er bedeutet.
Erst mal versuchen.

Nochmals besten dank und schönes Wochenende.

Hallo Reinhard,
Danke für den Hinweis, Du hast völlig Recht. Man soll halt
nie auf die Schnelle Codeschnipsel hinschreiben… war als
Denkanstoß gedacht.
LG
Gerd

Ne Excel Mappe anlegen und öffnen kann ich.
Reicht auch für etwas mehr. Aber wo muss ich den den Code
eintragen ?

Am einfachsten: Extras />Makros />Makro aufzeichnen, dann zB
eine Zelle markieren. Hierauf wieder Extras />Makros />Auf-
zeichnung beenden, dann >Makro auswählen /> „Makro1“ und
>bearbeiten. Dadurch wird Dir der Modul, in welchem der Code
steht, gezeigt. Lösche den Code des aufgezeichneten Makros
(„Makro1“) und kopiere den geünschten Code einfach hinein.
Speichern und Schließen. Mit F8 Makro aufrufen. Du kannst
aber auch mit Alt+F11 die Entwicklungsumgebung öffnen, mit
Einfügen />Modul einen Modul anlegen und dann direkt den
Code hineinkopieren.
Wenn Du aber gar keine Ahnung hast, sei lieber vorsichtig
und ziehe einen Helfer bei, um Dir nicht Deine Daten zu
ruinieren.
Bitte beachte auch die Anmerkung, die Reinhard gegeben hat!
Zum Schließen der Mappen solltest Du den Code mindestens so
abändern:

Sub AlleMappenSchließen()
 Dim wb As Workbook
 For Each wb In Application.Workbooks
 If wb.Name ThisWorkbook.Name And wb.Name "Personal.xls" Then
 wb.Close savechanges:=True
 'Sollen Auto\_schließen\_Makros ausgeführt werden, muß
 'RunAutoMacros-Methode hinzugefügt werden, z.B:
 'wb.RunAutoMacros xlAutoClose
 End If
 Next wb
End Sub

Da ich Deine Anforderungen nicht kenne, kann ich Dir keine näheren
Hinweise geben, möglicherweise mußt Du noch andere Dinge beachten.
Der Codevorschlag erspart Dir lediglich das manuelle Öffnen der
eingebundenen Mappen und das Schließen aller offenen Mappen.

Gruß
Gerd

personal.xls personl.xls PERSONL.XLS

If wb.Name ThisWorkbook.Name And wb.Name
„Personal.xls“ Then

Hallo Gerd,

erschlag mich bitte nicht, ich bin nur der Überbringer der schlechten Nachricht :smile:

So heißt die personal.xls bei englischem Excel.
Im deutschen heißt sie perso nl.xls. Was sich MS dabei gedacht hat ist mir schleierhaft, hätte sie doch weltweit personal.xls nennen können und fertig :frowning:

Zweitens, bei mir heißt sie PERSONL.XLS, wurde so von Excel erstellet also wird sie wohl überall so geschrieben werden.

Lösung also für deutsches Excel:

If wb.Name ThisWorkbook.Name And LCase(wb.Name) „personl.xls“ Then
oder
If wb.Name ThisWorkbook.Name And UCase(wb.Name) „PERSONL.XLS“

Ist unklar ob der Fremd-PC dt. oder engl. Excel hat:

If wb.Name ThisWorkbook.Name And LCase(wb.Name) „person?l.xls“ Then
oder
If wb.Name ThisWorkbook.Name And UCase(wb.Name) „PERSON?L.XLS“

Weltweit muß man schauen, weiß ich nicht.

Gruß
Reinhard

Wohin mit dem VBA Code

Reicht auch für etwas mehr. Aber wo muss ich den den Code
eintragen ?

Hallo Oddo,

viele Wege führen nach Rom, Gerd hat ja schon was dazu geschrieben.
Ich würde dir empfehlen, schreib dir F11, F8, F5 auf einen Zettel, zur Not kleb ihn an den Bildschirm.

Dadrauf schreibst du in Kurzform in deinen Worten was sie bedeuten.
VBA-Code wird im VB-EDitor eingefügt, hergestellt, geändert usw.

**Mit F11 wechselst du zwischen Excel und dem VB-Editor hin- und her.

Mit F8 rufst du in Excel die Liste bestehender Makros auf und kannst auswählen welches ausgeführt werden soll.

Mit F5 startest du den Code im Vb-Editor wo in dem Moment der Curser mitten im Codetext steht.**

Das wars. schon.
Diese F-Tasten haben den schönen Vorteil, sie funktionieren von Excel 97 bis Excel 2011. (Nein, 2011 ist kein Schreibfehler *gg*)

Im VB-Editor gibt es bestehende Module. Eines ist immer da und heißt „Diese Arbeitsmappe“.

Dann gibt es auch immer ein Modul pro Tabellenblatt, sie heißen „Tabelle1“, „Tabelle2“, usw.

Von Haus aus sind nur diese vorhanden. Sie dienen aber besonderen Codes und der Code von Gerd nicht dazu.

Er gehört in ein Standardmodul, Modul1, basmain, Modul der Mappe.
Das ist alles das gleiche Modul nur andere Begriffe für’s gleiche.

Damit ist gemeint, du klickst im VB-Editor auf Einfügen—Modul und es wird Modul1 erstellt.
Weitere heißen dann Modul2, Modul3 usw., Sie sind aber in sich völlig gleichwertig. Sie dienen nur dazu bei viel Codes die ein bißchen wegen der Übersichtlichkeit aufzuteilen.

Ansonsten, wenn du gerne scrollst kannst du auch pro Modul bis zu 64 KB Bytes an CodezeilenTextzeichen reinknallen *gg*

Noch etwas wichtiges, innerhalb des Vb-Editors wechselst du von Modul zu Modul mit Doppelklick auf den anderen Modulnamen in das andere Modul!

Das mit dem Zettel meine ich sehr ernst. Druck dir aus was Gerd und ich sagten. Dann kannst du ruckzuck mit dem Kugelschreiber durchstreichen was du nicht brauchst davon.
Den wichtigen Rest formulierst du dann für dich so, daß DU ihn auch in einem Jahr noch schnell kapierst und deponierst den Zettel irgendwo.

Achja, die Module siehst du im VB-Editor links. Da ist eine Baumstruktur wie im Explorer.
Die Laufwerke sind im Vb-Editor die Projekte.

Jede Mappe ist ein Projekt, im Vb-EDitor erkennbar am Mappennamen nach dem Wort Projekt.

Und zu personl.xls, egal ob du schon eine hast oder nicht, starte die Makroaufzeichnung, wähle aus Speichern in „persönliche Arbeitsmappe“, dann kopier eine leere Zeele in eine andere und beende die Aufzeichnung. Das wars, jetzt hast du eine :smile:

Sie ist ab jetzt unsichtbar immer da. Da kommt Code rein den du in allen Mappen benutzen kannst.
Ansonsten kommt der Code immer in die Mappe wo er laufen soll.

Gruß
Reinhard