vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest niedziela, 28 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Kopiowanie danych z zamkniętego skoroszytu


otwartyotwarty rozpoczął: wywyż postów: 4



napisał: Trebor
postów: 1209


umieszczony:
3 stycznia 2014
12:39

  
Zacznijmy od Twojego kodu:
Uwaga ogólna - aby coś zrobić nie trzeba obiektu docelowego zaznaczać czy aktywować. Linie te to przeważnie pozostałość po rejestrowaniu czynności, które wykonujemy. Nie jest to powodem niedziałania, ale powoduje wielokrotne miganie ekranu. Można użyć polecenia Application.ScreenUpdating = False, które ukryje przeskakiwanie na ekranie. Jednak bardziej procesjonalnie jest wyeliminować polecenia typu select, activate. To co według mnie jest niewłaściwe w Twoim kodzie to Application.CutCopyMode = False, w ten sposób nie umieszczasz w schowku to co chciałeś kopiować. Bez tego wiersza Twój kod powinien działać poprawnie, chociaż tego nie testowałem i nie powodować błędu w linii wklejania ActiveSheet.Paste
Ciekawa jest linia Workbooks("KK_User.xls").Saved = True. Linia oszukuje podając informację do systemu o zapisaniu zmian w pliku, chociaż faktycznie tak nie musiało być. Przy zamykaniu pliku nie będzie pytań o zapis zmian. W moim kodzie odpowiada za to linia: Workbooks("KK_User.xls").Close savechanges:=False zamykając plik bez zachowania zmian.
Jedyną linią wartą uwagi w moim kodzie jest Application.EnableEvents = False, która wyłącza zdarzenia np. WorkbookOpen uruchamiane wraz ze startem skoroszytu, a więc nie pozwala na automatyczne uruchomienie UserForma. Należy pamiętać, aby stan wstrzymania zdarzeń na końcu procedury przywrócić do stanu działania.
Czy jakaś linia jest jeszcze dla Ciebie niejasna?
napisał: wywyż
postów: 7


umieszczony:
2 stycznia 2014
22:20

  
Działa!!!
Super, bardzo dziękuję.
Kolejny raz ekspresem i skutecznie.
A czy w wolnej chwili mógłbym prosić o wyjaśnienie dlaczego moje makro nie działało i jak mój cel został osiągnięty?
napisał: Trebor
postów: 1209


umieszczony:
2 stycznia 2014
16:29

  
Spróbuj poniższym kodem:
Sub Makro1()
Application.EnableEvents = False
 Workbooks.Open Filename:=ThisWorkbook.Path & "\KK_User.xls" 'ReadOnly:=True
  Workbooks("KK_User.xls").Worksheets("KK").Range("C4:BE369").Copy Workbooks("Admin.xls").Worksheets("KK_User").Range("C4")
 Workbooks("KK_User.xls").Close savechanges:=False
Application.EnableEvents = True
 Call kolor
End Sub



Daj znać jak działa.
Jeśli wolisz Twój kod to troszkę będziemy musieli go zmienić.
napisał: wywyż
postów: 7


umieszczony:
2 stycznia 2014
11:57

  
Dzień dobry!
Borykam się z podobnym problemem. Też od dłuższego czasu nie potrafię sobie z tym poradzić. Co gorsza raz działa, a raz nie! Tzn. U mnie za którymś razem wywołania makra wyskakuje błąd związany z procedurą Paste w Worksheets. U innych użytkowników błąd jest cały czas i za każdym razem wywołania się pojawia.

Co chciałem osiągnąć pisząc to makro (a raczej przerabiając to co znalazłem w sieci):
- mam dwa skoroszyty: Admin.xls i kk_User.xls
- w pliku kk_user.xls zaraz po otwarciu wyskakuje UserForm, który po wypełnieniu zapisuje wprowadzone dane do arkusza("KK")
- w pliku Admin.xls mam arkusz KK_User do którego mają się skopiować wszystkie wartości, które wprowadza użytkownik w skoroszycie User
- skopiowanie danych odbywa się przy zamkniętym skoroszycie user.xls

Nie udało mi się osiągnąć:
- przy kopiowaniu metodą getValue trwało to bardzo długo, dlatego może być poprzez otwórz user.xls -> skopiuj dane -> zamknij kk_user.xls wklej w odpowiednie miejsce
- jak otwiera się kk_user.xls to wyskakuje userform, nie potrafię tego wyłączyć (a wtedy możnaby dojść do perfekcji żeby nie było nic widoczne)
- jak już kod zadziała, to kopiuje poprawnie, we właściwe miejsca itp, itd. więc dla mnie super, ale wykładam się na błędach, których nie potrafię obejść...
KOD:
Sub Makro1()
Workbooks.Open Filename:=ThisWorkbook.path & "\KK_User.xls" 'ReadOnly:=True
 'Workbooks("KK_User").Activate
 'Unload (frm_kk) 'frm_kk
 Workbooks("KK_User.xls").Activate
 Worksheets("KK").Activate
 Range("C4:BE369").Select 'wybiera komorke z ktorej bedzie kopiowac
 Selection.Copy 'kopiuje
 Application.CutCopyMode = False
 
 Workbooks("KK_User.xls").Saved = True
 ActiveWindow.Close '//zamyka
 
 Workbooks("Admin.xls").Activate
 Worksheets("KK_User").Activate
 Range("C4").Select 'wybiera gdzie kopiowac
 ActiveSheet.Paste ' i kopiuje w zadane miejsce
 Application.CutCopyMode = False
 Call kolor
End Sub



<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z