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

Visual Basic - kopiowanie oraz wyświetlanie danych

23 Lis 2012 09:33 2853 19
  • Poziom 8  
    Witam

    Mam temat do rozwiązania i nie mogę sobie poradzić.

    W skoroszycie excel jest arkusz z danymi. (załącznik).

    Kolejne wiersze w arkuszu to produkty opisane wg kategorii. Kolumny (oprócz kategorii) pokazują stany konkretnego produktu w danym sklepie. Potrzebuję utworzyć tyle arkuszy ile jest sklepów oraz makro, które kopiowałoby dane (w tym przypadku produkty dostępne w danym sklepie wraz z cechami ). Klikam a arkuszu sklep 1 odśwież i pokazują się aktualne dane tylko dla tego salonu. W tabeli zbiorczej będą jeszcze zdjęcia, które również chciałbym kopiować z danymi.

    Jestem początkującym użytkownikiem VB, bardzo proszę o pomoc
  • Poziom 20  
    nie bardzo rozumiem co chcesz zrobić...
    -chcesz napisać własny program i korzystać z excela jako pliku z danymi ??
    -chcesz używać arkusza do edycji danych i przeglądania ??

    wgraj załącznik z nazwą bez polskich znaków bo nie mogę go rozpakować...

    określ co chcesz widzieć i jak ma to wyglądać
    -czy dane mają być wyświetlane w formularzu ??
    -czy dane mają być kopiowane do nowego arkusza??
  • Poziom 8  
    W skoroszycie "proba" w arkuszu "DANE" będę wprowadzał ręcznie lub pociągał z innych źródeł dane. Jest to taka mini baza danych.
    W kolejnych arkuszach tego samego skoroszytu chciałbym wyświetlać dane dla poszczególnych sklepów. Potrzebuję wiec makro które np w arkuszu "sklep 1 " wyświetli mi dane w tym przypadku wszystkie produkty dostępne w tym sklepie (dane z tabeli - arkusz "DANE"). Dane będą ulegać ciągłej modyfikacji wiec makro musi działać na zasadzie kliknięcia i aktualizacji danych - ponownym wczytaniu danych z tabeli zbiorczej z danymi. Dane będą zawierać również zdjęcia - w przykładzie ich nie zamieszczałem.

    Myślę że przykład z załącznika rozjaśni sprawę.
  • Poziom 16  
    W dołączonym pliku napisane jest makro przenoszące dane z arkusza "Dane" do arkuszy sklepów. Po otwarciu arkusza "Sklep x" arkusz jest czyszczony z zawartości i przepisywane są te wiersze z arkusza "Dane", które mają stany niezerowe towaru.
    Z rozszerzeniem kodu o kopiowanie obrazków nie powinno być problemów.
  • Poziom 8  
    Dziękuję za makro działa bardzo dobrze wymaga jednak małej poprawki. Skoroszyt w którym je zamiesciłem oprócz danych odnośnie towaru w poszczególnych sklepach posiada również inne arkusze dotyczące finansów itd. Po kliknięciu w którykolwiek arkusz makro zaczyna szukać odpowiednich danych. Jeśli klikniemy w sklep, nie ma problemu pobierają się dane. Jeśli jednak kliknę jakikolwiek inny arkusz który nie jest związany z danymi całość się zawiesza.


    Jest również problem ze zdjęciami. Mam wrażenie że czyszczenie arkusza przed wczytaniem nowych danych nie usuwa zdjęć. Nakładają się wszystkie na siebie w 1 komórce. Jest jakiś sposób na ich usuwanie ?

    Jak więc zmodyfikować to makro aby odwoływało się tylko do wybranych arkuszy ?
  • Poziom 8  
    Makro działa.

    Mam jeszcze jedną prośbę. Proszę mi pokazać gdzie ustawia się aby kolumny i wiersze, które kopiują się do arkuszy poszczególnych sklepów miały tą samą szerokość i wysokość co dane wyjściowe ?

    I co musi zawierać kod makra aby podczas ponownego wczytywania danych usuwały się nie tylko stare dane, ale również stare zdjęcia.

    Bardzo proszę o pomoc.
  • Poziom 16  
    Poprawiłem makro o usuwanie wszystkich obiektów rysunkowych i o wklejanie komórek z ich formatem. Kod programu wpisany jest w ThisWorkbook w VBAProject.
  • Poziom 8  
    Dzięki za poświęcony czas.

    Coś popsuło się ze zdjęciami. Tzn. wogóle się nie kopiują, albo odrazu usuwają i ich nie widać. Z uwagi na fakt że zdjęcia mają większą wysokość niż standartowa komórka czy mógłbym jeszcze prosić o nadpisanie kodu tak aby kopiowały i wklejały się również wysokości komórek (oprócz szerokości) ustalone w arkuszu dane ?

    Jak marko będzie już dopracowane umieszcze przykład ze zdjęciami, bo myślę że to przydatna rzecz.
  • Poziom 8  
    W załączniku przykład ze zdjęciami. Dodałem nową kolumnę i poprawiłem makro aby się pokazywała, ale zdjęcia się nie ładują.
    Załączniki:
  • Poziom 8  
    Wszystko działa. Jedynie zdjęcia kopiują się w iinym rozmierze niż w arkuszu dane. Tzn kopiują się jako takie cienkie paski na, których nic nie widać. Jesteś w stanie to porawić ? Jak będe miał kompletne makro to na jego wzór będe mógł uczyć się dalej VB.


    Z góry dzięki.
  • Poziom 8  
    To nie była kwestia makra tylko opcji kopiowania obrazków. Już wszystko działa prawidłowo.


    Jeszcze raz dzięki za pomoc.
  • Poziom 8  
    Witam

    Pojawił się kolejny problem do rozwiązania.

    Czy można przerobić makro, które opracowałeś tak aby pokazywało w arkuszach z poszczególnymi sklepami tabele przestawne. Chodzi o podsumowanie danych jakie kopiują się do arkusza poszczególnego sklepu. Tabela powinna zawierać informacje dotyczące Grupy , Podgrupy jako etykiety wierszy (w tab. przest.) oraz wartości dla poszczególnych grup jakie są w danym sklepie jako wartości np suma z sklep1.

    Zrobiłem przykładową tabelę przestawną dla arkusza "sklep1". PrtScrn w załączniku
  • Poziom 8  
    Pomożecie ?

    Próbowałem zarejestrować makro i dopisać do istniejącego ,ale niestety nie działa.
  • Poziom 16  
    Dopisałem tworzenie tabeli przestawnej (dołączyłem plik). Po tych zmianach zawiesza się Excel przy próbie usunięcia arkusza lub po kliknięciu prawym klawiszem. Nie wiem dlaczego tak się dzieje. Wydaje mi się, że poprawniej będzie stworzyć własne zestawienie (takie jak w tabeli przestawnej) i po każdym otwarciu arkusza "Sklep*" wpisywać do tabeli dane.
  • Poziom 8  
    Witam

    Makro działa prawidłowo. U mnie nic się nie zawiesza.

    Czy dałbyś radę zaznaczyć mi w kodzie źródłowym gdzie zmienia się rozmiary tabeli przestawnej ? Jest strasznie rozjechana i ciężko coś z niej odczytać.


    Chciałbym ją trochę zwęzić a nie bardzo wiem jak.


    Dzięki za pomoc.

    Dodano po 21 [minuty]:

    Nagłówki podgrup są w orientacji poziomej - czy da się zmienić pozycję napisów na pionową a następnie maksymalnie zwęzić kolumny ?
  • Poziom 16  
    Po wykonaniu tabeli przestawnej dopisać:
    With Sh.Columns("J:R")
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlCenter
    .Orientation = 90
    .ColumnWidth = 5.29
    End With
    [/code]
  • Poziom 8  
    Działa dzięki :-)

    Coś zepsuło się chyba z czyszczeniem arkusza. Klikając np na sklep1 dane wyświetlają się prawidło. Jak klikniemy sklep 2 również wszystko działa prawidłowo. Problem pojawia się kiedy chcemy raz jeszcze wyświetlić sklep 1 wtedy dane pojawiają się ale wiersze zmieniają swoją wysokość. Zwężają się do bardzo cienkich tak, że zdjęcia są niewidoczne.

    Być może problem leży w tabeli przestawnej - może nie usuwa się przed ponownym wyliczeniem ?

    Dodano po 43 [minuty]:

    Problem rozwiązałem dodając do części kodu która czyści arkusz


    Columns("A:BU").Select
    Selection.Delete Shift:=xlToLeft

    Działa teraz dobrze , ale nie wiem czy to prawidłowe rozwiązanie ?