Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 64179 Skopiuj do schowka kopiowanie arkusza z pliku X do pliku Y
Autor Wiadomość
kamilkamil
Exceloholic


Posty: 183
Wysłany: 19-02-2019, 11:03   kopiowanie arkusza z pliku X do pliku Y

Cześć.
Potrzebuje kod VBA, dzięki któremu z pliku o nazwie x.xlsm zostanie skopiowany arkusz "1" do pliku y.xlsm .

Ewentualnie kopia zakresu z tego arkusza "1" (zakres A1:BM200) do pliku y.xlsm - wtedy w pliku y.xlsm zrobiłbym arkusz "kopia" i tam byłby "przycisk" który spowodowałby kopie tego zakresu z zachowaniem formatowania. Jeśli w tym roboczym pliku (w x.xlsm ) coś bym pozmieniał , to kolejne uaktywnienie kodu spowoduje wymazanie dotychczasowych danych w arkuszu "kopia" w pliku y.xlsm i skopiują się nowe dane

Dzięki
ID posta: 362883 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 19-02-2019, 12:01   

Takie cóś:
Kod:
Sub Kopia()

Application.DisplayAlerts = False

    Sheets("1").Copy
    ActiveWorkbook.SaveAs Filename:= _
        "y.xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
    ActiveWindow.Close
   
Application.DisplayAlerts = True
End Sub

Przy czym w zalożyłem, ze w pliku y będzie przechowywany tylko arkusz 1. Jeśli ma tam byc cos więcej, najpierw trzeba by plik y otworzyć i dopiero wtedy kopiować do niego arkusz 1.
ID posta: 362887 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 19-02-2019, 12:29   

BrunO no właśnie ten plik nie jest pusty, są w nim inne arkusze
ID posta: 362892 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 19-02-2019, 14:24   

W takim razie spróbuj tego:
Kod:
Sub Kopia2()

Dim wb As Workbook

Application.DisplayAlerts = False



Workbooks.Open Filename:="C:\ ... TU SOBIE ŚCIEŻKĘ WSTAW ... \y.xlsx"
Set wb = ActiveWorkbook
   
On Error Resume Next
    wb.Sheets("1").Delete
On Error GoTo 0

ThisWorkbook.Sheets("1").Copy After:=wb.Sheets(1)
   
wb.Save
wb.Close

Application.DisplayAlerts = True

End Sub
ID posta: 362898 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 21-02-2019, 09:23   

napiszę to jeszcze raz załączając dwa pliki.
Plik w którym dokonuje jakis zmian to plik "plik z danymi.xlsx"
Plik w którym wszsytko ma się dziać to plik "zestawienie.xlsx"

Otwieram plik "zestawienie.xlsx" i klikam na niebieski guzik. Spowoduje to usunięcie z tego pliku arkuszy "1","2","3" , następnie otworzy się plik "plik z danymi.xlsx" (jeśli wyskoczy monit "aktualizuj , nie aktualizuj to ma być nie aktualizuj). Następnie arkusze "1","2","3" zostaną skopiowane do pliku "zestawienie.xlsx" a plik "plik z danymi.xlsx" zamknie się bez zapisywania.
:)

plik z danymi.xlsx
Pobierz Plik ściągnięto 5 raz(y) 9.68 KB

zestawienie.xlsx
Pobierz Plik ściągnięto 5 raz(y) 11.86 KB

ID posta: 362986 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 21-02-2019, 10:20   

Czy dobrze rozumiem, że gdy wybierzesz "Nie aktualizuj", to arkusze 1, 2, 3 i tak mają zostać usunięte z zestawienie.xlsx? Tak przynajmniej wynika z podanej przez ciebie kolejności operacji.

Poza tym, chyba zestawienie.xlsm skoro mają w nim makra działać...

Plik z danymi.xlsx jest w tym samym folderze co zestawienie, czy trzeba go w świecie szukać?
ID posta: 362991 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 21-02-2019, 10:34   

