Änderungen in Einer Excel-Datei wirken sich nicht auf die andere aus - bug report

Anonym
2015-07-22T14:53:06+00:00

Problem: 

Ich habe 2 Excel Dateien, nennen wir sie A.xlsx und B.xlsx.

Einige der Zellen sind miteinander verknüpft, so soll z.B. in Datei A Zelle C3 enthalten“=[B.xlsm]beispiel!D4”. 

Wenn ich nun Datei A schließe und in Datei B Änderungen  vornehme, welche die Zellbezeichnung beeinflussen, also z.B. eine Spalte hinzufüge, so wird aus Zelle D4 nun E4.

Anschließend öffne ich Datei A wieder, und dort steht in Zelle C3 immer noch der Inhalt “=[B.xlsm]example!D4”.

Das ist aber nicht länger richtig, denn der korrelierende Inhalt steht nun ja in Zelle E4!

Das Problem taucht ebenso auf, wenn man Spalten löscht oder Zeilen hinzufügt bzw. löscht.

Es ist zu 100% reproduzierbar und unabhängig von Formaten, Inhalten, Makros usw.

Der Support meinte lapidar, es handle sich "um ein reguläres Verhalten von Excel", was aber mit Verlaub Blödsinn ist.

Denn der Clou von Excel ist ja, dass sich relative Zellbezüge mit jeder Veränderung mit ändern - sonst wäre das Ganze Programm doch wertlos. Dies muss aber auch über die Grenze einer Datei hinaus funktionieren! Nur, weil es bisher nicht funktioniert oder man keine Methode gefunden hat, das ans Laufen zu bringen, ist das ja noch lange kein Argument dafür, dass es so sein soll und so bleiben muss!

Daher möchte ich dieses Problem als bug reporten, damit es an die zuständigen Entwickler eskaliert werden kann.

Wie kann ich vorgehen?

Danke im Voraus!

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare

