Excel VBA
#1
Hallo Leute,

ich stehe momentan vor folgende zwei Problemen und hoffe ihr könnt mir damit weiterhelfen, da ich derzeit recht wenig von vba verstehe.

Ich möchte über einen Button den Tabellennutzer die Option geben, seine bereits vorhandenen Daten von der alten Tabelle in die neue Tabelle übertragen zu lassen. Hierfür müsste ich aber wissen, wo die alte Tabelle gespeichert ist und wie diese benannt wurde. 

1. Ist es möglich, dass nach der Buttonauswahl "Daten übertragen" lediglich den Speicherort der alten Tabelle auszuwählen ist und nach erfolgter Pfadbestätigung die Übertragung startet?

z.B. alte Tabelle ist in Laufwerk C:Users/... die neue Tabelle ist in Laufwerk D:Downloads/...

2. Spielt es bei den zu übertragenen Daten eine Rolle, ob die der Nutzer selbst eingegeben oder diese per Dropwdown Menü (Kombinationsfeld - Formularsteuerelement) ausgewählt hat?


Zur Übertragung der Daten habe ich folgende Variante gefunden. 

Code:
Sub test()
  Workbooks("test1.xls").Worksheets("Sheet1").Cells(x, y).Copy
  Workbooks("test2.xls").Worksheets("Sheet1").Cells(x, y).Paste
End Sub

Wenn ich aus Tabelle 1 die Daten von A1 bis E1 übertragen möchte, müsste ich dies doch dann vermutlich mit Cells (1, [1:5] bzw. 1, [1; 3; 5]).copy tun, oder?
Wenn ja, gilt dies auch in Kombination Zeilen und Spalten?
Z. B. müssten aus Tabelle 1 Blatt 2, die Werte aus den Spalten C bis AH der Zeilen 8, 10, 12 in die neue Datei übertragen werden. Manchmal besitzt nur jede zweite Spalte einen zu übertragenden Wert, dafür aber jede Zeile.

Jede Zelle an sich anzusprechen sprengt den Rahmen und macht das Ganze unübersichtlich. Darum würde ich gerne das Ganze zeilenweise erledigen wollen.


Darüber hinaus möchte ich über einen Button eine Datenübertragung von einem Tabellenblatt auf ein anderes Blatt ausführen lassen. Wie das ungefähr funktioniert habe ich bereits gesehen. Jedoch möchte ich in meiner Tabelle die Daten aus A8 bis AF8 von Blatt 1 nach Blatt 2 in A10 bis AF10 übertragen lassen. Dies soll fortlaufend untereinander erfolgen. 
Anzumerken ist, dass in Zelle A8 von Blatt 1 das Datum steht. Bei der Übertragung per Makro stünde ich jedoch vor dem Problem, dass in der Zieltabelle evtl. Datumslücken vorhanden wären, weil an bestimmten Tagen nix passiert ist. 

Diese Lücken wären für meine zu kalkulierende durchschnittliche Ertragsmenge pro Tag sehr unschön, da ich dann nur Tage heranziehen würde, für die ein Eintrag vorlag. Derzeit erledige ich das alles händisch. Ich kopiere die Daten aus Blatt 1 nach Blatt 2. Sind Datumslücken vorhanden, füge ich die fehlenden Tage und in weiteren Spalten den Wert "Null" ein.



Vielen Dank schon jetzt für eure Hilfe.


Gruß

Jens
Top
#2
Hallo Jens,

1) ja. Dazu kann man einen Dialog zur Ordnerwahl aufrufen: Application.FileDialog(msoFileDialogFolderPicker)
2) nein

Zitat:Z. B. müssten aus Tabelle 1 Blatt 2, die Werte aus den Spalten C bis AH der Zeilen 8, 10, 12 in die neue Datei übertragen werden. Manchmal besitzt nur jede zweite Spalte einen zu übertragenden Wert, dafür aber jede Zeile.

Bei unregelmäßiger Verteilung musst Du wohl oder übel zumindest für jede "Verteilungsgruppe" eine eigene Routine schreiben oder die Verteilung z.B. in einem Array definieren und dieses in einer Schleife speichern.

Ansonsten ist die Syntax z.B.

zusammenhängende Bereiche
...Range("A1:C1").Copy
...Range(cells(1,1),cells(1,3)).Copy

getrennte Bereiche
...Range("A1,C1").Copy
...Union(Cells(1, 1), Cells(1, 3)).Copy