Powiem jak to widzę.

Otwieram plik "plik z danymi.xlsx" , on ma porobione formuł i dlatego po otwarciu pyta o aktualizacje, więc wtedy klikam "aktualizuj". Dokonuje jakiś zmian, modyfikacji w pliku "plik z danymi.xlsx" w arkuszach 1,2,3, zapisałem go, zamykam.

Otwieram plik "zestawienie.xlsm" (m bo marka :) ). klikam na "niebieski guzik" i oto co sie dzieje (co się ma dziać :) ):
- jeśli są arkusze 1,2,3 w pliku zestawienie.xlsm to mają się usunąć (tylko te, bo są też inne)
- następnie otwiera się plik "plik z danymi.xlsx", a ponieważ wyskoczy monit o tej aktualizacji to przy kopiowaniu nie ma potrzeby żeby plik się aktualizował czyli samo żeby zrobiło nie aktualizuj, no i następnie kopia z tego pliku do pliku "zestawienie.xlsm" tylko arkuszy 1,2,3
- po skopiowaniu plik "plik z danymi.xlsx" ma się zamknąć bez zapisywania zmian

No i później juz sobie sam zamykam plik "zestawienie.xlsm" no i klikam sobie zapisz zmiany.

Pliki znajdują się w innych lokalizacjach, lokalizację sobie wpiszę
ID posta: 362993 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 21-02-2019, 11:58   

Źle zrozumiałem to o monicie o aktualizowanie. Myślałem, że to ma być wywołany makrem MsgBox mający zapytać użytkownika czy aktualizować czy nie.

Czyli chodzi o aktualizowanie danych z plików zewnętrznych... No to mamy problem, bo nie bardzo mam pomysł jak ten monit obsłużyć, przynajmniej bez wchodzenia w dziwne i zawodne konstrukcje. Łatwiej byłoby twój niebieski przycisk trzymać w "plik z danymi.xlsm" i z niego robić eksport do zestawienia.
Czy takie rozwiązanie wchodzi w grę?

Druga sprawa to taka, że skoro w pliku z danymi masz odwołania do plików zewnętrznych, to pytanie czy nie ma ich w arkuszach 1, 2, 3? Bo jeśli tak, to one "przelezą" ci do zestawienia, chyba że dodatkowo się ich pozbędziemy.
ID posta: 363006 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 21-02-2019, 12:56   

kopiowane dane mogą być jako same wartości..
Albo BrunO , jeśli to jest problem to może tak ...
W każdym arkuszu ("1","2","3") będzie "przycisk" i np
w arkuszu "1" - gdy sie uaktywni kod przyciskiem to spowoduje wykasowanie wszystkich wartości z tego arkusza, a następnie wkleją się dane z pliku "plik z danymi.xlsx" z arkusza "1" (dane z zakresy A1:AA400) - więszkego zakresu raczej nie będzie.

I to samo będzie w arkuszu "2" i w "3" .. może będzie prościej
ID posta: 363011 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 21-02-2019, 13:07   

Czy kopiowanie całych arkuszy czy tylko wartości z nich, to nie jest problem. Pytanie tylko czy w arkuszach 1, 2, 3 są odwołania do innych arkuszy. Jeśli tak, to po przeniesieniu te odwołania tam zostaną i tylko dlatego muszę wiedzieć, czy nie lepiej przekopiować same wartości.

Najważniejszym pytaniem, na które nie odpowiedziałeś jest:
Czy makro kopiujące może być odpalane z "Plik z danymi"?
Pozwoliłoby to ominąć problem monitu.

Nie widzę potrzeby rozdzielania tego na 3 przyciski. Makra to szczególnie nie uprości, tylko klikania będzie więcej.
ID posta: 363012 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 21-02-2019, 13:21   

BrunO , to trudno, niech zostanie ten monit o aktualizacje.. to będzie tylko jedno kliknięcie dodatkowe. więc jak możesz to niech zostanie z tego pliku "zestawienie.xlsm" :)
Oczywiście kopiowane mogą być wartości :)
ID posta: 363014 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 21-02-2019, 15:14   

Udało mi sie wygooglować obejscie monitu.
Wyszedł mi taki kod:
Kod:
Private Sub CommandButton1_Click()

Dim wb As Workbook
Dim i As Integer

Application.DisplayAlerts = False


Workbooks.Open Filename:=ThisWorkbook.Path & "\plik z danymi.xlsx", UpdateLinks:=0
Set wb = ActiveWorkbook
   
For i = 1 To 3
    ThisWorkbook.Sheets(CStr(i)).Range("A1:AA400").Value = wb.Sheets(CStr(i)).Range("A1:AA400").Value
Next

wb.Close

Application.DisplayAlerts = True

End Sub


zamiast ThisWorkbook.Path wpiszesz sobie ścieżkę do pliku.

Kopiowanie 3 arkuszy zamknąłem w pętli, ale to sprawdzi się pod warunkiem gdy nazwy arkuszy będą kolejnymi liczbami. Jeśli 1, 2 i 3 to tylko przykłady, będziesz musiał pominąć pętle i dla każdego arkusza napisać napisać analogiczny wiersz ze wskazaniem jego nazwy.

zestawienie.xlsm
Pobierz Plik ściągnięto 6 raz(y) 22.75 KB

ID posta: 363025 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 22-02-2019, 11:30   

Tak BrunO , te arkusze to tylko przykład, czyli w tej linijce kodu
Kod:

 ThisWorkbook.Sheets(CStr(i)).Range("A1:AA400").Value = wb.Sheets(CStr(i)).Range("A1:AA400").Value


mam zmienić CStr(i) na nazwę arkusza?
ID posta: 363091 Skopiuj do schowka
 
 
BrunO 
ExcelSpec



Pomógł: 125 razy
Posty: 540
Wysłany: 22-02-2019, 11:54   

Dokładnie, czyli jeśli twoje arkusze to np. styczeń, luty, marzec, to makro będzie wyglądało tak:
Kod:
Private Sub CommandButton1_Click()

Dim wb As Workbook

Application.DisplayAlerts = False


Workbooks.Open Filename:=ThisWorkbook.Path & "\plik z danymi.xlsx", UpdateLinks:=0
Set wb = ActiveWorkbook
   

ThisWorkbook.Sheets("styczeń').Range("A1:AA400").Value = wb.Sheets("styczeń").Range("A1:AA400").Value

ThisWorkbook.Sheets("luty").Range("A1:AA400").Value = wb.Sheets("luty").Range("A1:AA400").Value

ThisWorkbook.Sheets("marzec").Range("A1:AA400").Value = wb.Sheets("marzec").Range("A1:AA400").Value

wb.Close

Application.DisplayAlerts = True

End Sub


Nie mając regularności nazw arkuszy pętlą tego nie załatwimy i każdy arkusz trzeba wymienić "z imienia".

Teoretycznie można wykorzystać numerację faktyczną arkuszy, ale nam łatwiej pracuje się na nazwach, które widzimy niż na ukrytych numerach, więc jeśli nie masz kilkudziesięciu arkuszy do skopiowania, wygodniej pracować na nazwach, nawet jeśli trochę wydłuży to kod i nie będzie on taki do końca napisany zgodnie ze sztuką.
ID posta: 363094 Skopiuj do schowka
 
 
kamilkamil
Exceloholic


Posty: 183
Wysłany: 25-02-2019, 11:56   

BrunO działa ładnie, tylko jest jeden mankament, jeśli coś zmenie w tych arkuszach co są kopiowane to nie daje nowych danych. Czyli może jeszcze warto dopisać żeby najpierw kasował zawartość tych arkuszy (niech będzie tak jak w przykładzie "styczeń", "luty", "marzec" , a pozniej wykonywał czynność kopiowania
ID posta: 363211 Skopiuj do schowka
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum

Strona używa plików cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe