Excel VBA: Zapisz plik pod nazwą wskazaną w komórce
Вставка
- Опубліковано 8 лют 2025
- ►malinowyexcel.p...
W tym filmie pokazuję makro, które przy zamknięciu pliku podmienia jego nazwę na taką, jaka jest w określonej komórce arkusza.
Szczegółowy opis prezentowanego zagadnienia, treść formuły oraz plik-gotowiec do pobrania znajdziesz na moim blogu pod tym linkiem:
►malinowyexcel.p...
Znaleźć mnie możesz jeszcze tutaj:
Mój blog: ►malinowyexcel.pl/
Jeśli masz excelowe pytanie - dołącz do grupy na Facebooku:
► / malinowyexcelgrupa
(oprócz pytań i odpowiedzi są tam też rozwiązania prac domowych z webinarów, excedlowe ciekawostki i zadania ;))
Fanpage Malinowego Excela: ► / malinowyexcel
Super przykład do wykorzystania w codziennej pracy na arkuszach.
Cudownie! Cieszę się, że się przyda :)
To chyba na moje zapytanie z 2018 powstało to nagranie^^
To rozwiązanie jest jeszcze lepsze niż zapisywanie poprzez przycisk:)
Usiłuje zrobić Kill warunkowe. Działa częściowo otóż kasuje mi albo każdy poprzedni plik, albo wcale. Mam plik matka o nazwie
-Wycena Gotowych - z niego powstają kolejne pliki w których jest asortyment i dane klienta (nie chce by został usuwany po zamknięciu. Ten plik znajduje się w folderze "Zwykłe")
-potem kolejna wersja dostaje nową nazwę i zostaje wysłana do jednego z 4 folderów: Wycena; Produkcja; Zakończone; Rozliczenie i z tych pierwszych trzech folderów chce by pliki były kasowane. Najczęściej plik trafia z folderu "Zwykłe" do folderu "Produkcja" potem do "Zakończ" na końcu do "Rozliczenie"
Czy jest możliwe by Kill było warunkowe?
U mnie problem polega na tym, że plik jak wędruje do konkretnego folderu to tam otrzymuje nową nazwę. I gdy ma postawiony warunek by nie kasował pliku o nazwie "Wycena Gotowych - 2.xlsm" to nie kasuje w ogóle . A gdy tego warunku nie ma to działa ładnie lecz usuwa mi ten plik "matka"
Chodzi mi po głowie takie rozwiązanie by kill robiło pętlę za każdym razem po zamknięciu pliku i nie wywalało błędu jak nie trafi na plik do usunięcia.
Coś na zasadzie Jeżeli.Błąd. Możliwe jest coś takiego do zrobienia?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim StaraSciezka As String, NowaSciezka As String, Sciezka As String, Nazwa As String, _
StaraNazwa As String, PierwotnaNazwa As String
StaraSciezka = ThisWorkbook.Path
NowaSciezka = ActiveSheet.Range("D16").Value
Sciezka = ActiveSheet.Range("D16").Value & "\"
Nazwa = ActiveSheet.Range("D22").Value & ".xlsm"
PierwotnaNazwa = "Wycena Gotowych - 2.xlsm"
StaraNazwa = ThisWorkbook.Name
If NowaSciezka = StaraSciezka Then Exit Sub
ThisWorkbook.SaveAs Sciezka & Nazwa
If ThisWorkbook.Name "Wycena Gotowych - 2.xlsm" Then Kill StaraSciezka & "\" & StaraNazwa
End Sub
Yes udało się!!! 5 dni i wieczorów i działa:). Mogłem 4 dni temu napisać to by szybciej mnie olśniło hehe.
Nie wiedziałem, że po Else można podać parę linijek czynności (taki głupi błąd^^). Dzięki za materiały włącz reklamy to będę je oglądał chociaż w taki sposób zapłacę ;p
If ThisWorkbook.Name = "Wycena Gotowych - 2.xlsm" Then
ThisWorkbook.SaveAs Sciezka & Nazwa
Else
ThisWorkbook.SaveAs Sciezka & Nazwa
Kill StaraSciezka & "\" & StaraNazwa
End If
@@kamilgrzeszczyk1315 super, że sobie poradziłeś! Ja dopiero odczytałam. Czyli patrez: czeski błąd, ech... jaka czytałam to się zaczęłam dziwić: jak to if nie działa?! Nigdy bym na to nie wpadła na odległość :)
Dziękuję, bardzo ułatwi mi pracę na plikach. Czy jest możliwość dopisania daty z innej komórki podczas zapisywania pliku?
Hej, tak, można dokleić wartość tej komórki poprzez &. Tylko warto to wrzucić jeszcze w funkcję Format (działa analogicznie do excelowej funkcji Tekst). Np. ... & Format(Range("A1"), "yyyymmdd")
@@MalinaC
Dzień Dobry!
Dziękuję za przesłaną informację, ja zrobiłem w ten sposób:
NowaNazwa = ThisWorkbook.Sheets("Kosztorys").Range("Data").Value & ", " & ThisWorkbook.Sheets("Kosztorys").Range("Adres").Value & ".xlsm"
Po uruchomieniu tego makra zapisuje się arkusz z data pobraną z danej komórki i aktualna nazwą z innej komórki.
Mam jednak pytanie:
Czy jest sposób, aby uruchamiając np. makro skopiować bieżący arkusz do innego otwartego pliku (jako kolejna zakładka) z nazwą pobraną z komórki?
Nie wiem czy jasno napisałem o co mi chodzi :)
Pozdrawiam
Jacek K
Thanks, Teammate!!!!
And thank You for continuous support :)
Świetnie działa, fajne rozwiązanie :)
Piotrek, bardzo się cieszę, że działa i że się przyda! :)
@@MalinaC Jako pod procedura ale bardzo użyteczna :)
@@piotrjankiewicz1335 Oho, to tym lepiej, bo do wielokrotnego użycia ;)
Super! Wielkie dzięki! :-)
Cieszę się :)
Super film
Super, bardzo się cieszę!
Super przydatne
Bardzo się cieszę 🥰👍
Witaj Droga Malinko! Super tłumaczysz i pięknie prezentujesz . :-) Czy zechciałabyś mi podpowiedzieć jak zastosować nazwę arkusza w nazwie pliku. w kodzie VBA. Słodko Cię pozdrawiam.
Stasiu, dziękuję :).
A powiedz czy chodzi o to, by zapisać plik pod nazwą, która ma w sobie nazwę konkretnego arkusza?
@@MalinaC Malinko :-) dziękuję, że zainteresowałaś się moim zagadnieniem - tak sobie z nim poradziłem, oglądając kolejny raz Twój webinarium:
Sub SentDyzur()
'
' SentDyzur Makro
'
'
Dim Sciezka As String, Okres As String
Dim OutMail As Object
Dim arkusz As String
Sciezka = ThisWorkbook.Path & "\"
arkusz = ThisWorkbook.ActiveSheet.Name
If Okres = "" Then Okres = "okres"
Range("N24").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-22]C:R[-1]C)"
Columns("D:K").Select
Range("K1").Activate
Selection.EntireColumn.Hidden = True
ActiveWindow.SmallScroll Down:=-12
Range("A1:N25").Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Columns("C:L").Select
Selection.EntireColumn.Hidden = False
Range("R1").Select
Workbooks.Add
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Columns("F:F").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Columns("B:B").ColumnWidth = 8.57
Columns("B:B").EntireColumn.AutoFit
Columns("A:A").EntireColumn.AutoFit
Range("F2:F33").Select
Selection.NumberFormat = _
"_-* #,##0.00 [$zł-pl-PL]_-;-* #,##0.00 [$zł-pl-PL]_-;_-* ""-""?? [$zł-pl-PL]_-;_-@_-"
Application.CutCopyMode = False
ChDir "C:\Users\stako\OneDrive\Dokumenty"
ActiveWorkbook.SaveAs Filename:= _
"C:\Users\stako\OneDrive\Dokumenty\Dyżury\Wysłane\" & "Dyżur" & " " & arkusz & " " & "2021" & ".xlsx" _
Application.Dialogs(xlDialogSendMail).Show
ActiveWorkbook.Close
End Sub
pewnie nie jest to mistrzowski zapis procedury, ale spełnia moje oczekiwanie. :-)
Bardzo serdecznie Cię pozdrawiam :-)
Przydatne, dzięki :)
Super, bardzo się cieszę 🙂
Dzięki, czegoś podobnego szukałem, ale to już sobie przerobię ;)
EDIT: Jednak nie umiem ;/ co należy zmienić aby plik zapisywał się ale nie zamykał pliku?
EDIT2: pokombinowałem i jest
Cieszę się, super, że sobie poradziłeś!
Dzięki.
:) Proszę bardzo :)