Zitat:. Jedoch möchte ich in meiner Tabelle die Daten aus A8 bis AF8 von Blatt 1 nach Blatt 2 in A10 bis AF10 übertragen lassen. Dies soll fortlaufend untereinander erfolgen.
Willst Du aus einem Blatt der Datei die Daten aus Zeile 8 öfter übertragen oder soll nach Zeile 8 dann Zeile 9 kommen usw oder hast Du da mehrere Dateien wo Du aus zeile 8 was holen und untereinander eintragen willst?

Zitat:Diese Lücken wären für meine zu kalkulierende durchschnittliche Ertragsmenge pro Tag sehr unschön,
nur unschön oder stimmen die Ergebnisse dadurch nicht? Wenn die Ergebnisse stimmen warum müssen die Daten dann noch aufgehübscht werden? Wenn man einem Datum eine bestimmte Zeile zuordnen kann könntest Du auch gleich in die entsprechende Zeile einfügen und ggf. das Datum am Anfang oder Ende mit dem Autofill setzen (Autofill geht auch per Makro)

Ein Datum ist in Excel eine ganze Zahl. Der 1.1.20 ist z.B. 43831. Wenn Du von jedem Datum 43830 abziehst bekämst Du den 1.1. in Zeile 1 usw.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Hallo André,

erst einmal recht herzlichen Dank für die ausführliche Beantwortung. Ich füge mal meine Excel Datei zum besseren Verständnis bei.

Thema Datenübertragung von alter zur neuen Datei:

Code:
Sub FilePicker()

Dim objFileDialog As Office.FileDialog
   Set objFileDialog = Application.FileDialog(MsoFileDialogType.msoFileDialogFilePicker)
   
   With objFileDialog
       .AllowMultiSelect = False
       .ButtonName = "Daten übertragen"
       .Title = "Daten übertragen"
               If (.Show > 0) Then
       End If
       If (.SelectedItems.Count > 0) Then
           Call MsgBox(.SelectedItems(1))
       End If
   End With

End Sub

Mit diesen Code konnte ich die Datei nun auswählen und mir in einem Fenster anzeigen lassen. Jetzt möchte ich ja nicht, dass mir der Pfad angezeigt wird, sondern dass die Daten von der alten Datei in die neue übertragen werden. In meinen Augen müsste ich den Teil zwischen "If (.Show > o) Then bis zum zweiten End If" abändern und dort den Ausführungsbefehl des Kopierens geben. Korrekt? Wie kann ich das machen?

Der Code zum Kopieren müsste ich in einen separaten Modul eintragen, oder?

Code:
Sub Datei_Kopieren()

  Workbooks("test1.xls").Worksheets("Sheet1").Cells(x, y).Copy
  Workbooks("test2.xls").Worksheets("Sheet1").Cells(x, y).Paste

End Sub

Als "test1.xls" müsste doch dann die Verlinkung zur ausgewählten Datei drinstehen?
Als "test2.xls" müsste ich den aktuellen Dateinamen eintragen. Was würde passieren, wenn die Datei umbenannt wird? Passt sich der Code automatisch an?

Thema Datenübertragung innerhalb der Datei
Ich möchte die Ergebnisse der Zeile 8 vom Tabellenblatt "Ertragseingaben" in die Zeile 10 des Blatt "Expo" kopieren. Mit jeder erneuter Ausführung soll dann die Zeile 8 in die nächst freie Zeile des Zielblattes übertragen werden. Meine Zeile 8 des Ausgangsblattes ist quasi meine Tagessumme, die zur festen Speicherung übertragen werden soll.
Zitat:nur unschön oder stimmen die Ergebnisse dadurch nicht? Wenn die Ergebnisse stimmen warum müssen die Daten dann noch aufgehübscht werden? Wenn man einem Datum eine bestimmte Zeile zuordnen kann könntest Du auch gleich in die entsprechende Zeile einfügen und ggf. das Datum am Anfang oder Ende mit dem Autofill setzen (Autofill geht auch per Makro)

Das ist für mich schwer zu beurteilen, da meine Datei nicht nur von mir genutzt werden soll. Die einfachste Variante wäre es, dies dem Dateinutzer freizustellen, indem er im Ausgangsblatt für die fehlenden Tage das Datum einträgt und dann per Knopfdruck die Daten übertragen lässt. Dies werde ich ganz einfach per Wenn-Funktion lösen. Dann ist der Tabellennutzer selbst zuständig fehlende Daten nachzutragen, wenn er das möchte.


Angehängte Dateien
.xlsm   OGame_V7_Makro_test.xlsm (Größe: 473,21 KB / Downloads: 1)
Top


Gehe zu:


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