Centar za edukaciju-BiH


Stranice (2):1,2

#1 13.02.2014 13:35
pmiroslav Van mreze
Clan
Registrovan od:02.02.2009
Postovi:1,458


Predmet:Otvaranje i zatvaranje explorer prozora sa VBA
Ovo mi otvara folder, a kako ga zatvoriti ako je otvoren?

Function OtvoriFolder()
Dim Foldername As String
Foldername = "S:\"
Shell "C:\WINDOWS\explorer.exe """ & Foldername & "", vbNormalFocus
End Function
Pozdrav
Ovaj post je ureden 1 puta. Posljednja izmjena 15.02.2014 14:06 od strane pmiroslav. ↑  ↓

#2 13.02.2014 14:17
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,611


Predmet:Re: Ili možda isto sa VBA
PreuzmiIzvorni kôd (Visual Basic):
  1. Function ZatvoriProgram(Imeprograma)
  2. Dim WO As Object
  3. Dim ProcesO
  4. Set WO = GetObject("winmgmts:")
  5.     Set ProcesO = WO.execquery("SELECT * FROM win32_process WHERE Name = '" & Imeprograma & "'")
  6.     For Each ProcesO In ProcesO
  7.         ProcesO.Terminate
  8.     Next
  9. End Function

Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#3 13.02.2014 16:42
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,611


Predmet:Re: Ili možda isto sa VBA
PreuzmiIzvorni kôd (Visual Basic):
  1. Option Compare Database
  2. Option Explicit
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Const WM_CLOSE = &H10
  6.  
  7. Function ZatvoripProgram()
  8. Dim winHwnd As Long
  9. Dim RetVal As Long
  10. winHwnd = FindWindow(vbNullString, "ImeFoldera")
  11. If winHwnd <> 0 Then
  12. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  13. Else
  14. MsgBox "NIJE OTVOREN"
  15. End If
  16. End Function


Promijeni naslov
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
Ovaj post je ureden 1 puta. Posljednja izmjena 13.02.2014 20:00 od strane zxz. ↑  ↓

#4 14.02.2014 08:09
pmiroslav Van mreze
Clan
Registrovan od:02.02.2009
Postovi:1,458


Predmet:Re: Ili možda isto sa VBA
Nažalost neće da zatvori.
Napravio sam Autoexec makro koji
1. Pokrene Funkciju OtvoriFolder()
2. Otvori Form1
3. Pokrene Funkciju ZatvoriFolder()
    (Ovdje sam preimenovao onu tvoju ZatvoripProgram())
U zadnjoj akciji dobijem poruku "NIJE OTVOREN."

Ali da objasnim zašto mi ovo treba, možda ima bolje riješenje.
Kada pokrenem Front bazu koja ima linkane tablice sa drugog kompjutera često mi se pojavi poruka

'S:\' is not accessible

Zbog toga moram zatvoriti Access sa Ctri+Alt+Delete pa onda u exploreru ručno nači folder gdje su tablice i otvoriti ga da se inicijalizira, zatim se front baza otvori bez problema.
Zato bi želio da mi se po otvaranju to uradi automatski.

Prilozi:
Informacije o tipu datoteke za:rar  OtvoriFolder.rar
Preuzimanja:325
Velicina datoteke:30.68 KB


Pozdrav
↑  ↓

#5 14.02.2014 12:37
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,611


Predmet:Re: Ili možda isto sa VBA
Kako vidim ti nisi dao ime foldera koji zatvara
winHwnd = FindWindow(vbNullString, ImeFoldera)
da kazemo da je ime foldera Baza, pa bi bilo
winHwnd = FindWindow(vbNullString, "Baza")

E sad sto se tice svega ukupno mislim d postoji bolji nacin.
Sta treba uraditi pri pokretanju app.
Prvo treba podici u rs. neku od linkovanih tabela i ukoliko se tu pojavi greska znaci da nisu linkovane tabele.
To bi bila prva procedura napr Provjera.
Druga procedura bi bila da se otvori dialog box za odabir putanje odnosno mdb gdje se nalaze podaci i tu vjerovatno imas u app.
To ti je ona Open File name.

Sada kada smo dobili novu putanju treba nam funkcija relink a mislim da ti i nju imas.
Ovo treba dozvoliti da se ponovi tri puta ukoliko se ne odabere prava baza te da poslije toga zatvori app.

Hajd pokusaj pa ako ne ide zajedno cemo to odraditi.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#6 14.02.2014 13:27
pmiroslav Van mreze
Clan
Registrovan od:02.02.2009
Postovi:1,458


Predmet:Re: Ili možda isto sa VBA
Ovo drugo ću pokuÅ¡ati kasnije.
A kod prvog sam napisao
...
Dim ImeFoldera As String
ImeFoldera = "D:\"
winHwnd = FindWindow(vbNullString, ImeFoldera)
...
Voli bih da i ovo rijeÅ¡imo možda će trebati.
Pozdrav
↑  ↓

#7 14.02.2014 13:41
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,611


Predmet:Re: Ili možda isto sa VBA
PreuzmiIzvorni kôd (Visual Basic):
  1. Function ZatvoripFolder(ImeFoldera As String)
  2. Dim winHwnd As Long
  3. Dim RetVal As Long
  4. winHwnd = FindWindow(vbNullString, ImeFoldera)
  5. If winHwnd <> 0 Then
  6. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  7. Else
  8. MsgBox "NIJE OTVOREN"
  9. End If
  10. End Function

Poziva se:
ZatvoripFolder ("Sys1 (D:)")

Znaci pozivas ga po imenu koje se nalazi na prozoru kada ga podignes.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#8 14.02.2014 14:00
pmiroslav Van mreze
Clan
Registrovan od:02.02.2009
Postovi:1,458


Predmet:Re: Ili možda isto sa VBA
Prozor je kao na slici , a u Immediate sam napisao:

?ZatvoripFolder("Server on 'Zeljko'(Z:)")

i opet oda na MsgBox "NIJE OTVOREN"

PS
Evo sada mi je proradilo bio je Å¡tos u razmaku između 'Zeljko' i (Z:)

Slicice prilozenih slika:
Image1.jpg
Tip datoteke:Informacije o tipu datoteke za:jpg jpg
Preuzimanja:303
Velicina datoteke:90.86 KB
Velicina slike: 651 x 662 Pikseli


Pozdrav
Ovaj post je ureden 1 puta. Posljednja izmjena 14.02.2014 14:07 od strane pmiroslav. ↑  ↓

#9 14.02.2014 19:19
zxz Van mreze
Administrator
Registrovan od:03.02.2009
Postovi:10,611


Predmet:Re: Ili možda isto sa VBA
Jeli sad ovo sve ok.
Ako jeste dobro bi bilo da postavis cio kod sa objasnjenjem.
Podrška samo putem foruma, jer samo tako i ostali imaju koristi od toga.
↑  ↓

#10 15.02.2014 07:58
pmiroslav Van mreze
Clan
Registrovan od:02.02.2009
Postovi:1,458


Predmet:Re: Ili možda isto sa VBA
Pa evo ovako.
Kod je sliedeći_
PreuzmiIzvorni kôd (vbnet):
  1. Option Compare Database
  2. Option Explicit
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  5. Const WM_CLOSE = &H10
  6.  
  7. Function OtvoriFolder()
  8. Dim ImeFoldera As String
  9. ImeFoldera = "D:"
  10.  
  11. Shell "C:\WINDOWS\explorer.exe """ & ImeFoldera & "", vbNormalFocus
  12.  
  13. End Function
  14.  
  15. Function ZatvoriFolder()
  16. Dim winHwnd As Long
  17. Dim RetVal As Long
  18. Dim ImeFoldera As String
  19. ImeFoldera = "D:"
  20. winHwnd = FindWindow(vbNullString, ImeFoldera)
  21. If winHwnd <> 0 Then
  22. PostMessage winHwnd, WM_CLOSE, 0&, 0&
  23. Else
  24. MsgBox "NIJE OTVOREN"
  25. End If
  26. End Function

Ovo sam spremio u jedan modul.
zatim sam napravo makor kojem sam dao ime Autoexec, tako da se pokrene pri otvaranju aplikacije.
Makro ima dvije naredbe
RunCode
Function Name: OtvoriFolder()
i
OpenForm
Form Name: npr. Login Forma

I sad na formi koja se prva otvara na OnClose napisao sam
Call ZatvoriFolder.

E sada opet dolazi problem. Na poslu sam na WindowsXP i sve radi OK, a sada sam kod kuće i tu imam Windows 7 i kada se podigne prozor na njemu ne piÅ¡e ime kao u Win Xp.
Tako da opet neće da se zatvori.
Pozdrav
↑  ↓

Stranice (2):1,2


Sva vremena su GMT +01:00. Trenutno vrijeme: 1: 16 pm.