[ Djuka Maricic @ 24.05.2011. 13:16 ] @
Zanima me da li je moguce da otvorim, pomocu vba, iz jedne radne knjige (Workbook) drugu, ali u tajnosti, tj da se ne vidi njeno otvaranje?
Posto mi je jedan workbook kao baza, pa prilikom pozivanja nekih komandi, potrebno mi je da prepisem (preuzmem) odredjene podatke iz baze. Ako iskljucim Screen Updating (ScreenUpdating=False), opet se vidi otvaranje baze, posto izvrsenja nekih komandi traju malo vise.

Moj kod izgleda ovako:
Code:
Dim baza As Workbook
Dim wsb As Worksheet

Application.ScreenUpdating = False

Set baza = Workbooks.Open("C:\Base.xls)

Set wsb = baza.Sheets(1)


Sad me zanima da li moze nekako da se postavi, da se baza ne vidi da je otvorena, ali da ja idalje mogu preuzimati podatke iz nje.

Pretrazivao sam po forumu, ali nisam uspeo nadjem da slicnu temu, ako sam propustio, posaljite i mi link do te teme.
[ neptuncokg @ 24.05.2011. 15:17 ] @
Ako samo preuzimas podatke iz nekog udaljenog dokumenta, onda nemas nikakav problem sa time da li se vidi ili ne. Ti otvoris bazu, preuzmes podatke, zatvoris bazu i kraj. E sad, ne mogu da verujem da "Application.ScreenUpdating = False" bas ni malo ne ubrza celu proceduru. Osim ako ne preuzimas hiljade podataka. Dakle, ja bih to ovako:

Code:
Sub Preuzmi_Iz_Baze

Dim baza As New Excel.Workbook, wb As Workbook, wsb As Worksheet, ws As Worksheet
 Application.ScreenUpdating = False
    Set baza = Workbooks.Open("C:\Base.xls)  'udaljeni dokumenat - baza
    Set wb = ThisWorkbook                           'tekuci dokumenat - program
    Set wsb = baza.Sheets(1)                       'sheet(1) u bazi
    Set ws = wb.Sheets(1)                           'sheet(1) u programu

   ' sledi preuzimanje podataka, na primer:

   ws.Range("A2:A10") = wsb.Range("A2:A10")
   ws.Range("B5:B15") = wsb.Range("C20:C30")

       baza.Close  'ZATVARA BAZU

End Sub


Ja to koristim u mnogim svojim programima, i nemam problema, odnosno - sve se uradi u "tajnosti", kao sto kazes.
Pozdrav

Edit: dodati tagovi

[Ovu poruku je menjao 3okc dana 25.05.2011. u 12:13 GMT+1]
[ 3okc @ 25.05.2011. 11:18 ] @
Mislim da bi najbolja strategija bila da 'bazu' otvoriš u pozadini još prilikom otvaranja dokumenta i da je onda drziš sakrivenu tokom rada. Na ovaj način bi izbegao primetno usporavanje zbog povremenog povlačenja podataka..
Naravno, nemoj zaboraviti da je onda isto tako zatvoriš, pre zatvaranja dokumenta.
[ Djuka Maricic @ 25.05.2011. 13:23 ] @
Citat:
E sad, ne mogu da verujem da "Application.ScreenUpdating = False" bas ni malo ne ubrza celu proceduru

Application.ScreenUpdating = False veoma ubrzava proceduru, to nema pogovora. Ali se desavalo da sam ponekad morao da uporedjujem neke novoucitane podatke u program sa onima iz baze, pa to ume malo da potraje, nije to nista strasno, samo je moj subjektivni dozivljaj bio da me "nervira" sto se u toj situaciji vidi otvaranje baze.

Citat:
Mislim da bi najbolja strategija bila da 'bazu' otvoriš u pozadini još prilikom otvaranja dokumenta i da je onda drziš sakrivenu tokom rada.

Ako sam dobro razumeo trebao bih da uradim nesto ovako prilikom otvaranja dokumenta:

Code:
Public baza As Workbook

Private Sub Workbook_Open()
Dim eksel2 As New Excel.Application

eksel2.Visible = False
Set baza = eksel2.Workbooks.Add("C:\Base.xls")

End Sub

Ovo sam sad na brzinu testirao, i radi (lakse povlacim podatke, tj brze). Samo ne znam da li si na ovo mislio 3okc?