PDA

Vollständige Version anzeigen : Tabellen fertig, import aus"alten" Arbeitsblättern


texasmatze
21.02.2008, 15:00
So, Leute, jetzt habe ich die nächste Anfrage:

In meinem erstellten Arbeitsblatt gibts eine Startseite bei der die Mitarbeiter-Daten eingetragen werden. Desweiteren gibts dann noch die Tabellen für Januar bis Dezember.

Wir sind in der glücklichen Lage, erst Februar zu haben, daher könnte man die Daten auch noch per Hand eintragen.

Es sind bereits andere Arbeitsblätter von mir im Umlauf, die aber genauso aufgebaut sind. Nur die Berechnungen sind anders.
Alle Arbeitsblätter haben den freigegebenen Bereich von C10 bis G59, in denen Daten eingetragen werden können. Der Rest ist gesperrter Bereich.

Auf der Startseite soll mittels "Forms.CommandButton" ein Datei-Auswahl-Fenster geöffnet werden, da die Dateien bei den verschiedenen Mitarbeitern unterschiedliche Dateinamen haben.
Nach dem OK sollen dann die Daten aus Alter Datei Januar C10 bis G59 in die neue Datei Januar C10 bis G59 eingetragen werden und das ganze bis Dezember durch. Leere Zellen sollen dabei ignoriert werden und leer bleiben.

Leider muss ich mich mit Visual Basic noch intensiver beschäftigen. Ich bräuchte einen Anhaltspunkt, wie ich die Abfragen aufbauen muss. Dann komme ich bestimmt weiter...

Es wäre schön, wenn ich da ne kleine Hilfestellung von euch bekommen könnte

Viele Grüße
Mathias

jinx
21.02.2008, 16:37
<font size="2" face="Century Gothic">Moin, Mathias,

fangen wir mit GetOpenFilename für das Auslesen des Pfades und Namens der Datei an - dort wird noch keine Datei geöffnet.

Für ein Vorgehen im Ganzen könntest Du einen Blick auf Blattinhalt von einer zur anderen Arbeitsmappe kopieren (http://www.herber.de/mailing/062299h.htm) werfen - die Bereiche kann man eingrenzen, die Prozedur auf die verschiedenen Tabellen mit einer weiteren Schleife erreichen.

Mir ist klar, dass Du wahrscheinlich mit dem Code bzw. der Anpassung Probleme haben könntest - Du solltest dann ggf. etwas gezielter nachfragen können.</font>

texasmatze
22.02.2008, 11:06
Danke für den Tip erstmal. Ich habe da etwas rumgebastelt und möchte, um das System erstmal zu verstehen, vom Tabellenblatt "Start" die Zelle D6 von "alter" Arbeitsmappe in die neue kopieren. Der Inhalt soll dort in das Blatt"Start" in die Zelle D6 hineinkopiert werden.

Hier ist mein Versuch:Private Sub CommandButton1_Click()

Dim wbGeöffnet As Workbook 'Initialisierung der Variablen
Dim wsGeöffnet As Worksheet
Dim ret

' Datei öffnen (und zeige nur die .xls - Dateien)
ret = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xls), *.xls")

If ret = False Then ' wenn keine File ausgewählt wurde:

MsgBox "Abbruch durch User" ' Abbruch!!

Else ' ansonsten tu folgendes:

Set wbGeöffnet = Workbooks.Open(ret) ' nimm die Datei
Set wsGeöffnet = wbGeöffnet.Worksheets("Start") ' und schau in die erste Tabelle


Range("D6").Select
Selection.Copy
Windows("neue version mit datenimport v0222a.xls").Activate
Worksheets("Start").Range("D6").Select
ActiveSheet.Paste
End If

End Sub

Beim Ausführen kommt folgende Fehlermeldung: Lauzeitfehler 1004 Die Select-Methode des Range-Objektes konnte nicht ausgeführt werden.
Im Debugger ist dann die Zeile Range("D6").Select gelb markiert.

jinx
22.02.2008, 13:32
<font size="2" face="Century Gothic">Moin, texasmatze,

den Bezug zur Tabelle herstellen:

wsGeöffnet.Range("D6").Select
Aber mir wird da zuviel selektiert (ungetestet) ;)

Private Sub CommandButton1_Click()

Dim wbGeöffnet As Workbook 'Initialisierung der Variablen
Dim wsGeöffnet As Worksheet
Dim ret
Dim wsZiel As Worksheet

' Datei öffnen (und zeige nur die .xls - Dateien)
ret = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xls), *.xls")

If ret = False Then ' wenn keine File ausgewählt wurde:

MsgBox "Abbruch durch User" ' Abbruch!!

Else ' ansonsten tu folgendes:

Set wsZiel = ThisWorkbook.Sheets("Start")
Set wbGeöffnet = Workbooks.Open(ret) ' nimm die Datei
Set wsGeöffnet = wbGeöffnet.Worksheets("Start") ' und schau in die erste Tabelle


wsZiel.Range("D6").Value = wsGeöffnet.Range("D6").Value
' Windows("neue version mit datenimport v0222a.xls").Activate
' Worksheets("Start").Range("D6").Select
' ActiveSheet.Paste
End If

wbGeöffnet.Close savechanges:=False

Set wsGeöffnet = Nothing
Set wbGeöffnet = Nothing
Set wsZiel = Nothing
End Sub</font>

texasmatze
22.02.2008, 15:05
Also ich habe das jetzt soweit angepasst, so dass die alle ausgewählten Felder der startseite importiert werden.

Wenn ich aber auf den Button klicke und anschließend auf abbrechen, kommt erst die Statusmeldung (Abbruch durch User) und anschließend der Debugger-Aufruf mit Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt und die Zeile: wbGeöffnet.Close savechanges:=False ist gelb markiert:

Private Sub CommandButton1_Click()

Dim wbGeöffnet As Workbook 'Initialisierung der Variablen
Dim wsGeöffnet As Worksheet
Dim ret

' Datei öffnen (und zeige nur die .xls - Dateien)
ret = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xls), *.xls")

If ret = False Then ' wenn keine File ausgewählt wurde:

MsgBox "Abbruch durch User" ' Abbruch!!

Else ' ansonsten tu folgendes:

Set wsZiel = ThisWorkbook.Sheets("Start") ' heißt: definiere Tabelle "start" als Ziel?
Set wbGeöffnet = Workbooks.Open(ret) ' nimm die Datei
Set wsGeöffnet = wbGeöffnet.Worksheets("Start") ' und schau in die erste Tabelle


wsZiel.Range("D6").Value = wsGeöffnet.Range("D6").Value
wsZiel.Range("D8").Value = wsGeöffnet.Range("D8").Value
wsZiel.Range("D9").Value = wsGeöffnet.Range("D9").Value
wsZiel.Range("D11").Value = wsGeöffnet.Range("D11").Value
wsZiel.Range("D12").Value = wsGeöffnet.Range("D12").Value
wsZiel.Range("D13").Value = wsGeöffnet.Range("D13").Value
wsZiel.Range("E13").Value = wsGeöffnet.Range("E13").Value
wsZiel.Range("D16").Value = wsGeöffnet.Range("D16").Value
wsZiel.Range("D17").Value = wsGeöffnet.Range("D17").Value
wsZiel.Range("D18").Value = wsGeöffnet.Range("D18").Value

End If

wbGeöffnet.Close savechanges:=False

Set wsGeöffnet = Nothing
Set wbGeöffnet = Nothing
Set wsZiel = Nothing

End Sub


Desweiteren wollte ich unabhängig davon mal fragen wo ich die Schleife ansetzen muss, um die Monate Januar bis Dezember zu importieren

Viele Grüße
Mathias

jinx
22.02.2008, 15:26
<font size="2" face="Century Gothic">Moin, Mathias,

mein Fehler - wieder nicht getestet. Die Zeile muss in den Else-Zweig der If-Abfrage hinein, am besten direkt vor das End If.

Wenn Die Daten aus allen Tabellen der Mappe übernommen werden sollen, dann spätestens vor das Festlegen von wsGeöffnet bzw. wsZiel. Dazu meine Frage: sind die Tabellennamen immer gleich? Dann könnte man ein Array erstellen und durchlaufen lassen, um die Inhalte zu kopieren.

Wegen der Zellangaben zum Kopieren könnte man z.B. auch wie folgt vorgehen (wieder ungetestet):

Dim arrRanges As Variant
Dim lngCounter As Byte
'...
arrRanges = Array("D6", "D8", "D9", "D11", "D12", "D13", "E13", "D16", "D17", "D18")
For lngCounter = LBound(arrRanges) To UBound(arrRanges)
wsZiel.Range(arrRanges(lngCounter)).Value = wsGeöffnet.Range(arrRanges(lngCounter)).Value
Next lngCounter</font>

texasmatze
22.02.2008, 16:32
Die Arbeitsmappe heißt Az2008.xls und hat 13 Blätter. 1.Blatt ist Start, die anderen 12 Januar bis Dezember...