52 Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2015-07-24T09:39:16+00:00

    Hallo Andreas,

    schau mal hier nach dem Ordner "Bereich_Verschieben".

    Dort sind zwei Quelldateien und die Zieldatei drin, einige Formeln und Anmerkungen.

    Wenn man die Daten aller Quelldateien untereinander schreiben möchte, könnte man die WENNFEHLER-Sektion der Formel entsprechend umändern. Vorteilhafte wäre es, wenn dazu die Quelldateien einen Index im Namen hätten auf den man zugreifen könnte.

    Edit: Das ist eigentlich nur eine Demonstration, dass es auch mit Formel gehen könnte. Aber bei großen Datenbestand, die nur durch Array-Formeln ausgelesen werden können, würde ich VBA vorziehen.

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  2. Andreas Killer 144.1K Zuverlässigkeitspunkte Volunteer Moderator
    2015-07-24T09:04:14+00:00

    Da sich ZEILE beim Herunterziehen ändert, kann man diese Formel einfach nach unten kopieren.

    Hallo Claus.

    Bis hierhin alles klar. Wie weit kopiere ich nach unten?

    Ich ziehe jetzt sagen wir mal bis Zeile 100.

    (Bei mehreren Dateien ändere ich den Namen der Quelldatei auf die nächste. Wieder 100 Zeilen, nächste Quelldatei, etc.)

    Solange <= 100 Zeilen in jeder Quelldatei drin sind... die Nullen könnte man zur Not mit Hilfsspalte wegfiltern.

    Nun schreibe ich in irgendeiner Quelldatei in die 101 Zeile was rein... vorbei mit der Formelzauberei?

    Da liegt mein Verständnisproblem: Was Du schreibst ließt sich als wenn es da eine Möglichkeit gibt automatisch alle Daten zu erfassen.

    Ich sehe das so: Kopiere ich die Formel 100 Zeilen runter, bekomme ich die ersten 100 Datensätze, alles ab dem 101 nicht. Und es wird mir auch nicht angezeigt das mir was fehlt. Hat die Quelle weniger als 100 Datensätze bekomme ich leere Zellen als 0 angezeigt, also "Datenmüll".

    EDIT: Klingt zu hart, für eine Formel basierende Lösung ist das schon gut.

    Andreas.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  3. Anonym
    2015-07-24T08:56:16+00:00

    Hallo Chris,

    jetzt muss ich mal nachfragen, ob ich etwas falsch verstehe.

    Lutz hat in seiner Zieldatei unkorrekte Daten, weil sich in der geschlossenen Zieldatei die Zellbezüge nicht ändern, wenn in einer Quelldatei Spalten oder Zeilen eingefügt oder gelöscht werden.

    Müsste zum Beheben dieses Fehlers nicht in jede Quelldatei ein Code, der beim Öffnen die Zieldatei mit öffnet, damit diese die Änderungen an der Struktur mitbekommt?

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  4. Anonym
    2015-07-24T07:03:32+00:00

    Hallo Lutz,

    Edit: :)

    Oder ganz ohne VBA als Aufgabenbereich ablegen.

    https://www.youtube.com/watch?v=QA46kmZNzc8

    hier mal die Alternative mit VBA

    mit dem Nachteil das es Mobil nicht funktionieren würde!

    Der Code müsste in "DieseArbeitsmappe" deines "Masterfiles"

    denke aber daran das die Datei nun die Endung .xlsm haben muss. Deine bestehenden Verknüpfungen aber sicherlich noch auf xlsx sind.

    Option Explicit

    '##################################

    'anpassen wenn die Dateien in verschiedenen Ordnern liegen müsste der Code ein wenig umgebaut werden.

    Const strPath As String = "P:\Temp"

    Dim arrFiles

    '#################################

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Dim i           As Integer

    Dim objWB       As Object

    '###################

    'Achtung beim Schließen wird auch gespeichert!

    ThisWorkbook.Save

    '##################

    For i = 0 To UBound(arrFiles)

         Set objWB = fCheckFile(strPath & arrFiles(i))

        If Not objWB Is Nothing Then

            objWB.Close True

        End If

    Set objWB = Nothing

    Next

    End Sub

    Private Sub Workbook_Open()

    Dim i           As Integer

    Dim objWB       As Object

    '#################################

    'anpassen

    arrFiles = Array("FileA.xlsx", "FileB.xlsx", "FileC.xlsx", "FileD.xlsx", "FileE.xlsx")

    '#################################

    For i = 0 To UBound(arrFiles)

         Set objWB = fCheckFile(strPath & arrFiles(i))

         If objWB Is Nothing Then

             Set objWB = Workbooks.Open(strPath & arrFiles(i))

             If objWB.ReadOnly Then

                MsgBox "Achtung! Mappe: " & objWB.Name & " ist schreibgeschützt.!" & Chr(10) & _

                "Änderungen werden in dieser Mappe nicht berücksichtigt, diese Mappe wird jetzt geschlossen!"

                objWB.Close False

             End If

         End If

    Set objWB = Nothing

    Next

    ThisWorkbook.Activate

    End Sub

    Private Function fCheckFile(strFullPath As String) As Workbook

         Dim objWB As Workbook

         For Each objWB In Application.Workbooks

             If objWB.FullName = strFullPath Then

                 Set fCheckFile = objWB

                 Exit For

             End If

         Next

     End Function

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare
  5. Anonym
    2015-07-24T06:18:05+00:00

    Hallo Andreas,

    in der Quelldatei (A) vergebe z.B. den Namen "Daten" und schreibe bei "Bezieht sich auf":

    =BEREICH.VERSCHIEBEN($A$1;;;ANZAHL2($A:$A);ANZAHL2($1:$1))

    Dieser vergebene Namen beinhaltet nun die Matrix und du kannst diesen Namen verwenden wie z.B. A1:G100.

    Somit brauchst du in der Zieldatei (B) um diese Matrix nur die INDEX-Formel zu ranken, um die entsprechenden Daten daraus zu holen:

    =INDEX(A.xlsx!Daten;ZEILE(A2);VERGLEICH("Vorname";INDEX(A.xlsx!Daten;1;0);0))

    für den ersten Wert unterhalb der Überschrift "Vorname".

    Da sich ZEILE beim Herunterziehen ändert, kann man diese Formel einfach nach unten kopieren.

    Den Namen Daten kann er für jede Quellmappe mit der gleichen Formel benutzen. In der Formel in der Zielmappe muss dann nur der entsprechende Mappenname vorgestellt werden.

    Wenn du damit nicht klar kommst, melde dich wieder, damit ich ein Beispiel erstellen kann. Dazu komme ich aber erst gegen Mittag.

    Claus

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare