Worksheet 1 zu Worksheet 2 , Transfer via VBA

  • Excel

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Worksheet 1 zu Worksheet 2 , Transfer via VBA

    Hallo Leute,
    ich bräuchte mal eure Hilfe. Danke schon mal für euere Bemühungen.

    Es stellt sich folgendes Problem, ich habe zwei unterschiedliche Excel Datein, jeweils besitzen beide eine Tabelle. Dokument1 (excel1) hat eine Tabelle in der Sachen eingetragen werden sollen und Dokumennt2 (excel2) hat eine Tabelle in der diese eingetragenen Sachen aus dem Dokument 1 automatisch übertragen werden sollen. Ich solle mit Hilfe von Microsoft Visual Basic (VB) einen Code schreiben der das erfüllt. Das automatische übertragen soll auch für folgende Einschreibungen verschiederner Daten in die Tabelle aus dem Dokument 1 funktioniere und an das Dokumet 2 und seiner* Tabelle übermitteln.

    P.s. Ich habe zwei Sqreenshoots hochgeladen, die das noch mal verdeutlichen werden.

    Auserdem habe ich eine Funktion verwendet um herauszufinden welche Zeile momentan die Letze ist in der was eingetragen ist.

    =MAX (WENN(NICHT(ISTLEER($A$1:$A$40));ZEILE($A$1:$A$40)))

    Bilder, Beispiel im Anhang.
    Bilder
    • !.jpg

      392,28 kB, 1.909×851, 256 mal angesehen
    • -code.jpg

      96,62 kB, 671×589, 192 mal angesehen
    Das ist mit VBA alles kein Problem, aber ich würde darüber nachdenken, ob eine direkte Datenverbindung den Zweck nicht besser erfüllt.
    Wenn du in Blatt 2 eine ODBC-Verbindung auf die Tabelle in Blatt 1 machst, sind die immer automatisch aktuell.

    Daten ... aus anderen Quellen ... Microsoft Query

    Denk mal drüber nach.
    Alles andere ist nur eine halbgare Lösung.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Das Hier wie gesagt ich hab keine Ahnung von VB....

    Visual Basic-Quellcode

    1. Main()
    2. Dim Zeile As Double
    3. Dim Datenbank As Worksheet, Formular
    4. As Worksheet
    5. Set Datenbank = ThisWorkbook.
    6. Worksheets ("t1")
    7. Set Formular = This Workbook.
    8. Worksheets ("t2")
    9. With Datenbank
    10. Zeile = .Range("K25").Value + 1
    11. .Cells(Zeile, 1) = Formular.Range("g2")
    12. .Cells(Zeile, 2) = Formular.Range("h2")
    13. .Cells(Zeile, 3) = Formular.Range("i2")
    14. .Cells(Zeile, 4) = Formular.Range("j2")
    15. End With
    16. End Sub

    das war aus nem buch aber hab halt ka obs stimmt oder nicht!
    Blind kopiert aus dem Buch, ohne zu verstehen, was es macht?
    Das ist der falsche Ansatz, um Programmieren zu lernen. ;)

    Wenn das in dem Buch genau so drin steht, würde ich es fürs Kaminfeuer verwenden. :)
    Ich korrigier's mal so, dass es wenigstens lauffähiger Code wird:

    Visual Basic-Quellcode

    1. Sub Main()
    2. Dim Zeile as Long
    3. Dim Datenbank As Worksheet, Formular As Worksheet
    4. Set Datenbank = ThisWorkbook.Worksheets ("t1")
    5. Set Formular = ThisWorkbook.Worksheets ("t2") 't1 und t2 befinden sich beide im aktuellen Workbook
    6. Zeile = Datenbank.Range("K25").Value + 1 'liest die Start-Zeilennummer aus der Zelle t1!K25
    7. Datenbank.Cells(Zeile, 1).Value = Formular.Range("g2").Value 'füllt Spalte 1 mit dem Wert aus t2!G2
    8. Datenbank.Cells(Zeile, 2).Value = Formular.Range("h2").Value 'füllt Spalte 2 mit dem Wert aus t2!H2
    9. Datenbank.Cells(Zeile, 3).Value = Formular.Range("i2").Value ' usw.
    10. Datenbank.Cells(Zeile, 4).Value = Formular.Range("j2").Value
    11. End Sub
    Der Code macht aber nicht das, was du in deiner Aufgabenstellung beschreibst.

    Was spricht dagegen, den kompletten Range aus einem Blatt in das andere zu kopieren?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    ja ka das war i-wie son beispiel halt :D
    wie gesagt ich hab kp von vb und wie ich das amchen soll mir wurde nur gesagt mach das ma via vba...
    das problem ist halt das es in der einen 3 spalten mehr gibt die is in der anderen nicht gibt und es sollte halt automatisch übetragen!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mrTRU“ ()

    mrTRU schrieb:

    wenn ich halt was reinschreibe soll das automatisch übernommen werden
    Von wem soll die Aktion denn ausgehen?

    Wenn das direkt beim Schreiben getriggert werden soll, muss dein Original-Sheet (in dem du veränderst) den Code beinhalten.

    Wenn du es von der Kopie aus steuern willst, musst entweder der Code regelmässig im Original nachschauen oder aber du greifst meinen allerersten Vorschlag auf und machst eine Datenverbindung, die sich automatisch aktualisiert.

    Wer soll denn die Initiative überehmen?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Aus dem Original funktioniert das so

    Code im dem Sheet, das verändert wird

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target as Range)
    2. If Target.Column > 4 Then Exit Sub
    3. Application.ScreenUpdating = False
    4. On Error Goto Done
    5. UpdateKopie
    6. Done:
    7. Application.ScreenUpdating = True
    8. End Sub
    9. Private Sub UpdateKopie
    10. Dim wb as Workbook, ws as Worksheet
    11. On Error Goto Done
    12. Set wb=Workbooks.Open ("c:\Kopie.xlsx")
    13. Set ws=wb.Sheets("TabellenKopie")
    14. ws.Range("A:D").Formula = Me.Range("A:D").Value
    15. wb.Save
    16. Done:
    17. If Not wb is Nothing Then wb.Close
    18. End Sub
    Das ist die gnadenlose Variante, die bei jeder Zellveränderung in einer der ersten 4 Spalten ausgeführt wird.
    Wenn es Performance-Probleme geben sollte, kannst du den Code auch in ein SheetChange oder Close-Ereignis einbauen.

    Ich hoffe es ist kein Fehler drin. Ich habe gerade kein Excel zum Testen offen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Also die Original Excel Datei(1) ist bei mir z.B. C:\test\Mappe1.xlsx und die zweite also in die alles automatisch übertragen wird ist bei mir z.B. C:\test\MappeAuto.xlsx. In dem Code kann ich nicht ganz nachvollziehen was ich demnach zu Folge eintragen muss bei den Zeilen:
    Set wb=Workbooks.Open ("c:\Kopie.xlsx")
    Set ws=wb.Sheets("TabellenKopie")

    (Sagen wir bei Datei 1 heißt die Tabelle1 = Steuern und bei der 2 Datei heißt die Tabelle1 = Gehalt) ich glaube das sind die Sheets oder ?
    Weil ich habe es auch versucht als ich es umgeändert habe aber es hat nicht funktionier vllt liegt es daran das ich es in die Flasche Datei eingetragen habe. Datei 1 ist ja das Original und Datei 2 ist das zu aktualisierende Dokument. In welches der beiden soll ich den Code eingeben?
    Ich öffne dann je nach dem das Dokument und ich nehme einfachmal das Original (Datei 1) und öffne mit Alt F11 Microsoft Visual basic for Apllications gehe dann auf Modul um den Quellcode einzugeben. Mit den veränderten Faden und speichere das Dokument. Sollte es dann Funktionieren?

    Ich glaube ich hab soweit alle meine Fragen =)
    Lg
    mrTRU