Discussion:
otwieranie plików w VBA
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Sebastian K
2006-01-03 13:28:52 UTC
Permalink
W poprzednim postcie co do otwarcia plików z poziomu VBA bez wiedzy
u¿ytkownika dosta³em od Tajana taki kodzik
Application.ScreenUpdating = False
Workbooks.Open "C:\raport.xls"
'...tutaj kod wczytuj±cy dane
Workbooks("raport.xls").Close saveChanges:=False
Application.ScreenUpdating = True

Niestety plik raport.xls po otwarciu jest widoczny na pasku zadañ i odrazu
staje sie skoroszytem aktywnym.
Czy mozna jako¶ poradziæ aby pobraæ np dane z kolumny A i zapisaæ powtórnie
zmienione dane do tego pliku np bez jego otwierania
tak aby czynno¶æ pobierania i zapisywania danych do pliku by³a ca³kowicie
niewidoczna dla u¿ytkownika?
Ewentualnie dane mog± byæ zapisywane i odczytywane z pliku binarnego lub
sekwencyjnego np. Kol. A - nr zlecenia, kol B -data, kol C - ilo¶æ etykiet.
Tylko jak pobraæ dane z takich plików i je powtórnie zapisaæ??
Z góry dziêki
pxd74
2006-01-03 20:54:58 UTC
Permalink
Post by Sebastian K
W poprzednim postcie co do otwarcia plików z poziomu VBA bez wiedzy
użytkownika dostałem od Tajana taki kodzik
(...)

1. Spróbuj coś takiego:

Dim wbk as Workbook
'...

Application.ScreenUpdating = False
Set wbk = Workbooks.Open ("C:\raport.xls")
wbk.Windows(1).Visible = False
'...tutaj kod wczytujący dane
wbk.Close saveChanges:=False
Application.ScreenUpdating = True

Mam nadzieję, że nie używasz żadnych Select'ów ani Activate, bo w takim
przypadku moga nastapić błędy.


2. Możesz też dodatkowo zmienić opcję "Okna na pasku zadań" na niezaznaczoną
poprzez kod VBA:

Application.ScreenUpdating = False
Application.ShowWindowsInTaskbar = False
Workbooks.Open "C:\raport.xls"
'...tutaj kod wczytujący dane
Workbooks("raport.xls").Close saveChanges:=False
Application.ShowWindowsInTaskbar = True
Application.ScreenUpdating = True


3. Jeśli oba sposoby Ciebie nie zadowolą (plik może mignąc na chwilę na
pasku zadań), to spróbuje tego:

Dim app as application
Dim wbk as workbook
'...

Application.ScreenUpdating = False
Set app = CreateObject("Excel.Application")
Set wbk = app.Workbooks.Open ("C:\raport.xls")
'... tutaj kod wczytujący dane musisz zmienić - zamiast używać
Workbooks("raport.xls") użyj wbk
wbk.Close saveChanges:=False
Set wbk = nothing
application.quit
set app = nothing
Application.ScreenUpdating = True
--
Pozdrowienia
pxd74
SebastianK
2006-01-03 22:06:22 UTC
Permalink
Dziêki wielkie. Napewno spróbujê wszystkich mo¿liwo¶ci. Pozdro Seba
Post by pxd74
Post by Sebastian K
W poprzednim postcie co do otwarcia plików z poziomu VBA bez wiedzy
u¿ytkownika dosta³em od Tajana taki kodzik
(...)
Dim wbk as Workbook
'...
Application.ScreenUpdating = False
Set wbk = Workbooks.Open ("C:\raport.xls")
wbk.Windows(1).Visible = False
'...tutaj kod wczytuj±cy dane
wbk.Close saveChanges:=False
Application.ScreenUpdating = True
Mam nadziejê, ¿e nie u¿ywasz ¿adnych Select'ów ani Activate, bo w takim
przypadku moga nastapiæ b³êdy.
2. Mo¿esz te¿ dodatkowo zmieniæ opcjê "Okna na pasku zadañ" na
niezaznaczon±
Application.ScreenUpdating = False
Application.ShowWindowsInTaskbar = False
Workbooks.Open "C:\raport.xls"
'...tutaj kod wczytuj±cy dane
Workbooks("raport.xls").Close saveChanges:=False
Application.ShowWindowsInTaskbar = True
Application.ScreenUpdating = True
3. Je¶li oba sposoby Ciebie nie zadowol± (plik mo¿e mign±c na chwilê na
Dim app as application
Dim wbk as workbook
'...
Application.ScreenUpdating = False
Set app = CreateObject("Excel.Application")
Set wbk = app.Workbooks.Open ("C:\raport.xls")
'... tutaj kod wczytuj±cy dane musisz zmieniæ - zamiast u¿ywaæ
Workbooks("raport.xls") u¿yj wbk
wbk.Close saveChanges:=False
Set wbk = nothing
application.quit
set app = nothing
Application.ScreenUpdating = True
--
Pozdrowienia
pxd74
Sebastian K
2006-01-04 10:40:54 UTC
Permalink
Ostatni sposób dzia³a SUPER (dzieki) tylko przy instrukcji application.quit
chce wyj¶æ z pliku w którym akurat pracuje makro wiêc usun±³em t± linijkê.
Czy nie bêdzie to mia³o ¿adnych konsekwencji co do reszty kodu?
I jeszcze mam pytanko co do linijki wbk.close savechanges:=false. Czy je¶li
zmieniê parametr na true to zapisze mi plik raport.xls bez pytania
u¿ytkownika bo o takie co¶ by mi chodzi³o?
Post by pxd74
Dim app as application
Dim wbk as workbook
'...
Application.ScreenUpdating = False
Set app = CreateObject("Excel.Application")
Set wbk = app.Workbooks.Open ("C:\raport.xls")
'... tutaj kod wczytuj±cy dane musisz zmieniæ - zamiast u¿ywaæ
Workbooks("raport.xls") u¿yj wbk
wbk.Close saveChanges:=False
Set wbk = nothing
application.quit
set app = nothing
Application.ScreenUpdating = True
--
Pozdrowienia
pxd74
pxd74
2006-01-04 10:51:01 UTC
Permalink
Ostatni sposób działa SUPER (dzieki) tylko przy instrukcji
application.quit
chce wyjść z pliku w którym akurat pracuje makro więc usunąłem tą linijkę.
Czy nie będzie to miało żadnych konsekwencji co do reszty kodu?
Upps..
To ja Ciebie wprowadziłem w błąd. Powinno być:
app.Quit

Jeśli nie będziesz miał tej linii, to w systemie w Menadżerze zadań możesz
mieć kilka instancji Excela.
I jeszcze mam pytanko co do linijki wbk.close savechanges:=false. Czy
jeśli
zmienię parametr na true to zapisze mi plik raport.xls bez pytania
użytkownika bo o takie coś by mi chodziło?
Tak - powinien zapisać bez pytania.
--
Pozdrowienia
pxd74
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Loading...