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

zaznaczanie obszaru, w którym mają być wstawione komórki

aurora23 10 Lip 2013 09:35 1662 14
  • #1 10 Lip 2013 09:35
    aurora23
    Poziom 10  

    Witam,

    mój problem polega na tym, że muszę napisać makro, które:

    Będzie zliczało ilość rekordów w tabeli A oraz między kolumną "cena" i "podatek" wstawiło kolumnę "kurs" z odpowiednią ilością wierszy (identyczną dla całej tabeli A).

    Mój pomysł wyglądał tak:

    Chciałam odnaleźć w arkuszu komórkę o wartości "podatek", odnaleźć komórkę o wartości "klasa 1", zaznaczyć obszar między tymi komórkami i wkleić nowe komórki, ale coś mi nie wychodzi.

    Z góry dziękuję za pomoc.

    0 14
  • #2 10 Lip 2013 09:54
    cbrman
    Poziom 27  

    Przetestuj poniższy kod

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #3 10 Lip 2013 10:27
    aurora23
    Poziom 10  

    Działa! :)

    Był to pomocniczy arkusz. Załączam plik rzeczywisty, który muszę update'ować, bo próbując przenieść Twój kod @cbrman, oczywiście coś knocę:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #4 10 Lip 2013 11:35
    cbrman
    Poziom 27  

    Prześledziłem kod na Twoim pliku i wygląda na to, że działa poprawnie, jedynie trzeba usunąć poprawność danych z wstawionej kolumny czyli, po:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    wstawić jeszcze:
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Trochę za bardzo mieszasz z kropkami przed obiektami przy używaniu konstrukcji With/End With
    Zamiast
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Powinno być
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    oraz
    zamiast
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    powinno być
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    I analogicznie inne linie kodu.
    Jeżeli podczas działania makra aktywnym arkuszem jest "Arkusz uzgodnieniowy" to Twój kod pomimo tych błędów zadziała prawidłowo, ale jeśli aktywny jest inny arkusz, to kod nie zadziała.

    0
  • #5 10 Lip 2013 14:06
    aurora23
    Poziom 10  

    cbrman napisał:
    Jeżeli podczas działania makra aktywnym arkuszem jest "Arkusz uzgodnieniowy" to Twój kod pomimo tych błędów zadziała prawidłowo, ale jeśli aktywny jest inny arkusz, to kod nie zadziała.


    No właśnie i z tym wiąże się kolejny problem - ogólnie to makro wczytuje plik z określonej ścieżki poleceniem "GetOpenFilename"

    Tylko w ten sposób ma być wczytywane około 1000 arkuszy o identycznej strukturze, więc myślę nad komendą, która od razu "przetworzy" arkusz po arkuszu cały folder danych.
    Czy jest to możliwe?
    Jeśli tak, to proszę o wskazówki.

    0
  • #6 10 Lip 2013 14:40
    cbrman
    Poziom 27  

    Uzgodnijmy jedną sprawę, czy masz za zadanie:
    1. przetworzenie ~1000 arkuszy w jednym skoroszycie
    2. przetworzenie ~1000 skoroszytów i w nich x arkuszy w folderze

    ad 1. jeśli arkusze mają taką samą strukturę to wystarczy pętla po wszystkich arkuszach skoroszytu i wykonanie w niej potrzebnych czynności, coś w stylu:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    ad 2. tu trzeba w pętli otworzyć każdy skoroszyt i wykonać na nim operacje

    0
  • #7 10 Lip 2013 14:57
    aurora23
    Poziom 10  

    Opcja nr 2.

    1 folder, 1000 Skoroszytów (Różne nazwy), po 1 arkuszu w każdym z tysiąca skoroszytów (taka sama nazwa każdego).

    0
  • #8 10 Lip 2013 23:20
    cbrman
    Poziom 27  

    Umieść plik z załącznika w folderze w którym są skoroszyty do przetworzenia, uruchom plik i makro znajdujące się w nim. Oczywiście najpierw zrób sobie test na kilku plikach ;).
    Rozumiem, że pliki do przetworzenia mają taką strukturę jak załączony przez Ciebie plik o nazwie 787.xls

    0
  • #9 15 Lip 2013 12:48
    aurora23
    Poziom 10  

    Genialnie :)
    O to właśnie mi chodziło!!!
    @cbrman - jesteś wielki :)

    Zapytam z ciekawości - czy dałoby się zrobić kolejny krok i przetwarzać w ten sposób foldery?
    Tzn mam makro w katalogu głównym i za pomocą tegoż makra przetwarzam wszystkie podkatalogi, które z kolei zawierają po 1000 Zeszytów, każdy składający się tylko z 1 arkusza o tej samej nazwie?

    0
  • #10 15 Lip 2013 13:02
    cbrman
    Poziom 27  

    aurora23 napisał:
    Zapytam z ciekawości - czy dałoby się zrobić kolejny krok i przetwarzać w ten sposób foldery?
    Tzn mam makro w katalogu głównym i za pomocą tegoż makra przetwarzam wszystkie podkatalogi, które z kolei zawierają po 1000 Zeszytów, każdy składający się tylko z 1 arkusza o tej samej nazwie?


    Pewnie, że się da. I jest to dość proste przy użyciu obiektu File System Object, który został zastosowany w tym projekcie.
    Trzeba jedynie dorzucić kolejną pętlę po podfolderach folderu w którym znajduje się plik.
    Przeanalizuj mój kod z poniższego wątku.
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=12513772#12513772

    0
  • #11 15 Lip 2013 13:46
    aurora23
    Poziom 10  

    Czy to będzie coś w ten deseń? :

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #12 15 Lip 2013 13:59
    cbrman
    Poziom 27  

    Zadeklaruj sobie nowy obiekt np: sbfld który będzie reprezentował kolejne elementy kolekcji podfolderów obiektu oFld.
    Pętla będzie wyglądać w następujący sposób:

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    0
  • #13 15 Lip 2013 14:22
    aurora23
    Poziom 10  

    Naniosłam poprawki, jednak to nie działa.
    Mianowicie śledząc kod (F8) obserwuję, że program zachowuje się tak jakby w podfolderach nie znajdował się żaden plik spełniający warunki:

    Kod: vb
    Zaloguj się, aby zobaczyć kod


    i przeskakuje do końca programu.

    0
  • #14 15 Lip 2013 14:43
    cbrman
    Poziom 27  

    Faktycznie moje niedopatrzenie.
    Zmień

    Kod: vb
    Zaloguj się, aby zobaczyć kod

    na
    Kod: vb
    Zaloguj się, aby zobaczyć kod


    Teraz skoro główny plik z makrem nie znajduje się w folderach w których są przetwarzane pliki to warunek
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    można skrócić do
    Kod: vb
    Zaloguj się, aby zobaczyć kod

    Przetestuj.

    0
  • #15 16 Lip 2013 12:40
    aurora23
    Poziom 10  

    Teraz wszystko gra, stokrotne dzięki :)
    Można się naprawdę wiele od Ciebie nauczyć :)

    0