Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Alle Tabellenblätter mit einem Klick aktualisieren





Frage

Moin, ich habe eine Excel-Datei mit ca 20 Tabellenblättern. Auf einer Seite "ziehe" ich mir Daten von einer Datenbank. Diese Daten werden in den anderen TAbellenblättern benutzt um Summen zu errechnen und Charts zu erzeugen. Nun möchte ich, mit einem Click auf 1 Button, alle Tabellenblätter aktualisieren, so dass sich diese den neuen/veränderten DAten der Datenbank annehmen. Ich habe schon ein paar Tipps bekommen, weiß aber nicht zu 100% wie ich das Anwenden muss... Wäre klasse wenn mir jm helfen könnte! Dies habe ich bis jetzt: Sub Query_aktual () ActiveWorkbook.RefreshAll End Sub ich denke damit kann ich EINE Seite aktualisieren... nun sagte man, ich sollte so eine Schleife noch einbinden: For Each qt In ActiveSheet.QueryTables qt.Refresh (BackgroundQuery) Next Klasse Idee, nur wie mache ich das???^^ Wäre schön wenn jm mir dazu die Lösung oder einen Lösungsansatz liefern würde. Leider sind meine VBA-Kenntnisse sehr beschränkt :-( Gruß Der Hilfesuchende

Antwort 1 von coros

Moin Hilfesuchender,

normalerweise würde das mit den beiden von Dir aufgeführten VBA Code folgendermaßen aussehen. Kopiere das Makro in ein StandardModul deiner Exceldatei.

Sub Query_aktual () 
ActiveWorkbook.RefreshAll 
For Each qt In ActiveSheet.QueryTables 
qt.Refresh (BackgroundQuery) 
Next
End Sub

Wobei ich nicht weiß, ob das überhaupt das ist, was Du suchst. Um Dir da aber eine Auskunft geben zu können benötigt man ein paar andere Angaben als die, die Du hier gepostet hast. Unklar ist, was Du mit “Datenbank“ meinst. Wo befindet sich diese und in welchem Format, also z.B. *.mdb, liegt die Datenbank vor. Außerdem verstehe ich Deinen Ausdruck “ziehe“ im Zusammenhang mit der Datenbank nicht. Was verstehst Du darunter. Das sind nur ein Teil an Fragen. Aber eventuell hilft Dir das zusammen gesetzte Makro ja schon. Wenn nicht musst Du noch ein paar Angaben machen.

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 3 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 Hilfesuchender

Erst einmal Danke, ein Feedback gibt es später, leider bin ich noch nicht so weit dieses zu testen.

ist das qt in dem Modul etwas bekanntes für VB? Muss es nicht noch Deklariert werden?

Was meine ich mit ziehen:

Ich habe eine Datenbank (Access) auf der Festplatte. Von dieser Datenbank habe ich ein Abbild in der Exceldatei. Dieses Abbild habe ich mir über Externe DAten importieren geholt. Was ich jetzt möchte ist folgendes. Da sich die Daten in der Accesstabelle wöchentlich/monatlich ändern möchte ich gerne mit einem Makro alle Tabellenblätter aktualisieren. Von dem Abbild der Accesstabelle entstehen in der Exceldatei neue Tabellen und daraus resultierende Grafiken.

Und wenn ich nun das Abbild Aktualisiere, hoffe ich, alle anderen TAbellen/Grafiken mit zu aktualisieren.

Hoffe dies sind genügend Infos um das "ziehen" zu erläutern.

Gruß
Der Hilfesuchende

Antwort 3 von coros

Hi Hilfesuchender,

was sind das für Grafiken, die aktualisiert werden sollen, sind dass Diagramme?

Du schreibst, dass Du die Daten durch den Befehl "Daten importieren" in Deine Tabelle geholt hast. Wurden die Daten alle auf einem Tabellenblatt importiert, dass dann als eine Datentabelle fungiert?. Wenn ja, dann ist es sinnvoller, bei jedem Öffnen der Datei die Daten aus der Datenbank in dieses Datenblatt zu importieren, auf das jedes andere Tabellenblatt Deiner Datei und auch die Grafiken zugreifen. Ändern sich in diesem Tabellenblatt die Daten, ändern sich auch die Daten in den anderen Tabellenblättern. Bedingung ist jedoch, dass in den Exceloptionen in der Registerkarte "Berechnung" der Punkt "Automatisch" aktiviert ist. Ich selber verfahre jedenfalls so bei einer ähnlichen Datei.

Nachfolgend mal den Teil zum Auslesen und Einfügen der Datenbankdaten aus der Datenbank "AvalonDaten.mdb" in Blatt "Stammdaten".

Option Explicit
Public Pfad As String, Aktive_Datei As String

Sub Datenbank_einlesen_2003()

Application.ScreenUpdating = False

Pfad = "\\Fhwmv-server\Server_D\AvalonDaten\" ´ActiveWorkbook.Path
Aktive_Datei = ThisWorkbook.Name

Sheets("Stammdaten").Cells.ClearContents
Rem: Daten aus Datenbank "AvalonDaten.mdb" auslesen und in Tabelle Stammdaten einfügen
 With Sheets("Stammdaten").QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DSN=Microsoft Access-Datenbank;DBQ=" & Pfad & "\AvalonDaten.mdb;DefaultDir=" & Pfad & ";DriverId=25;F" _
        ), Array("IL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _
        Sheets("Stammdaten").Range("A1"))
        .CommandText = Array( _
        "SELECT Anlagen.Anlage, Anlagen.Objektbezeichnung, Anlagen.Strasse, Anlagen.Hausnummer, Anlagen.Plz, Anlagen.Ort, Anlagen.SchlüsselNr" & Chr(13) & "" & Chr(10) & "FROM `" & Pfad & "\AvalonDaten`.Anlagen Anlagen" & Chr(13) & "" & Chr(10) & "ORDE" _ 
        , "R BY Anlagen.Anlage")
        .Name = "Abfrage von Microsoft Access-Datenbank"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
End Sub


Überleg mal, ob so eine Lösung für Dich auch in Frage kommen würde. Wenn ja, könnte man so etwas sicherlich auch für Deine Datei erstellen.

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 Hilfesuchender

Leider ist es nicht möglich das sich bei jedem öffnen die Daten Aktualisieren sollen. Es ist eine Exceldatei über statistiken meiner MAnnschaft. Diese Exceldatei wird an die Spielerinnen verschickt! Diese sollen keine Berechtigung haben irgendetwas zu verändern und haben nicht die Möglichkeit Daten zu importieren, da diese ja auf meiner Festplatte liegen.

Ich bin leider nicht sehr fit in VB, obwohl ich immer mehr eindrücke gewinne und dieses sehr schade finde... habe nicht gewusst wie vielseitig excel ist!

Die Grafiken sind Diagramme, allerdings weiss ich nicht ob ich die Diagramme in ein Tabellenblatt einfügen werde oder in ein Diagrammblatt.

Werden mit diesem code:
Sub Query_aktual ()
ActiveWorkbook.RefreshAll
For Each qt In ActiveSheet.QueryTables
qt.Refresh (BackgroundQuery)
Next
End Sub


nur Tabellen- oder auch Diagrammblätter refreshed?

Nochmal danke und meinen Respekt das du so früh schon zu dieser Hilfe bereit bist!

Antwort 5 von coros

Hallo Hilfesuchender,

mein Lösungsvorschlag war nur als Beispiel gedacht. Man kann das mit dem Einlesen der Daten auch anders als bei jedem Öffnen regeln, so dass nur Du die Daten einlesen kannst/ musst und danach die Datei weitergeben kannst. Man kann die Daten auch über einen Button importieren. Dazu müsste das Makro zum Einlesen durch ein Click-Ereignis angestoßen werden.


Ich weiß nicht, was Du mit "Diagrammblättern" meinst. Ich gehe mal davon aus, dass Du ein Tabellenblatt meinst, in dem sich ein oder mehrer Diagramme befinden. Ob mit der RefreshAll-Methode auch Diagramme aktualisiert werden, kann ich Dir leider nicht sagen, da ich mit dieser Methode noch nicht gearbeitet habe und somit auch keine Erfahrungen. Ich löse das, wie in Antwort 3 erwähnt, anders, da ich dann die Daten der Datenbank überall in der Exeldatei ohne Probleme verwenden kann, ohne mir Gedanken über irgend eine Aktualisierung machen zu müssen. Wie schon geschrieben, wäre eine Überlegung wert.

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 Hilfesuchender

So, ich habe ein kl Problem

mit diesem Code

Sub Query_aktual ()
ActiveWorkbook.RefreshAll
For Each qt In ActiveSheet.QueryTables
qt.Refresh (BackgroundQuery)
Next
End Sub

werden ALLE Tabellenblätter aktualisiert. doch leider ist der Datenimport bei einem Tabellenblatt so groß, dass das Programm sich immer aufhängt.

Wie könnte ich das Sheet(20) von dem aktualisierungsprozess ausschließen? und wie könnte ich dieses sheet einzeld aktualisieren?

Noch einmal Danke....

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: