Tabelle mit Ein- und Ausgabe + Speichern einzelner Seite

  • #1
A

ArcaneLion

Bekanntes Mitglied
Themenersteller
Dabei seit
28.03.2004
Beiträge
371
Reaktionspunkte
0
Mal wieder ein neues lustiges Problem:

Für eine Nachkalkulation soll eine Tabelle erstellt werden.

Auf der ersten Seite sollen die Werte eingegeben werden.
Auf der zweiten Seite soll der Tabelle eine neue Zeile hinzugefügt werden. Zudem sollen die Zeilen dieser Tabelle dann auch gleich automatisch nadem dem Jahr und der Kalenderwoche sortiert werden.

Auf der dritten Seite soll eine Ausgabe stattfinden.
Eine gewählte Zeile Aus der Tabelle soll dort ein Druckbares Forumular ergeben, dass die Werte der markierten Zeile enthält (man muss eine Zeile die übertragen werden soll irgentwie auswählen können). Zudem soll dieses Formular noch abspeicherbar sein (in eine einzelne neue Exceldatei).

Ich habe mal ne Beispielsdatei hochgeladen um die Sache zu verdeutlichen.



Es ist wie gesagt nur eine Beispielsdatei. Die eigentliche Ein- und Ausgabe wird dann ander strukturiert und zudem auch größer...

Ist das Überhaupt so einfach möglich?
Das Hauptproblem ist, dass ich von Makros keinen Peil habe!

Danke schonmal!

---

Kleine Änderung:
Solch eine Tabelle liegt sogar schon vor.
Die Eingabe und das erstellen der Tabelle funktioniert Problemlos.
Was jedoch fehlt ist das Erstellen der Ausgabe (von Tabelle -> druckbaren/speicherbares Formular)!
 
  • #2
Hallo ArcaneLion,

ich hab mal in die Beispieldatei einen Makro (siehe unten geschrieben),
der das->Ausgabe'-Blatt in eine separate Datei kopiert.
Die Datei wird in das Verzeichnis der Ausgangsdatei gespeichert.
Der DateiName ist->separateAusgabe.xls'.
Hier muß man überlegen, wie man den Dateinamen eindeutig macht,
so dass die Datei nicht immer wieder überschrieben wird.

(Mail ist unterwegs)

Gruß Matjes :)

Code:
Option Explicit

'Pfad in dem
Public Sub BlattAusgabeInDateiSpeichern()

  Dim ws As Worksheet, wb2 As Workbook, ws2 As Worksheet
  Dim neuer_Dateiname As String
  Dim c_Path_export As String

  Set ws = ActiveWorkbook.Worksheets(Ausgabe)
 ->für den SpeicherPfad wird der Pfad des aktuellen Dokumnets
 ->ausgelesen
 ->hier kann auch ein Auswahldialog->Ordner' benutzt werden um einen
 ->Speicher-Pfad zuzuweisen
  c_Path_export = ActiveWorkbook.Path

 ->neue Mappe erzeugen
  Set wb2 = Workbooks.Add

  ws.Copy Before:=wb2.Sheets(1)

 ->überflüssige Blatter löschen
 ->Nachfrage bei delete abstellen
  Application.DisplayAlerts = False
  For Each ws2 In wb2.Worksheets
    If ws2.Name <> Ausgabe Then ws2.Delete
  Next
  Application.DisplayAlerts = True

 ->neue Mappe speichern
 ->Zielnamen festlegen
 ->hier muß überlegt werden unter welchem eindeutigen Namen
 ->die files abgelegt werden sollen - entsprechend muß der
 ->Dateiname gesetzt werden
 ->in diesem Beispiel fest separateAusgabe.xls

  wb2.SaveAs FileName:=c_Path_export & \ & separateAusgabe.xls
  wb2.Close Savechanges:=False

  Set ws2 = Nothing: Set wb2 = Nothing: Set ws = Nothing
End Sub
 
  • #3
Auch dieses Makro erweisst sich absolut genial!!

Ich bin von Makros sowieso schon immer begeistert, da ich selbst keinen Peil von habe...wollten wir mal in der Schule während meiner Ausbildung anfangen, haben wir aber leider nie gemacht...

Die letzte Frage die sich mir hier jetzt noch stellt:

Gibt es eine Möglichkeit Excel dazu zu bringen auf der dritten Seite, der Ausgabe, Daten anzuzeigen die ich auf der zweiten Seite (in der Tabelle) markiere?

---

Ich habs grade selber so halbwegs hingekiregt!!

Ich habe ein Makro aufgezeichnet, dass die von mir Makierte Zeile auf die Ausgabeseite kopiert. Dort in eine Zeile mit weisser schristfarbe, und aus dieser Zeile hole ich mir dann die Werte!

Als falls wer ne Bessere Idee hat...
 
  • #4
Hallo ArcaneLine,

weiterer Beispiel-Makro kommt heute abend per mail.

Gruß Matjes :)
 
  • #5
Hallo ArcaneLion,

hier die Version mit
Public Sub DatenMarkierterZeileInBlattAufgabenUebernehmen()
'Uebernahme der Daten aus einer markierten Zeile
'des Blattes->Tabelle' in das Blatt->Ausgabe.
'Pruefungen:
'a) aktives Blatt, Name='Tabelle', nein -> Fehlermeldung, Abbruch
'b) mehr als eine Zeile markiert -> Fehlermeldung
'c) Zielblatt vorhanden , nein -> Fehlermeldung

Wenn Du weitere Fragen hast, melde dich.

Gruß Matjes :)

Code:
Option Explicit

Public Sub DatenMarkierterZeileInBlattAufgabenUebernehmen()
'Uebernahme der Daten aus einer markierten Zeile
'des Blattes->Tabelle' in das Blatt->Ausgabe.
'Pruefungen:
'a) aktives Blatt, Name='Tabelle', nein -> Fehlermeldung, Abbruch
'b) mehr als eine Zeile markiert -> Fehlermeldung
'c) Zielblatt vorhanden , nein -> Fehlermeldung

'Definitionen zum Quellblatt
Const c_TabName_Quelle = Tabelle
'*** Quelle Spaltennr
Const c_qSP_Jahr = 1
Const c_qSP_KW = c_qSP_Jahr + 1
Const c_qSP_Anz = c_qSP_KW + 1
Const c_qSP_Preis = c_qSP_Anz + 1
Const c_qSP_Std1 = c_qSP_Preis + 1
Const c_qSP_Std2 = c_qSP_Std1 + 1
Const c_qSP_leer1 = c_qSP_Std2 + 1
Const c_qSP_Mat = c_qSP_leer1 + 1
Const c_qSP_Gew1 = c_qSP_Mat + 1
Const c_qSP_Gew2 = c_qSP_Gew1 + 1

'Definition zum Zielblatt
Const c_TabName_Ziel = Ausgabe
'*** Ziel Spalten/Zeilennr
Const c_zZ_Jahr = 7: Const c_zSP_Jahr = 1
Const c_zZ_KW = 7: Const c_zSP_KW = 2
Const c_zZ_Mat = 7: Const c_zSP_Mat = 4
Const c_zZ_Gew1 = 7: Const c_zSP_Gew1 = 5
Const c_zZ_Gew2 = 7: Const c_zSP_Gew2 = 6
Const c_zZ_Anz = 12: Const c_zSP_Anz = 1
Const c_zZ_Preis = 12: Const c_zSP_Preis = 2
Const c_zZ_Std1 = 16: Const c_zSP_Std1 = 1
Const c_zZ_Std2 = 16: Const c_zSP_Std2 = 2

Dim r As Range, x As Range, l_znr As Long
Dim wsq As Worksheet, wsz As Worksheet, b_found As Boolean

'Selection erstmal sichern
Set x = Selection

