• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Mapping tamamlanana kadar kodu bekletme.

Katılım
27 Haziran 2005
Mesajlar
127
Merhabalar

bir projede , oluşturulan dosyaların normal kullanıcıların erişim yetkisi olmayan bir klasorde tutuyorum.
beforesave eventinda , söz konusu klasörü benim kullanıcı adımla map edip, daha sonra mapi siliyorum.
ancak before save eventinda
shell "net use X: \\gizliklasor username:ben sifrem"
ile mapping komutunu gönderdiğim anda vba bir sonraki satıra geçerek devam ediyor. bu işlem yaklaşık 1 mili saniye sürüyor. Ancak serverdaki klasöre erişip mappingi bitirmesi 2-3 saniye sürüyor.
bu durumda da , bir sonraki satırda yer alan workbook.save komutunda, ilgili klasör / sürücü yolunu bulamadığı için hata veriyor.
bunun için application.wait komutu ile programı 3 saniye bekletmekte problem yok , ancak mapping 1 saniyede biterse 2 saniye çöp bekleme süresi oluşuyor...
ya da mapping 4 saniye sürecek olursa yine hata alıyorum. garanti olsun diyerek 5 saniye desem, çöp süre 4 saniyeye kadar çıkabiliyor, ayrıca 6 saniye sürecek bir mapping de de sıkıntı yaşayacağım ortada...

bu aşamada, before save eventinda

shell "net use X: \\gizliklasor username:ben sifrem"

komutu ile

workbook.saveAs ("x:\")

komutu arasında nasıl bir kontrol sağlayabilirim ?

mantık olarak

Do While ŞART
n=n+1
Loop

şeklinde bekletebilirim diye düşündüm ama ŞART olarak ne vermek gerektiğini bulamadım...

sizce de bu şekilde uygun olur mu ? olur derseniz ŞART olarak yazılması gerekenler, olmaz derseniz önerilerinizi paylaşırsanız çok mutlu olurum...

ayrıca ; tüm bunları bir kenara bırakıp ,
workbook open ve save komutlarında, dosyanın kullanıcı adı/şifrelerinin verildiği gibi X: sürücüsüne BEN kullanıcısı ile bağlanarak kaydet/AÇ diyebiliyor muyuz ? böyle birşey varsa tadından hiç yenmez :)
 
sadece bu kısıma cevap arıyorum, diğer kısımlara göre hallettim.
ama böyle birşey var ise, map ile hiç uğraşmadan , hem daha sağlıklı olur benim için hem de daha kolay...

teşekkürler...

ayrıca ; tüm bunları bir kenara bırakıp ,
workbook open ve save komutlarında, dosyanın kullanıcı adı/şifrelerinin verildiği gibi X: sürücüsüne BEN kullanıcısı ile bağlanarak kaydet/AÇ diyebiliyor muyuz ? böyle birşey varsa tadından hiç yenmez
 
ayrıca ; tüm bunları bir kenara bırakıp ,
workbook open ve save komutlarında, dosyanın kullanıcı adı/şifrelerinin verildiği gibi X: sürücüsüne BEN kullanıcısı ile bağlanarak kaydet/AÇ diyebiliyor muyuz ? böyle birşey varsa tadından hiç yenmez

sadece bu kısıma cevap arıyorum, diğer kısımlara göre hallettim.
ama böyle birşey var ise, map ile hiç uğraşmadan , hem daha sağlıklı olur benim için hem de daha kolay...

teşekkürler...
 
bilmek isteyene...

çözdüm dediğim olayda şu şekilde

basit bir çözüm aslında, neden bu kadar kasıldım anlayamadım :)

eğer YAZMA yetkili kullanıcı ile gitmek istiyorsam....
Kod:
Call MAPLE("YAZ")
normal kullanıcı için ise
Kod:
Call MAPLE("OKU")

bunu yapmamdaki sebep, yetkisiz bir kullanıcı logon oldu ve siz, kullanacağınız klasörü yetkili bir kullanıcı ile map ettiniz
net use q: \\denemeklasoru username:yetkili sifresi

daha sonra da buraya erişimi kısıtlamak için "net use q: /delete" ile mappingi sildiniz...

eğer o yetkisiz kullanıcı sadece net use q: \\denemeklasoru yazarak, username vermeden map ederse, sizin yetkili kullanıcıdan kalan tüm yetkileri kullanıyor (logoff olana kadar tabii ki...)
bu nedenle map edilen klasöre yazma/silme için gitmeyeceksek artık, o zaman da OKU diyerek map ediyorum ki, silemesinler, yazamasınlar, çizemesinler...

aşağıda en basit anlamda kodlar var, ihtiyacınız olursa geliştirirsiniz... error handling vb yok, karşılaşabileceğiniz sorunları siz bertaraf ediniz lütfen...


Kod:
Private Sub MAPLE(neyapak As String)

Shell "net use q: /y /delete"
Do Until maptamammi(q) = "YOK"
Loop


If neyapak = "OKU" Then

Shell "NET USE Q: \\denemeklasoru username:" & Environ("USERNAME")

Do Until maptamammi(q) = "VAR"
Loop

ElseIf neyapak = "YAZ" Then

Shell "NET USE Q: \\denemeklasoru username:YetkiliKullaniciAdi Sifresi"

Do Until maptamammi(q) = "VAR"
Loop

Else

MSBOX "Bi yanlışlık var :)"

End If



aşağıdaki bölümde ise, map gerçekleşene kadar veya silinene kadar excelin beklemesini sağlıyoruz... böylelikle map bulunamadı vb hatalardan kurtulmayı hedefliyoruz...


Kod:
Function maptamammi(drv)
   Dim fso, durum
   Set fso = CreateObject("Scripting.FileSystemObject")
   If fso.DriveExists(drv) Then
      durum = ("VAR")
   Else
    durum = ("YOK")
   End If
   maptamammi = durum
End Function
 
Son düzenleme:
Geri
Üst