Elektroda.pl
Elektroda.pl
X
SterControl
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Save wyrzuca błąd po przejściu makra

m4xon 27 Paź 2015 17:10 663 17
  • #1 27 Paź 2015 17:10
    m4xon
    Poziom 15  

    Witam,

    Mam mały problem z makrem, mianowicie jest nastepujący kod:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    mianowicie makro przechodzi obrabia przez plik i w momencie kiedy dochodzi do zapisu to wywala mnie na "ActiveWorkbook.Save" i kurcze nie wiem co zmienić.

    Z góry dzięki za podpowiedzi

    0 17
  • SterControl
  • Pomocny post
    #2 27 Paź 2015 17:48
    JRV
    Specjalista - VBA, Excel

    Jaka wersje Excel ? Jaky komunikat?

    0
  • #3 27 Paź 2015 17:53
    Nemonek
    Poziom 27  

    Jakiej wersji Excela używasz? Poniżej 2007 roku, to chyba tych stałych nie było (xlOpenXMLWorkbook) i ich nie będzie znał

    0
  • SterControl
  • Pomocny post
    #4 27 Paź 2015 18:07
    JRV
    Specjalista - VBA, Excel

    xlOpenXMLWorkbook - ma byc .xlsx, byc moze juz jest ta nazwa pliku

    Dodano po 4 [minuty]:

    Sprobuj
    ActiveWorkbook.Saveas "nazwa", xlOpenXMLWorkbook

    0
  • #5 27 Paź 2015 19:47
    m4xon
    Poziom 15  

    wersja excela 97-2003 i w górę, ogólne działanie makra polega na tym, że otwiera plik, obrabia go i zamyka z default'ową nazwą, tylko mi wywalało z zapisywaniem. A nie jestem twórcą tego makra, tylko próbuje je dostosować póki co do własnych potrzeb.

    A pliki są w formacie xls

    0
  • #6 27 Paź 2015 20:01
    Nemonek
    Poziom 27  

    m4xon napisał:
    wersja excela 97-2003

    A stała xlOpenXMLWorkbook o wartości 51 określa pliki .xlsx, które są obsługiwane powyżej 2007r.
    Spróbuj ze stałą xlExcel12 o wartości 50, określa pliki .xls

    0
  • #7 28 Paź 2015 09:25
    m4xon
    Poziom 15  

    Wygląda super ale wywala mi błąd "Method Save of object_Workbook failed" na linijce i nie rozumiem dlaczego, może trzeba dodać żeby używał default name?

    0
  • #8 28 Paź 2015 16:09
    m4xon
    Poziom 15  

    Ewentualnie w jaki sposób ustawić aby automatycznie zapisywał w innej lokalizacji bez zmiany nazwy?

    0
  • #9 28 Paź 2015 18:33
    arekkrasnal
    Poziom 20  

    Nie znam makra jakie funkcje wykonuje ale czy nie jest to prośba excela o potwierdzenia zapisania pliku.. którą wyłączamy za pomocą :
    ActiveWorkbook.Saved = True
    czyli nie pytaj o potwierdzenie zapisu

    0
  • Pomocny post
    #10 28 Paź 2015 18:42
    JRV
    Specjalista - VBA, Excel

    m4xon napisał:
    automatycznie zapisywał w innej lokalizacji

    w innom folderze? ma samo go utworzyc? np. dane1, dane2, dane3....

    0
  • Pomocny post
    #11 28 Paź 2015 19:03
    arekkrasnal
    Poziom 20  

    Ja w swoich kopiach pliku robię tak:

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Step 1: Save workbook with new file name
    Dim dostep As String
    Dim katZapis As String
    Dim lenDostep As String

    dostep = ThisWorkbook.Path
    lenDostep = Len(dostep) ' długość ścieżki zapisu
    katZapis = Left(dostep, lenDostep - InStr(StrReverse(dostep), "\")) ' odcięcie ostatniego katalogu

    ' Zapis kopii pliku w katalogu nadrzędnym

    ThisWorkbook.SaveCopyAs _
    Filename:=katZapis & "\kopia\" & _
    Format(Date, "DD-MM-YYYY") & "_" & Format(Time, "HH-MM-SS") & "_" & _
    ThisWorkbook.Name
    End Sub

    0
  • #12 28 Paź 2015 19:39
    m4xon
    Poziom 15  

    JRV napisał:
    m4xon napisał:
    automatycznie zapisywał w innej lokalizacji

    w innom folderze? ma samo go utworzyc? np. dane1,dane2, dane3....


    cokolwiek, byle zadziałało, bo nie jestem w stanie zrozumieć dlaczego teraz nie chce, w innych makrach ten wariant śmiga aż miło a tu klops.
    Wrzucę kod makra, jest to totalna sieczka bo ktoś kiedyś je nagrywał, muszę je uporządkować, ale w pierwszej kolejności muszę rozwiązać problem z zapisem, ale może pomoże:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #13 28 Paź 2015 20:41
    arekkrasnal
    Poziom 20  

    Zacznijmy od początku.
    Jakie są dane w arkuszu,
    Jaki efekt chcesz uzyskać (jakie działanie ma wykonać makro),
    z wklejonego kodu wynika na początku jakieś czyste formatowanie wyglądu ..
    Później jakieś obliczenia przy pomocy formuł excela...
    Następnie jest zapis pliku .. bez sprawdzenia czy plik istnieje i jaka jest jego nazwa.

    Dodano po 15 [minuty]:

    Makro chce zapisać plik z obsługą makra ( *.xlsm) a domyślny format zapisu to *.xlsx.
    Proponuję przed uruchomieniem makra w pliku zapisać go w odpowiednim formacie a dopiero po zapisie włączyć makro.

    0
  • #14 29 Paź 2015 09:21
    m4xon
    Poziom 15  

    W arkuszu są zwykłe dane liczbowe. Proces jest taki, że z programu otrzymuję powiedzmy 20 raportów i odpalam makro, które otwiera każdy z tych raportów, formatuje dane i zapisuje go, twórca tego makra zrobił to tak, żeby napisywało istniejący pliczek, ale w moim odczuciu może zapisywaćw innej lokalizacji jako nowy.

    Pliki raportów są w formacie Excel 97-2003.

    Pokombinowałem z dodaniem poniższego kodu i wtedy każdorazowo prosi o wpisanie nazwy do pliku, więc może jakoś uda się go zmodyfikować...

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #15 29 Paź 2015 10:02
    arekkrasnal
    Poziom 20  

    Podałem makro które zapisane w pliku robi kopię zapasową w innym katalogu.
    Jeśli kopia pliku ma być zapisana w tym samym katalogu to do swojego makra proponuję dopisać:

    Dim katalogZapisu As String ' to wpisujemy na początku deklaracja zmiennej

    katalogZapisu = ThisWorkbook.Path ' odczytamy katalog w którym jest zapisany otwarty plik

    ThisWorkbook.SaveCopyAs Filename:=katalogZapisu & "\" & Format(Date, "DD-MM-YYYY") & "_" & ThisWorkbook.Name ' Zapis kopii pliku w tym samym katalogu pod tą samą nazwą poprzedzoną datą dzisiejszą

    0
  • #16 29 Paź 2015 10:36
    m4xon
    Poziom 15  

    W przypadku "ThisWorkbook" będzie i zapisuje plik z makrem, czyli Macro, a nie pliki, które otwiera, czyli np Raport 1, ...Raport 10. Jak zmieniam ostatnią linjkę na ActiveWorkbook.Save.... to nie zapisuje...

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    coś robię źle pewnie :-)

    0
  • Pomocny post
    #17 29 Paź 2015 13:47
    arekkrasnal
    Poziom 20  

    Rozumiem że w jednym pliku excela jest zapisane makro i otwierasz w excelu następny plik wykonujesz makro i chcesz zapisać zmiany w drugim pliku, otworzyć następny, wykonać makro i zapisać zmiany.
    Jeśli tak to ostatnia linijka powinna mieć postać
    ActiveWorkbook.SaveCopyAs Filename:=katalogZapisu & "\" & Format(Date, "DD-MM-YYYY") & "_" & ActiveWorkbook.Name

    Pozostaw w makro tylko linijki w których występuje zapis: katalogZapisu

    0
  • #18 29 Paź 2015 15:58
    m4xon
    Poziom 15  

    działa znakomicie i wyśmienicie! nie wiem jak Ci dziękować! super - piwo dla Ciebie :-)

    0