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

[Excel VBA] przy kopiowaniu zachowane jest tylko formatowanie walutowe

25 Lip 2020 13:55 183 4
  • Poziom 24  
    Witam!
    W procedurze kopiuję pewne dane finansowe z jednego arkusza do drugiego. Stosuję w pętli prostą operację kopiowania:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    Spodziewałem się, że formatowanie nie będzie się przenosić. W praktyce okazało się, że czasem zostaje zachowane a czasem nie. Udało mi się w końcu dojść, że zachowane jest wyłącznie formatowanie niestandardowe, np "_(* # ##0.00_);_(* (# ##0.00);_(* "-"??_);_(@_)".

    I teraz dwa pytania:
    1) pomimo pomocy google nie udało mi się znaleźć dokumentacji, która by to opisywała, może ktoś może wskazać?
    2) jak prosto (i szybko) kopiować wartości w sposób zapewniający uniknięcie takich niespodzianek?
    Pozdrawiam i z góry dziękuję za pomoc!
    Jurek
  • Sklep ElwronSklep Elwron
  • Poziom 34  
    Generalnie zasadą jest, że przy zastosowaniu przypisania kopiowane są tylko wartości, a nie formatowanie. Dotyczy to VBA, przy przypisaniu bezpośrednio w arkuszu wchodzą w grę jeszcze dodatkowe uwarunkowania.
    Twój opis jest bardzo ogólny, nie załączyłeś też przykładowego pliku. Żeby próbować szukać rozwiązania należy najpierw odtworzyć problem. Mnie się to nie udało.
    Ale tu jest bardzo dużo niewiadomych: jaki system operacyjny, która wersja Excela, jaka wersja językowa? Czy podany kod formatu jest w wersji lokalnej (NumberFormatLocal), czy w wersji angielskiej, takiej jak przy definiowaniu właściwości NumberFormat?
    Załącz przykładowy plik i podaj więcej szczegółów.
  • Sklep ElwronSklep Elwron
  • Poziom 24  
    Dziękuję za uwagi.

    Muszę nieco doprecyzować: nie jest konieczne użycie formatowania specjalnego, przenosi się też formatowanie walutowe. Przy okazji, formatowanie specjalne nie zostaje zachowane w swojej oryginalnej wersji, tylko komórki docelowe zostają sformatowane formatem walutowym. Zapewne Excel uznał formatowanie specjalne użyte w moim pliku za odmianę formatowania walutowego, bo istotnie jest to jego mutacja pozwalająca na ograniczenie marnotrawstwa przestrzeni w komórce.

    Załączam plik, w którym badałem ten problem. Arkusz "Sprzedaż F" zawiera dane, których część należy skopiować do arkusza "Dane". W arkuszu "Sprzedaż F" wartości netto mają format walutowy i te kopiują się z zachowaniem formatu, natomiast VAT ma format liczbowy i kopiują się nie zmieniając formatowania docelowego. Makro najpierw czyści obszar, do którego będą kopiowane interesujące nas dane (wartości i formatowanie) a potem wykonuje kopiowanie. Można je wywołać przyciskiem "Kopiowanie". Dodatkowo makro wykonuje jeszcze kopię kopii danych do kolumny Y, co potwierdza że formatowanie nadal zostaje zachowane.

    Rozwiązanie problemu nie jest istotne dla wykonania samego zadania, ale źle się czuję nie wiedząc czego mam się spodziewać. Tym bardziej, że w literaturze spotkałem wprost twierdzenie, że takie kopiowanie nie zachowuje formatowania.

    W tej samej operacji kopiowania spotkałem się też z drugim problemem - wynik operacji na tekstach, co prawda wyglądający jak liczba, jest zapisywany jako liczba, chyba że wcześniej jawnie określi się formatowanie komórek docelowych jako tekst. Opisałem to we wcześniej wysłanym poście: Excel VBA przy kopiowaniu wpisuje tekst jako liczbę. Wynik tej operacji można zobaczyć w kolumnie N "NrKontrahenta", w której wiersze 5 - 9 są przed kopiowaniem sformatowane jako tekst a 10 - 14 (niebieskie) mają format ogólny.

    Pracuję w Excelu w wersji Microsoft Office Professional Plus 2013 na komputerze z zainstalowanym Windows 10 Pro w wersji 1903.
    F_probl...zip Download (29.38 kB)
  • Poziom 34  
    Wydaje mi się, że opisywany problem musi być uwarunkowany konfiguracją oprogramowania. Nie mam w tej chwili dostępu do komputera z Windows 10. Sprawdziłem 2 konfiguracje: Office 2007 z Windows xp oraz Office 2016 z Windows Server 2012 i w obu tych przypadkach problem nie wystąpił, to znaczy komórki po skopiowaniu Twoim makrem miały format Ogólne.
    Zazwyczaj użytkownicy mają problem odwrotny, to znaczy zależy im na skopiowaniu formatowania, a to przy zwykłym przypisaniu się nie udaje.
    W Twoim przypadku wydaje się być prościej, bo po skopiowaniu danych można albo w całym zakresie wyczyścić formatowanie przez ClearFormats (jeśli poza formatami liczb nie ma innych formatowań) lub nadać zakresowi format Ogólne
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod
    Gorzej jeśli każda komórka ma swój własny format liczbowy, który chciałbyś zachować. Wtedy teoretycznie powinno się sprawdzić kopiowanie i wklejanie wartości, ale czy faktycznie się sprawdzi tego nie jestem w stanie przewidzieć bez dostępu do Twojej konfiguracji.
  • Poziom 24  
    Dzięki za poświęcony czas!

    Tak jak napisałem nie mam problemu z wykonaniem tego konkretnego zadania, które sprowadza się do skopiowania wybranych danych i zapisania ich do pliku .csv w celu dalszego przetworzenia w plik JPK_VAT w formacie .xml.

    Próba wyjaśnienia co się dzieje wynika z obaw, że albo moja wiedza o Excel VBA ma istotne luki albo moja instalacja Excel jest wadliwa. Już wcześniej opisałem problem tajemniczego "zawieszania" się excela przy wykonaniu dość prostego makro VBA excel proste makro czasem zawiesza działanie programu . Wiedzę staram się pogłębić, ale przy niemal każdym temacie, za który się zabieram trafiam na takie niezrozumiałe problemy, których nie udaje mi się rozwiązać przeglądając samouczki czy podsuwane przez google wpisy na forach. Jeżeli tak miałaby wyglądać praca z Excel VBA to nie miałoby to sensu.

    Jeżeli na dodatek byle proste rozwiązanie, jakie przygotuję ma na jednym komputerze działać a na drugim nie, to już totalna porażka. Jak trafię na problem, to jakoś go obejdę, ale jak działające u mnie rozwiązanie przestanie działać, gdy je przekażę użytkownikowi, dla którego je przygotowałem albo np. po roku normalnej pracy to do (piip) z takim narzędziem. Jak dotąd korzystałem niemal wyłącznie z funkcji arkuszowych i przez wiele lat nie miałem żadnych dziwnych problemów, choć korzystam z tej samej wersji (instalacji) Excela.