3k Aufrufe
Gefragt in Tabellenkalkulation von ulle-gt5 Mitglied (183 Punkte)
Hallo,ich brauch mal wieder Hilfe!!
Hab mir mit eurer Hilfe ein Makro zusammengebaut,
was auch gut und schnell arbeitet.(im Versuch)
Also
1 Schritt- Speichern OK
2 Schritt- Drucken OK
3 Schritt- Datenblock zusammenstellen und verschieben OK
jetzt kommt's -jetzt auf die Ursprungsmappe zurück den erstellten Datenblock löschen und C5 aktivieren.(neuen Eingabe beginnen)
Also wenn ich die Mappe gespeichert habe heißt sie nicht mehr
"Einzelteil". Wie kann das Makro also die oben gespeicherte Mappe finden.
Danke schon mal für euere Mühe
Schönen Abend
Gruß
Ulle


Sub DateiSpeicherDruckenGIVspeichern()
Dim verz, dname As String
verz = Cells(76, 5)
dname = Cells(75, 5) & ".xls"
ActiveWorkbook.SaveAs Filename:=("g:\" & verz & "\" & dname) ', FileFormat:=xlNormal
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Application.ScreenUpdating = False

ActiveSheet.Range("B57:J58").Copy 'Angebot
'Sheets("DATENSAMMLUNG").Select
Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column + 3).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column - 2) = ActiveSheet.Range("C6").Value

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column - 1) = ActiveSheet.Range("C5").Value

Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column + 12) = ActiveSheet.Range("E60").Value

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column + 2) = ActiveSheet.Range("E10").Value

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column + 1) = ActiveSheet.Range("C10").Value

Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column + 0) = ActiveSheet.Range("G5").Value

Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0) = ActiveSheet.Range("C45").Value

Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0) = ActiveSheet.Range("C42").Value

Range("c65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0) = ActiveSheet.Range("C43").Value

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0) = ActiveSheet.Range("C44").Value

ActiveSheet.Range("B30:B40").Copy
Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 1, ActiveCell.Column + 0) = "."

Range("C65536").End(xlUp).Select
Sheets("Einzelteil").Select
Application.CutCopyMode = False

ActiveSheet.Range("A131:O145").Copy
Windows("Stammdaten.xls").Activate
Sheets("Datensammlung").Select
Range("C65536").End(xlUp).Select
Cells(ActiveCell.Row + 3, ActiveCell.Column - 2).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False



Windows("Einzelteil.xls").Activate
Sheets("Einzelteil").Select

Range("A131:O145").Select
Application.CutCopyMode = False
Selection.ClearContents

Application.CutCopyMode = False
Range("C5").Select
End Sub

8 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi ulle ^^

ThisWorkbook
ist die mappe woraus das makro gestartet worden ist

ein beispiel der syntax
ThisWorkbook.ActiveSheet.Range("B30:B40").Copy


und wenn es darum ginge den zuletzt gespeicherten dateinamen festzuhalten

dann halte den dateinamen mit einer variablen fest,auf der du spaeter zugreifen kannst

gruss nighty
0 Punkte
Beantwortet von ulle-gt5 Mitglied (183 Punkte)
Hallo nighty,
das hast du schön gesagt und so habe ich es mir auch vorgestellt . Ich kann lesen und nachschlagen was ich will, ich begreife es erst wenn ich es mal gesehen habe.Das ganze VBA macht ja Sinn, wenn man es verstanden hat.
Könntest du mir an Hand meines Makros mal die Variable festlegen und zeigen wie man sie aufruft (die Variable oder Datei)
schon mal Danke
Gruß
Ulle
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ulle ^^

2 beispiele

gruss nighty

Sub Beisp0fuerEineDatei()
Dim SaveDaten As String 'zum anfang setzen
SaveDaten = "g:\" & verz & "\" & dname 'vor der zeile setzen wo gespeichert wird.SaveDaten beinhaltet nun den kommpletten pfad wie dateinamen
End Sub

Sub Beisp1fuerMehrereDateien()
ReDim SaveDaten(0) As String 'zum anfang setzen
Dim IndexZaehler As Integer 'zum anfang setzen
Dim Zaehler As Integer 'zum anfang setzen
SaveDaten(IndexZaehler) = "g:\" & verz & "\" & dname 'vor der zeile setzen wo gespeichert wird
IndexZaehler = IndexZaehler + 1 'nach der zeile setzen wo gespeichert wird
ReDim Preserve SaveDaten(IndexZaehler) 'redimensionierung eines eindimensionalen arrays,preserv damit nix verloren geht
'ein beispiel einer schleife um das array auszulesen
For Zaehler = 0 To UBound(SaveDaten(0)) 'beispiel einer schleife wie das array auszulesen waere,Ubound um das ende des array zu erfassen
Cells(Zaehler, 1) = SaveDaten(Zaehler) 'hier hab ich als beispiel cells als ausgabe gewaehlt,genauso koennte es eine abfrage sein etc.
Next Zaehler 'ende der schleife
End Sub


noch ergaenzend zu deinem code,versuche mal die selectionen zu minimieren soweit du kannst,spaeter bei mehr erfahrung kommplett verbannen

diese sind sehr zeitintensiv,aber nicht zwingend erforderlich :-)
0 Punkte
Beantwortet von ulle-gt5 Mitglied (183 Punkte)
Hallo nighty,
erst mal danke für deine Antwort, ich habe noch nichts versucht!
Ich klaube nur wir machen es zu kompliziert, hier mal eine Erklärung.
Die Mappe Stammdaten mit Blatt Datensammlung ist immer geöffnet!!!!
Die Mappe Einzelteil mit Blatt Einzelteil wird geöffnet,ein Einzelteil wird kalkuliert und unter
verz = Cells(76, 5)
dname = Cells(75, 5) & ".xls"
ActiveWorkbook.SaveAs Filename:=("g:\" & verz & "\" & dname) ', FileFormat:=xlNormal

gespeichert.
Nun wird ein Datenblock erzeugt und auf Stammdaten/Datensammlung gespeichert.
Soweit funktioniert alles!!!!
Jetzt möchte ich in das offene aber nicht aktive Blatt mit dem Namen dname zurück und dort weiter arbeiten.

Also ich glaube man muß im Makro bei
Windows("Einzelteil.xls").Activate
Sheets("Einzelteil").Select

nur was anderes einsetzen, aufrufen oder so.
Ich hoffe ich habe es verständlich erklärt
viele Grüße
Ulle
0 Punkte
Beantwortet von
Hallo Ulle,
versuch es mal mit den SedKeys:
SendKeys "%{TAB}"
Es wird die letzte aktive Seite angezeigt.
Gruß
fedjo

Windows("Einzelteil.xls").Activate
Sheets("Einzelteil").Select
0 Punkte
Beantwortet von ulle-gt5 Mitglied (183 Punkte)
Hallo ihr ,
ist ja schön das mein Problem jetzt schon zwei beschäftigt.
Also Fedjo dein SendKeys "%{TAB}" funktioniert, ich sehe
das richtige Blatt aber es ist nicht Aktiv.
Alle weiteren Befehle werden ignoriert.

Hi nighty,
die Sache mit der Variablen ist ganz interesant. Ich hab nur noch nicht verstanden, wie ich die Variable wieder aufrufe.
gruß
Ulle
0 Punkte
Beantwortet von
Hallo Ulle
verz = Cells(76, 5)
dname = Cells(75, 5) & ".xls"
ActiveWorkbook.SaveAs Filename:=("g:\" & verz & "\" & dname) ', FileFormat:=xlNormal


Ich gehe davon aus wenn du die Arbeitmappe speicherst, das der Dateiname aus Zelle E75 kommt.
Wenn die gespeicherte Datei aktiviert werden soll dann vielleicht so:

Sub Arbeitsmappe()
Dim strDateiname As String
strDateiname = Range("E75").Value & ".xls"
Windows(strDateiname).Activate
Sheets("Tabelle1").Activate
End Sub

Gruß
fedjo
0 Punkte
Beantwortet von ulle-gt5 Mitglied (183 Punkte)
Hallo Fedjo,Hallo nighty,
ihr habt mein Problem beseitigt. Danke!!!!
Ich habe die Ganze Zeit die Lösung vor Augen und habe es nicht geschnallt.
Ich habe die ganze Zeit versucht was zu öffnen was es garnicht gab.
Das Tabellenblatt behält doch seinen Namen und ich wollte es
unter dem gespeicherten Namen öffnen.
Das sind so die Lapalien die einen tagelang aufhalten.
noch mal besten Dank euch beiden.
Ein schönes Wochenende wünsche ich euch.
gruß
Ulle
...