Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Dateiauswahl übernehmen
#1
Hallo, 

ich möchte zuerst eine kurze Erläuterung zu der Tabelle geben.
Es handelt sich um ein Tabellenblatt (Arbeitstabelle) dessen Einträge aktualisiert werden müssen da mit diesen Daten in der Arbeitsmappe weiter gerechnet wird. Zum aktualisieren sollen die Daten aus einem identischen aktuelleren Tabellenblatt (Datentabelle) kopiert werden. (kommt per Email oder OneDrive und wird zum kopieren auf dem Rechner gespeichert)

Deshalb habe ich mal dieses Makro zusammen gebastelt und es funktioniert soweit ...

 Sub test_update()

Dim Dateiauswahl As Variant

erneut:
Dateiauswahl = Application.GetOpenFilename

If Dateiauswahl <> False Then
    Workbooks.Open Filename:=Dateiauswahl
Else
    If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwählen, oder 'Abbrechen' um den Vorgang zu beenden.", (vbOKCancel)) = vbOK Then
        GoTo erneut
    Else
        Exit Sub
    End If
End If

'
    Range("B6:U110").Select
    Selection.Copy
    Windows("Arbeitstabelle").Activate
    ActiveSheet.Paste
    Range("B6").Select
    Windows("Datentabelle").Activate
    ActiveWindow.Close
    Range("B6").Select
   
End Sub



... nun hätte ich nur gerne, dass der Name "Datentabelle" nicht fest eingetragen ist sondern durch den Dateinamen der Datei die zum kopieren ausgewählt wurde jeweils ersetzt wird. Dann könnte ich z.B. das Datum anfügen ( z.B. Datentabelle_151021)

Viele Grüße
63 63 63
Antworten Top
#2
Hallo

teste bitte deinen überarbeiteten Code aus. Er sollte einwandfrei funktionieren. Wahrscheinlich verwirrt es dich das ich keinen Befehl "Paste" verwende.
Diese Schreibweise, deine Zieladresse direkt an Copy anzuhängen, ist das Wissen von Excel Fachleuten. Probier es bitte selbst aus.  (ungetestet)
Ich verzichte auch auf das Fenster umschalten und schliesse einfach die geöffnete Aktive Mappe.

mfg Gast 123

Code:
Sub test_update()
Dim Dateiauswahl As Variant
erneut:
Dateiauswahl = Application.GetOpenFilename

If Dateiauswahl <> False Then
    Workbooks.Open Filename:=Dateiauswahl
Else
    If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwählen," & _
            " oder 'Abbrechen' um den Vorgang zu beenden.", (vbOKCancel)) = vbOK Then GoTo erneut
    Exit Sub
End If
    'aktive Mappe kopieren und schliessen
    Range("B6:U110").Copy _
    ThisWorkbook.Sheets("Arbeitstabelle").Range("B6")
    ActiveWindow.Close savechanges:=False
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Mugel
Antworten Top
#3
Hallo, 

erst mal vielen Dank aber leider funktioniert es nicht  Dodgy

Ich bekomme folgende Fehlermeldung:

Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs

Das ist der gelb markierte Fehlerbereich:

Range("B6:U110").Copy _
    ThisWorkbook.Sheets("Arbeitstabelle").Range("B6")


Viele Grüße
Mugel  
Antworten Top
#4
Hallo

ich bin überrascht und habe den Code noch einmal getestet. Bei mir läuft er in meiner Testdatei einwandfrei!
Bedingung ist, das auch eine Tabelle mit dem Namen "Arbeitstabelle" vorhanden ist!  Heisst die bei dir anders??
Du kannst die Tabelle auch über den Index angeben, z.b. Worksheet(1).  Sie muss dann aber immer an 1. Stelle stehen!

mfg Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Mugel
Antworten Top
#5
Hi,

bei der TE heißt die Mappe "Arbeitstabelle" - und nicht das Blatt. Daher wohl die Irritation.

Hi Gast 123,


Zitat:Diese Schreibweise, deine Zieladresse direkt an Copy anzuhängen, ist das Wissen von Excel Fachleuten.



Ich würde das nicht allein den Fachleuten zuschreiben, sondern allen, die in der Lage sind, F1 zu drücken, um die Onlinehilfe zu konsultieren.
Da liest man dann, dass die Copy-Methode einen optionalen Parameter Destination hat. Wird er mit angegeben, wird direkt dorthin kopiert, andernfalls in die Zwischenablage.
[-] Folgende(r) 1 Nutzer sagt Danke an {Boris} für diesen Beitrag:
  • Mugel
Antworten Top
#6
Hallo, 

S O R R Y der Fehler lag bei mir. Arbeitstabelle ist zwar der korrekte Name, war aber falsch geschrieben (Arbeitsabelle) Angry 

Es funktioniert natürlich perfekt !!

Aber eine Frage hätte ich dann doch noch ...

Wenn ich den Bereich ("B6:U110") mal ergänzen möchte z.B. um den Bereich ("x6:AQ110") , wie kann ich das dann hinzufügen ??


Viele Grüße
Mugel

Antworten Top
#7
Hi,


Zitat:Wenn ich den Bereich ("B6:U110") mal ergänzen möchte z.B. um den Bereich ("x6:AQ110") , wie kann ich das dann hinzufügen ??



Am Einfachsten: 2 mal kopieren (und einfügen).
[-] Folgende(r) 1 Nutzer sagt Danke an {Boris} für diesen Beitrag:
  • Mugel
Antworten Top
#8
Hallo

freut mich das es nur ein Schreibfehler war. Passiert mir auch. 
Beim 2. kopieren bitte daran denken die Zieladresse zu ändern!  Sonst überschreibst du die vorherigen Daten in Zelle "B6"

Du kannst den 2. Kopiercode auch ins Modul einbauen und ganz oben eine Const Anweisung einbauen die auf "Ja" oder "" gesetzt werden kann.
Setzt du dann vor den 2. Code eine If Anweisung wird er nur bei "Ja" ausgeführt. Zur Demo für dich ggf. auch mit einer MsgBox Abfrage mit Ja/Nein.
Bitte im 2. Code noch die richtige Zieladresse einsetzen. Sonst klappt es nicht.

mfg Gast 123

Code:
Const Copy2 = "Ja"      'Ja oder "" für NICHT ausführen


Sub test_update()
Dim Dateiauswahl As Variant
erneut:
Dateiauswahl = Application.GetOpenFilename

If Dateiauswahl <> False Then
    Workbooks.Open Filename:=Dateiauswahl
Else
    If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwählen," & _
            " oder 'Abbrechen' um den Vorgang zu beenden.", (vbOKCancel)) = vbOK Then GoTo erneut
    Exit Sub
End If
    'aktive Mappe kopieren und schliessen
    Range("B6:U110").Copy _
    ThisWorkbook.Sheets("Arbeitstabelle").Range("B6")
   
    If Copy2 = "Ja" Then
       If MsgBox("2. Bereich 'X6:AQ110' mit kopieren?", vbYesNo) = vbYes Then
          Range("X6:AQ110").Copy _
          ThisWorkbook.Sheets("Arbeitstabelle").Range("xxx")   ' Zieladresse angeben!
       End If
    End If
   
    ActiveWindow.Close savechanges:=False
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • Mugel
Antworten Top
#9
Hallo und vielen Dank für die Hilfe 28

Manchmal braucht's eben mehr Hilfe als nur die dicken Bücher.

Gruß Mugel
Antworten Top
#10
Hallo Gast 123, 

ich hätte da noch eine Frage ...  Blush

So habe ich das mit dem Kopieren dank deiner Hilfe gelöst ... Es funktioniert !!

Sub Update_zeiten()
Dim Dateiauswahl As Variant
erneut:
Dateiauswahl = Application.GetOpenFilename
 
If Dateiauswahl <> False Then
    Workbooks.Open Filename:=Dateiauswahl
Else
    If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwählen," & _
            " oder 'Abbrechen' um den Vorgang zu beenden.", (vbOKCancel)) = vbOK Then GoTo erneut
    Exit Sub
End If
    'aktive Mappe kopieren und schliessen
    'Plan A
    Range("B6:U110").Copy _
    ThisWorkbook.Sheets("zeiten").Range("B6")
    'Plan B
    Range("X6:AQ110").Copy _
    ThisWorkbook.Sheets("zeiten").Range("X6")
    'Plan C
    Range("AT6:BC110").Copy _
    ThisWorkbook.Sheets("zeiten").Range("AT6")
    ActiveWindow.Close savechanges:=False
End Sub

Die Datei mit den Copy-Daten heißt: "Upd_Zeiten_+akt.Datum"   (z.B. "Upd_Zeiten_081121")
---------------------------------------------------------------------------------------------------------------------
Nun habe ich aus der gleichen Arbeitsmappe für ein anderes Tabellenblatt auch eine Kopieren-Funktion gebastelt ... Es funktioniert !!


Sub Update_zuordnung()
Dim Dateiauswahl As Variant
erneut:
Dateiauswahl = Application.GetOpenFilename
 
If Dateiauswahl <> False Then
    Workbooks.Open Filename:=Dateiauswahl
Else
    If MsgBox("Es wurde keine Datei ausgewählt. Klicken Sie 'OK' um eine Datei auszuwählen," & _
            " oder 'Abbrechen' um den Vorgang zu beenden.", (vbOKCancel)) = vbOK Then GoTo erneut
    Exit Sub
End If
    'aktive Mappe kopieren und schliessen
    'zuordnung
    Range("H5:O43").Copy _
    ThisWorkbook.Sheets("zuordnung").Range("H5")
    ActiveWindow.Close savechanges:=False
End Sub

Die Datei mit den Copy-Daten heißt: "Upd_Zuordnung_+akt.Datum"   (z.B. "Upd_Zuordnung_081121")
---------------------------------------------------------------------------------------------------------------------------------


Nun muss ich vermeiden, dass bei einem Update die Copy-Daten nicht verwechselt werden da die Inhalte sonst im falschen Tabellenblatt eingefügt werden.


Gruß Mugel
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste