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.

kopiowanie arkuszy z wybranych plików Excela (VBS)

elwis_85 27 Gru 2010 10:15 3210 7
  • #1 27 Gru 2010 10:15
    elwis_85
    Poziom 9  

    Witam ;)
    Docelowo chciałbym napisać funkcję w vsb przyporządkowaną jakiemuś przyciskowy gdzie po naciśnięciu zostanie otwarte okno w stylu "plik-> otwórz" w oknie tym można by się przemieszczać po dysku i wybierać pliki Excela.
    Po zatwierdzeniu wyboru danych plików chciałbym aby arkusze z wybranych plików Excela zostały przekopiowane do aktualnie otwartego pliku (pliku z kodem VSB na którym pracuje).
    Będę wdzięczny za wszelkie sugestie ;)

    0 7
  • #2 27 Gru 2010 13:24
    walek33
    Poziom 28  

    Cytat:
    Docelowo chciałbym napisać funkcję w vsb

    Co to jest vsb? Próbowałem w Googlach i jedno co mi się kojarzy z elektroniką to (VSB, ang. Vestigial Side Band) - rodzaj modulacji amplitudowej :D Co do Excel-a to masz już coś, czy liczysz na gotowca?

    0
  • #3 27 Gru 2010 13:26
    azra
    Poziom 16  

    Zapewne chodzi o Visual Basic. ;)

    0
  • #4 27 Gru 2010 16:21
    elwis_85
    Poziom 9  

    wybaczcie mi literówkę, oczywiści chodziło mi o VBS (Visual Basic). Moje pytanie dotyczy jednego z elementów składowych programu, który w znaczący sposób usprawniłby obsługę całego programu. Nie mam pojęcia jak mogę to zrealizować, wiec będę wdzięczny za jakiekolwiek naprowadzenie mnie. czy w ogóle jest opcja skopiowania arkusza z pliku Excela bez jego otwarcia ?? albo może jakieś makro kopiujące arkusze z "tradycyjnie" nowootwartych plików kopiowałoby arkusze i zamykało pliki Excela które już skopiowało?? wszelkie rady będą dla mnie bezcenne ;)

    0
  • Pomocny post
    #5 27 Gru 2010 18:47
    adamas_nt
    Moderator Programowanie

    Np filedialog: Link Oczywiście filtr ustaw na pliki Excela. Np (dot. linkowanego przykładu)

    Code:
    .Filters.Add "Pliki Excel", "*.xls"


    Można i bez otwierania. Spróbuj coś z makr Excel4
    Code:
    arg = "'" & p & "[" & f & "]" & s & "'!" & Range(r).Range("A1").Address(, , xlR1C1)
    
    ExecuteExcel4Macro(arg)
    Gdzie p to ścieżka do pliku, f nazwa pliku, s nazwa arkusza, r zakres. Powyższy kod najlepiej wykorzystać jako funkcję wywoływaną z głównej procedury.

    0
  • #6 29 Gru 2010 13:59
    elwis_85
    Poziom 9  

    Filedialog to strzał w 10 ;), nie wiem tylko jak powinna wyglądać funkcja która wykorzystywałaby ścieżkę do pliku Excela (kod do pliku - vrtSelectedItem) do przekopiowania np. wszystkich arkuszy z wybranego skoroszytu do skoroszytu w którym mam napisane makro.

    Code:
    Sub Makro1()
    
    '
    Dim fd As FileDialog
        Dim vrtSelectedItem As Variant

        Set fd = Application.FileDialog(msoFileDialogFilePicker)
       
        With fd
            .Filters.Clear
            .Filters.Add "Pliki Excel", "*.xls"
       
            If .Show = -1 Then
                For Each vrtSelectedItem In .SelectedItems
                   

    'gdzieś tu powinna być funkcja kopiująca arkusze z wybranych skoroszytów


                    MsgBox "Path name: " & vrtSelectedItem
                Next vrtSelectedItem
            Else
            End If
        End With
        Set fd = Nothing
    '
    End Sub


    Dla wielu to pewnie banał ale ja siedziałem cały wieczór szukając czegoś takiego w necie i książce nic, wiec za jakiekolwiek wskazówki będę wdzięczny.
    Z funkcji Execute nie wiele rozumiem ;/ poza tym posiadam nieco mniej danych (bo wyłącznie ścieżkę do pliku) niż ta funkcja wymaga.

    0
  • Pomocny post
    #7 29 Gru 2010 20:03
    adamas_nt
    Moderator Programowanie

    Nazwę pliku(ów, w zależności ile ich zaznaczysz) masz w zmiennej vrtSelectedItem. Nic nie stoi na przeszkodzie aby przypisać ją do zmiennej obiektowej, otworzyć plik, skopiować co trzeba i zamknąć.
    Podpowiem trochę

    Code:
            If .Show = -1 Then
    
                For Each vrtSelectedItem In .SelectedItems
                   
                    Set wkb = Workbooks.Open(vrtSelectedItem)
                    'gdzieś tu powinna być funkcja kopiująca arkusze z wybranych skoroszytów
                    MsgBox wkb.Sheets(1).Name
                    wkb.Close
                    Set wkb = Nothing
                Next vrtSelectedItem
            End If
    Do otwartego skoroszytu odwołujesz się jak w przykładowym Msgbox'ie. Kod kopiowania arkusza nagraj sobie rejestratorem i zaadoptuj...

    0
  • #8 30 Gru 2010 10:09
    elwis_85
    Poziom 9  

    Podsumuje może wątek :) kodzik poniżej kopiuje pierwszy arkusz w wybranych skoroszytów :)
    Specjalne podziękowania dla adamas_nt :)

    Code:

    Sub Makro1()
    '
    Dim fd As FileDialog
        Dim vrtSelectedItem As Variant

        Set fd = Application.FileDialog(msoFileDialogFilePicker)
       
        With fd
            .Filters.Clear
            .Filters.Add "Pliki Excel", "*.xls"
       
            If .Show = -1 Then
                For Each vrtSelectedItem In .SelectedItems
                                 
                    Set wkb = Workbooks.Open(vrtSelectedItem)
                    Sheets(wkb.Sheets(1).Name).Copy Before:=Workbooks("skoroszyt z makrem.xlsm").Sheets(2)
                    MsgBox "skopiowano: " & wkb.Sheets(1).Name
                    wkb.Close
                    Set wkb = Nothing

                Next vrtSelectedItem
            Else
            End If
        End With
        Set fd = Nothing
    '
    End Sub

    0