Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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
Inhaltsverzeichnis

Werte fortlaufend sichern - VBA

Werte fortlaufend sichern - VBA
07.12.2016 15:30:48
Fritz
Hallo Forumsbesucher,
bitte um Eure Hilfe bei folgendem Vorhaben:
Ich möchte per Makro den Zellinhalt (Wert) aus Zelle A3 der Tabelle1 in der ersten freien Zelle ab Zeile 4 in der Spalte AS der Tabelle2 sichern.
Also beim ersten Aufruf des Makros Tabelle1!A3 nach Tabelle2!AS4, beim nächsten Mal Tabelle1!A3 nach Tabelle2!AS5 usw.
Im Voraus besten Dank für Eure Unterstützung.
mfg
Fritz

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte fortlaufend sichern - VBA
07.12.2016 15:54:52
Michael
Hallo!
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Tabelle1") 'Quell-Blatt
Dim WsZ As Worksheet: Set WsZ = Wb.Worksheets("Tabelle2") 'Ziel-Blatt
Dim Lr As Long
With WsZ
Lr = .Cells(.Rows.Count, 45).End(xlUp).Row + 1
If Lr 
LG
Michael
AW: Werte fortlaufend sichern - VBA
07.12.2016 15:57:14
UweD
Hallo
das ginge so...
- Rechtsclick auf den Tabellenblattreiter (Tabelle1)
- Code anzeigen
- Diesen Code dort reinkopieren
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("A3"), Target) Is Nothing Then
        Dim TB, Sp As Integer, LR As Long
        Set TB = Sheets("Tabelle2")
        Sp = 45 'Spalte AS 
        LR = TB.Cells(TB.Rows.Count, Sp).End(xlUp).Row + 1
        LR = IIf(LR < 4, 4, LR)
        TB.Cells(LR, Sp) = Target
    End If
End Sub
Gruß UweD
Über Rückmeldungen würde ich mich freuen
Anzeige
AW: Werte fortlaufend sichern - VBA
07.12.2016 16:35:25
Fritz
Hallo,
klappt alles wunderbar.
Euch beiden ganz herzlichen Dank
mfg
Fritz
AW: Werte fortlaufend sichern - VBA
07.12.2016 16:46:58
Rainer
Hallo Michael und Uwe,
ich schließe mich direkt an! Ich habe versucht euren code selbst umzubauen, bin aber nicht zum Ziel gekommen. Folgende Modifikation wollte ich haben:
Wenn Zelle "A3" ihren Inhalt ändert, dann kopiere die gesammte Zeile "3" ans Ende des aktuellen Blattes.
Wie muss ich den Code verändern?
Zelle "A3" wird von einem Makro ständig neu beschrieben, in den anderen Spalten stehen berechnete Werte.
Viele Grüße,
Rainer
AW: Werte fortlaufend sichern - VBA
07.12.2016 17:02:09
UweD
Hallo
Dann die LR Suche in Spalte A
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("A3"), Target) Is Nothing Then
        Dim TB, Sp As Integer, LR As Long
        Set TB = Sheets("Tabelle2")
        Sp = 1 'Spalte A 
        LR = TB.Cells(TB.Rows.Count, Sp).End(xlUp).Row + 1
        LR = IIf(LR < 4, 4, LR)
        Target.EntireRow.Copy TB.Rows(LR)
    End If
End Sub

LG UweD
Anzeige
AW: Werte fortlaufend sichern - VBA
08.12.2016 06:50:33
Rainer
Hallo Uwe,
danke für den Code. Er macht aber noch nicht das was ich suche.
Problem 1: Zelle A3 ändert sich durch einen Formelzugriff. In A3 steht "=Import!B7" als Verweis auf den Wert, welchen das Makro immer neu einliest. Der Wert ändert sich, aber dein Makro reagiert nicht darauf, es kopiert nur wenn die Zelle "von Hand" aktualisiert wird.
Problem 2: Dein Makro kopiert (bei "von Hand" Aktualisierung) jetzt die Formeln in die letzte Zeile. In A4 taucht dann nicht der Wert aus A3 auf, sondern "=Import!B8". Das gleiche passiert mit allen anderen Zellen in der Zeile 3, welche auch über Verweise ihre aktuellen Werte holen. Es müssen aber die Zellenwerte als Zahl kopiert werden.
Viele Grüße,
Rainer
Anzeige
AW: Werte fortlaufend sichern - VBA
08.12.2016 08:39:41
UweD
Hallo Reiner
Ja, Wertänderungen durch Formel werden NICHT zum Auslösen des Events verwendet
so könnte es aber klappen...

'In diese Arbeitsmappe 

Private Sub Workbook_Open()
    A3 = ThisWorkbook.Sheets("Tabelle1").Range("A3")
End Sub
'in ein Modul 

Public A3

'In das Blatt Hier Tabelle1 

Private Sub Worksheet_Calculate()
    Dim TMP, TB, Sp As Integer, LR As Long
    If Range("A3") <> A3 Then 'Wert hat sich geändert 
        A3 = Range("A3")
        Set TB = Sheets("Tabelle2")
        Sp = 1 'Spalte A 
        LR = TB.Cells(TB.Rows.Count, Sp).End(xlUp).Row + 1
        LR = IIf(LR < 4, 4, LR)
        Rows(3).Copy
        TB.Rows(LR).PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    End If
End Sub

LG UweD
Anzeige
AW: Werte fortlaufend sichern - VBA
08.12.2016 10:46:19
Rainer
Hallo Uwe,
leider nein. Wenn ich den Code 1:1 nehme, dann erhalte ich "Laufzeitfehler '9': Index außerhalb des gültigen Bereichs". Also habe ich die Codes verändert zu:
'In diese Arbeitsmappe Eingefügt in "Diese Arbeitsmappe"
Private Sub Workbook_Open()
A3 = ThisWorkbook.Sheets("IMPORT").Range("B7")
End Sub
'in ein Modul Eingefügt in Modul1, wo auch das Makro für den Datei-Import läuft
Public A3
'In das Blatt Hier Tabelle1 Eingefügt in IMPORT
Private Sub Worksheet_Calculate()
Dim TMP, TB, Sp As Integer, LR As Long
If Range("A3")  A3 Then 'Wert hat sich geändert
A3 = Range("A3")
Set TB = Sheets("EXPORT")
Sp = 1 'Spalte A
LR = TB.Cells(TB.Rows.Count, Sp).End(xlUp).Row + 1
LR = IIf(LR 
Dann bekomme ich die Laufzeitfehler nicht mehr, aber auch keinen Export. Es werden nur 2mal die Zeile 3 aus dem Sheet IMPORT kopiert, dann ist Schluss.
Zum Verständnis noch einmal die Sruktur:
Sheet IMPORT lädt die Datei. In B7 steht das letzte Änderungsdatum der Datei.
Es gibt mehrere Sheets CALC, welche diverse Berechnungen ausführen.
Sheet EXPORT hat in Zeile 3 Verknüpfungen zu den Ergebnissen und in Spalte A die Verknüpfung zu IMPORT!B7.
Die Werte aus EXPORT Zeile 3 sollen forlaufend kopiert werden.
Viele Grüße,
Rainer
Anzeige
AW: Werte fortlaufend sichern - VBA
08.12.2016 11:34:49
UweD
Hallo
wenn jetzt nicht mehr Zelle A3 überwachst, sondern Zelle A7 dann solltest du das auch überall ändern.

If Range("A3")  A3 Then 'Wert hat sich geändert
A3 = Range("A3")
Ich persönlich würde die Variable A3 dann auch noch in A7 ändern
LG UweD
AW: Werte fortlaufend sichern - VBA
09.12.2016 02:22:47
Rainer
Hallo Uwe,
da hatte ich wohl einen Denkfehler, jetzt funktioniert es.
Ich habe auch den "Rows(3).Copy" in "TB.Rows(3).Copy" geändert, nun kopiert er auch die richtigen Werte.
Vielen Dank für deine Hilfe!
Rainer
AW: Werte fortlaufend sichern - VBA
09.12.2016 02:58:50
Rainer
Hallo Uwe,
ich noch einmal.
Jeder Durchlauf des Makros führt dazu, dass ich auf das EXPORT Sheet umgeleitet werde.
Ich habe versucht, dass durch "Application.ScreenUpdating = False" zu verhindern. Geht aber nicht.
Wie kann ich verhindern, dass dein Makro mich automatisch umleitet?
Viele Grüße,
Rainer
Anzeige
AW: Werte fortlaufend sichern - VBA
09.12.2016 09:10:17
UweD
Hallo

'in ein Modul Eingefügt in Modul1, wo auch das Makro für den Datei-Import läuft
Public B7
'In diese Arbeitsmappe Eingefügt in "Diese Arbeitsmappe"
Private Sub Workbook_Open()
B7 = ThisWorkbook.Sheets("IMPORT").Range("B7")
End Sub
Dadurch wird die "Dauerhafte" Variable angelegt
und beim Starten der Datei mit dem Wert aus ImportB7 belegt

'In das Blatt Hier Tabelle1 Eingefügt in IMPORT
Private Sub Worksheet_Calculate()
Dim TB, Sp As Integer, LR As Long
If Range("B7")  B7 Then 'Wert hat sich geändert
B7 = Range("B7")
Set TB = Sheets("EXPORT")
Sp = 1 'Spalte A
LR = TB.Cells(TB.Rows.Count, Sp).End(xlUp).Row + 1
LR = IIf(LR 

- In ImportB7 steht eine Formel, die sich auf ein anderes Blatt bezieht.
- Wird nun auf dem anderen Blatt eine Zelle geändert, die sich auf das Blatt Import bezieht,
- wird verglichen, ob der Wert in B7 sich zum gemerkten Wert verändert hat.
- Trifft das zu, wird der Neue Wert gemerkt und das kopieren angestoßen
Hierzu noch folgendes:
Das makro liegt im Codebereich der Tabelle Import und wird ausgeführt, wenn die Neuberechnung in diesem Blatt ausgeführt wird.
Range(..) ; Cells(.. ) oder Rows(..) ohne das dort ein Sheet angegeben ist, bezieht sich immer auf das aktuelle Blatt, also hier auf 'Import'
ist ein Blatt vorangestellt 'hier TB.' dann ist das andere Blatt gemeint.
Rows(7).Copy ==== kopiert also die Zeile 7 aus Blatt Import
TB.Rows(LR).PasteSpecial Paste:=xlPasteValues ==== Fügt das Kopierte als WERT in die errechnete Zeile auf Blatt Export ein.
Es ist also von mir bewusst einmal mit TB. und ohne geschrieben worden
Das Application.ScreenUpdating = False verhindert ein eventuelles Flacker des Bildschirmes, wenn zwischen Blattern hin und her gesprungen wird.
Jeder Durchlauf des Makros führt dazu, dass ich auf das EXPORT Sheet umgeleitet werde.

=== kann eigendlich nur sein, wenn du irgendwo in einem Makro noch ein .activate oder .select eingebaut hast.
LG UweD
Anzeige
AW: Werte fortlaufend sichern - VBA
12.12.2016 08:11:23
Rainer
Hallo Uwe,
vielen Dank für deine Erläuterungen.
Wenn ich Import!B7 von Hand ändere, dann wechselt es nicht zum EXPORT Sheet, aber er kopiert die Daten wie es sein soll. Nur wenn folgendes Makro den Import durchführt: (Sub Start () wird nur einmal per Button gestartet um den Dateipfad zu laden. Sub Einlesen() ist der Import, welcher auch das aktuelle Dateiänderungsdatum und Zeit nach Import!B7 schreibt. Sub Stopp_Click() ist ein dritter Button, welcher das Einlesen abbricht.)
Option Explicit
Public Datei(2) As String
Public SpeicherZeit(2) As Date
Public B7
Public BolStop As Boolean
Sub Start()
'starten BEVOR das Messen beginnt
Dim i As Integer
Datei(0) = Range("B2")
Datei(1) = Range("B3")
Datei(2) = Range("B4")
For i = 0 To 2
SpeicherZeit(i) = FileDateTime(Datei(i))
Next i
BolStop = False
End Sub
Sub Einlesen()
Dim i As Integer
Dim WB As Workbook
Dim Import As Worksheet
Dim Sp()
Dim LR
Set Import = ThisWorkbook.Sheets("Import")
Debug.Print "neu"
Sp = Array(2, 5, 8)
Application.ScreenUpdating = False
For i = 0 To 2
If FileDateTime(Datei(i)) > SpeicherZeit(i) Then
Set WB = Workbooks.Open(Datei(i), , , , , , , , ",")
LR = WB.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
WB.Sheets(1).Range(WB.Sheets(1).Cells(1, 1), WB.Sheets(1).Cells(LR, 2)).Copy Import. _
_
Cells(8, Sp(i))
Import.Cells(6, Sp(i)) = WB.Sheets(1).Name
Import.Cells(7, Sp(i)) = FileDateTime(Datei(i))
SpeicherZeit(i) = FileDateTime(Datei(i))
WB.Close
Set WB = Nothing
End If
DoEvents
If BolStop = True Then Exit Sub
Next i
If Import.Cells(1, 1) = 0 Then Application.OnTime Now + TimeValue("00:00:02"), "Einlesen"
BolStop = False
Application.ScreenUpdating = True
End Sub
Sub Stopp_Click()
BolStop = True
End Sub
Ich kann hier aber kein "active" oder "select" entdecken.
Viele Grüße,
Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige