[Excel 2007] Kopiowanie arkuszy z innego pliku
Witam,
Stworzyłem arkusz, który od czasu do czasu musi być aktualizowany. Chcę robić to w ten sposób, że po kliknięciu przycisku "Aktualizuj" usuwane są 2 arkusze z danymi, następnie z pliku na serwerze kopiowane są ich 2 odpowiedniki (po prostu podmieniam arkusze). Niestety mam z tym masę problemów i nie potrafię tego zrobić.
Dodatkowym problemem jest to, że w arkuszach tych są używane nazwy, więc nie chcę kopiować zawartości arkuszy (Excel się pyta przy każdej nazwie czy na pewno chcę zastąpić nazwę ze starego arkusza nazwą z nowego). Poza tym położenie i rozmiar tabel z danymi może się zmienić - tak więc najlepszym sposobem jest podmiana arkuszy.
Udało mi się napisać fragment kodu, który to robi, ale po podmianie nie da się otworzyć pliku - Excel zgłasza jego uszkodzenie.
Teraz kopiuję część zakresów, ale ich rozmiar może się zmienić, więc poniższy kod nie zadziała zawsze:
plik = Application.GetOpenFilename("Arkusz cen (*.xlsx), *.xlsx")
If plik <> False Then
Workbooks.Open (plik)
ActiveWorkbook.Worksheets("Opis silnika").Range("A2:I200").Copy _
(ThisWorkbook.Worksheets("Opis silnika").Range("A2:I200"))
'...kopiowanie innych zakresów...
ActiveWorkbook.Close
End If
Próbowałem też:
Workbooks.Open (plik)
ThisWorkbook.Worksheets("Opis silnika").delete
ActiveWorkbook.Worksheets("Opis silnika").Copy After:=ThisWorkbook.Worksheets(1)
Ale po tym kodzie plik już się nie chce otwierać.
Proszę o pomoc i wskazówki.
Odpowiedzi: 2
Linijkę, o której piszesz wziąłem z pomocy. Zdefiniowałem w niej pliki *.xlsx jako "Arkusz cen" (użytkownikom najlepiej na każdym kroku wszystko tłumaczyć). I jestem jej pewien (testowana w wielu innych projektach).
Większość mojego problemu rozwiązałem, podmieniam arkusze i pozostaje tylko jeden problem. Nazwy zawarte w tych dwóch arkuszach po przeniesieniu do mojego pliku mają nagle zakres "Arkusz", podczas gdy każda normalna nazwa ma zakres "Skoroszyt". W tym momencie formuły odwołujące się do tych nazw generują błąd (nie widzą ich). Jak zmienić zakres nazw? Choćby hurtowo wszystkich nazw zawartych w pliku.
plik = Application.GetOpenFilename("Arkusz cen (*.xlsx), *.xlsx") ???
Sprawdź tą linijkę dla pewności
Poszukaj również pomocy na dziale .NET. Tam raczej znajdziesz odpowiedź.
Strona 1 / 1