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.

Excel-Visual Basic

19 Lut 2007 13:48 22255 8
  • Poziom 17  
    Witam,

    jakim rozkazem w Visual Basic moge skopiowac w danym pliku Excel caly wiersz (np wiersz 5 i 10) do nowego pliku Excela do wiersza np nr 1 i 2.

    dzieki za pomoc
  • Pomocny post
    Spec od komputerów
    Najprościej:
    Zarejestruj sobie nowe makro wykonując potrzebne czynności a potem zobacz w edytorze VB jak wygląda kod.
    U mnie wyszło coś takiego (kopiowałem jednocześnie 5 i 10 wiersz do wiersza 1 i 2 w drugim arkuszu):
    Code:
    Sub Makro1()
    
        Range("5:5,10:10").Select
        Range("A10").Activate
        Selection.Copy
        Sheets("Arkusz2").Select
        Rows("1:1").Select
        ActiveSheet.Paste
        Sheets("Arkusz1").Select
        Range("A1").Select
        Application.CutCopyMode = False
    End Sub
  • Poziom 17  
    No w sumie bardzo ladnie dziala, z malym wyjatkiem. Dane chcialem wstawic do calkiem nowego i innego pliku. W tym przypadku jest to ten sam plik ale inny arkusz.
    Pozdrawiam
  • Poziom 38  
    Wpisz w kodzie gdzie ma wstawiać (ścieżkę dostępu) i będzie wstawiało tam gdzie będziesz chciał.
    Poz
  • Poziom 17  
    No i jeszcze jedno pytanie: jak mozna zautomatyzowac proces kopiowania wierszy. Chodzi mi o to zeby skopiowac np co piaty wiersz z danego arkusza. Oczywiscie mozna by bylo wpisac:

    Range("5:5,10:10,15:15,20:20,25:25").Select itd

    ale mam w arkuszu okolo 1000 takich wierszy do skopiowania wiec troche za duzo roboty, byloby gdybym musial to wszystko "recznie" zdefiniowac.
    Nie zanm za dobze tego jezyka, ale mniej wiece wyobrazam sobie to tak:
    definujemy zmienna

    n=1000 (liczba wierszy ktore trzeba skopiowac)


    k=n*5 definicja wierszy ktore maja byc skopiowane (dla kazdego n zmienna ka przyjmuje odpowiednio 5,10,15,25 itd)

    no i na koncu
    Range("k:k")

    probowalem to zrobic niestety nie za bardzo mi to dziala.
    Prosze o pomoc i wskazowki
  • Pomocny post
    Poziom 16  
    Cytat:
    Range("k:k")

    Range(k:k) - bez ""

    Dodano po 10 [minuty]:

    Przepraszam za błąd, winno być np.:
    Rows(k).Select
  • Poziom 17  
    dzieki,
    ale samo rows(k) nie rozwiazuje dla mnie niestety problemu. bo trzeba to jeszcze w jakas petle wrzucic...
  • Pomocny post
    Poziom 16  
    Pętlę możesz utworzyć na różny sposób, np.

    Sub Kopia_co_5()

    Application.ScreenUpdating = False

    Dim x As Long
    For x = 1 To 1000 ' na początek wstaw np. 50 zamiast 1000
    Sheets("Arkusz1").Select
    Rows(5 * x).Select
    Selection.Copy

    Sheets("Arkusz2").Select
    Rows(x).Select
    ActiveSheet.Paste

    Sheets("Arkusz1").Select
    Next x
    Range("A" & x).Select
    Application.CutCopyMode = False

    End Sub


    Kopiuje z Arkusza1 do Arkusza2 co piąty wiersz.
    Jak nie masz tak nazwanych arkuszy to zmień nazwy arkuszy lub dopasuj nazwy w makrze do istniejących arkuszy.
    Do innego skoroszytu makro będzie wyglądało podobnie, tylko zamiast Arkusza2 należy wybrać drugi skoroszyt. Najlepiej zarejestrować nowe makro i nagrać czynności i dopasować kod makra do potrzeb.

    To jest tylko zarys. Możesz dopasować sobie różne ustawienia.
    Radzę prześledzić działania makr przez wywołanie krokowe (F8).
    Będąc w edytorze VB, zmniejsż okno edytora tak żeby było widać arkusze i wywołać procedurę krokowo (klawisz F8 lub Polecenie Debud i Step Into.
    Na początek zamiast 1000 wierszy wpisz np. 5 żeby nie trwało to za długo.
  • Poziom 17  
    ok dzieki funkcjonuje bardzo dobrze.