'a) aktives Blatt, Name='Tabelle', nein -> Fehlermeldung, Abbruch
If ActiveSheet.Name <> c_TabName_Quelle Then
  MsgBox ( _
    Blatt-> & c_TabName_Quelle & _
   -> ist nicht aktives Blatt & vbLf & _
    Abbruch :-()
  Exit Sub
End If

Set wsq = ActiveWorkbook.Worksheets(c_TabName_Quelle)

'b) mehr als eine Zeile markiert -> Fehlermeldung
l_znr = 0
For Each r In x
  If l_znr = 0 Then l_znr = r.Row
  If l_znr <> r.Row Then
    MsgBox ( _
      keine oder mehrer Zeilen markiert. & vbLf & vbLf & _
      Bitte eine Zeile markieren)
    l_znr = 0
    Exit For
  End If
Next

If l_znr <> 0 Then
'c) Zielblatt vorhanden , nein -> Fehlermeldung
  b_found = False
  For Each wsz In ActiveWorkbook.Worksheets
    If wsz.Name = c_TabName_Ziel Then b_found = True: Exit For
  Next
  If b_found = True Then
 ->quelle und Ziel vorhanden -> loslegen mit Kopieren
  Set wsz = ActiveWorkbook.Worksheets(c_TabName_Ziel)
  
  wsz.Cells(c_zZ_Jahr, c_zSP_Jahr).Value = _
    wsq.Cells(l_znr, c_qSP_Jahr).Value
  wsz.Cells(c_zZ_KW, c_zSP_KW).Value = _
    wsq.Cells(l_znr, c_qSP_KW).Value
  wsz.Cells(c_zZ_Mat, c_zSP_Mat).Value = _
    wsq.Cells(l_znr, c_qSP_Mat).Value
  wsz.Cells(c_zZ_Gew1, c_zSP_Gew1).Value = _
    wsq.Cells(l_znr, c_qSP_Gew1).Value
  wsz.Cells(c_zZ_Gew2, c_zSP_Gew2).Value = _
    wsq.Cells(l_znr, c_qSP_Gew2).Value
  wsz.Cells(c_zZ_Anz, c_zSP_Anz).Value = _
    wsq.Cells(l_znr, c_qSP_Anz).Value
  wsz.Cells(c_zZ_Preis, c_zSP_Preis).Value = _
    wsq.Cells(l_znr, c_qSP_Preis).Value
  wsz.Cells(c_zZ_Std1, c_zSP_Std1).Value = _
    wsq.Cells(l_znr, c_qSP_Std1).Value
  wsz.Cells(c_zZ_Std2, c_zSP_Std2).Value = _
    wsq.Cells(l_znr, c_qSP_Std2).Value
 
  Else
    MsgBox ( _
      Blatt-> & c_TabName_Ziel & _
     -> in aktiver Arbeitsmappe nicht vorhanden & vbLf & _
      Abbruch :-()
  End If
End If
On Error Resume Next
Set wsq = Nothing: Set wsz = Nothing
On Error GoTo 0
End Sub
 
  • #6
So, eine Letzte Frage zu dem Thema:

wb2.SaveAs FileName:=c_Path_export & \ & Neue Datei.xls

Kann ich hier als Namen den Wert einer Zelle einfügen?

Soweit mal wieder vielen, vielen Dank.
Ich bin grade dran die Tabelle endfertig zu machen!
 
  • #7
Hallo ArcaneLion,

dies ist schon möglich. Sollte nur immer gewährleistet sein, daß dies auch zulässige Zeichen für einen Dateinamen sind. (Nichts ist auch nicht zulässig ! ;D)
Ach sollte der Wert vorher einer String-Variablen zugewiesen werden.

Beispiel:

Code:
Dim s_tmp As String
s_tmp = Ausgabe_ & ActiveWorkbook.Worksheets(Ausgabe).Cells(2, 6).Value & .xls
wb2.SaveAs FileName:=c_Path_export & \ & s_tmp

Gruß Matjes :)
 
  • #8
:)
 
Thema:

Tabelle mit Ein- und Ausgabe + Speichern einzelner Seite

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben