Indien Q:/schijf (netwerk werkgever) niet aanwezig is hiervan een melding geven.

Status
Niet open voor verdere reacties.

Robert Smidt

Gebruiker
Lid geworden
26 mei 2009
Berichten
947
Dag Helpmijers,

Ik werk met de laptop van mijn werkgever en moet zo nu en dan (excel)bestanden via een macro naar de Q:/schijf opslaan. Echter wanneer ik niet op het netwerk zit, maar bijvoorbeeld thuis (vanuit de C:/schijf) aan het werk ben, dan gebeurt het nog wel eens dat ik de macro activeer en dat deze het bestand niet kan vinden met als resultaat dat ik een foutmelding krijg.

Mijn vraag hoe kan ik dit ondervangen dat ik in de macro een code meegeef wanneer de Q:/schijf niet actief is het bestand niet opgeslagen kan worden.

Een antwoord zie ik met belangstelling tegemoet.

Groeten, Robert
 
Indien je de windows scripting host toevoegd aan je VBA heb je toegang tot het FileSystemObject. (tools -> references -> windows script host object model)

Code:
Sub test()
	Dim fso As New FileSystemObject
        Dim qbeschikbaar as Boolean
        qbeschikbaar = fso.DriveExists("q:")
        MsgBox(qbeschikbaar)
End Sub
 
Bedankt

Bedankt voor jouw reactie. Ik zal het morgen thuis uitproberen, vanaf dinsdag ben ik op mijn werk en zal kijken wat dan het resultaat daar is.

Nogmaals bedankt en ik laat je weten of het werkt.

groeten, Robert
 
Hier nog een pure VBA oplossing, ondersteunt een volledig padnaam als wel als een enkel karakter.
wellicht handiger als je een volledig pad hebt, naar een bestand op schijf, zodat je niet eerst de driveletter hoeft af te splitsen.

Code:
Function DriveExists(ByVal drv As String) As Boolean
Dim strDrive As String
    strDrive = Split(CurDir, ":")(0)
    On Error Resume Next
    ChDrive drv
    DriveExists = Err.Number = 0
    ChDrive strDrive
End Function

plaats de functie in je project, eventueel voorafgegaan met het sleutelwoord Public, en roep de volgende code aan in je procedure waar je de Driveletter wilt checken.

Code:
Msgbox DriveExists("Q")

Daarentegen is de code van wampier geschikt om te kijken of Drives zonder media bestaan, bijvoorbeeld een cd station zonder CD. bovenstaande code geeft dan namelijk False als resultaat.

van books online:
For drives with removable media, the DriveExists method returns true even if there are no media present. Use the IsReady property of the Drive object to determine if a drive is ready.

Succes in ieder geval.
Mark.
 
Laatst bewerkt:
Indien de Q drive permanent ge-map-ed wordt is "isready" inderdaad mogelijk beter. De "hack" die mark toepast is inderdaad ook handig, maar na jaren thread-safe te hebben geprogrammeerd wordt ik daar een beetje huiverig van :P Ik maak redelijk vaak gebruik van het filesystemobject en regular expressions. Twee extreem krachtige en onmisbare tools voor mij.

Indien het specifiek om een enkele file gaat kun je ook met FileExists het precies nalopen.
 
Office '97

helaas begrijp ik niet precies wat er bedoeld wordt, ik heb weliswaar wat ervaring met macro's maar is mij de oplossing niet helemaal duidelijk. Nu weet ik ook niet of dit functioneert onder office '97. Ja, wij werken nog steeds met de antieke versie.

In feite moet het voldoende zijn dat het systeem kijkt of de Q:/schijf actief is of niet, dus een specifieke map is niet van toepassing.

Wellicht dat het eenvoudige wordt dat het systeem naar een bepaalde map zoekt op de Q:/schijf, bijv. Q:/schijf/Robert.

Groeten, Robert
 
Dag beste mensen,

Helaas werken bovenstaande oplossingen niet. Daarom heb ik er voor gekozen om een macro te ontwikkelen die naar een bestand zoekt op de q:/schijf. Echter geeft deze nu altijd aan dat deze aanwezig is, wat doe ik hier fout? Even voor de duidelijkheid: onderstaande bestand is aanwezig in het betreffende pad. Wanneer ik offline ga is de Q:/schijf niet meer actief en kan het bestand niet worden gevonden, toch geeft deze aan dat het bestand aanwezig is.

Code:
If Dir("q:\VBPROW62\B_NO_PROJECTEN\Startersbellen\startersbezoek\R.Smidt.xls") = "" Then
MsgBox ("Bestand aanwezig")
Else
MsgBox ("Bestand niet aanwezig")
End If

Alvast bedankt voor jullie hulp.

m.vr.gr. Robert
 
Als Dir als resultaat "" geeft, betekent dat dat het bestand niet (meer) gevonden is.

Dus wat jij waarschijnlijk bedoelt is
Code:
Dim myFile as String
myFile = "q:\VBPROW62\B_NO_PROJECTEN\Startersbellen\startersbezoek\R.Smidt.xls"
If Dir(myFile) = "" Then
    MsgBox "Bestand niet aanwezig"
Else
    MsgBox "Bestand aanwezig"
End If
 
Laatst bewerkt:
Bedankt

Vrijdag zal ik de code proberen en zal ik je berichten of deze werkt.

Nogmaals bedankt

Groet, Robert
 
Helaas, geeft een foutmelding

Helaas werkt de code niet. Zolang in op het netwerk zit is er niks aan de hand maar wanneer ik offline ben herkent hij de q:/schijf niet en geeft deze een foutmelding. Ik denk dat er toch een ander soort code gebruikt moet worden (werk met excel 97).

Ik hoop dat iemand de oplossing voor mij heeft.

Groeten, Robert
 
Excel 97 hanteert een heel ander macro systeem dan 2003 en verder. Integratie met de rest van de omgeving is gewoon veel slechter. 2003 werk ik zelf nog vaak mee en kan ik wel ondersteunen, maar '97 is 15 jaar oud, met nog een ander object model. Verklaard wel waarom onze oplossingen niet werken
 
alternatief

Is er misschien een alternatief te bedenken? Op zich gaan we tzt over op 2010 alleen is het nog niet bekend wanneer.
 
volgens mij is het huidig macrosysteem sinds Excel 97.

Ik denk dat Een late-binding versie van de macro van wampier in post#2 de juiste oplossing geeft

Code:
Sub test()
Dim fso As Object
Dim qbeschikbaar As Boolean

    Set fso = CreateObject("Scripting.FileSystemObject")

    qbeschikbaar = fso.DriveExists("q:")
    MsgBox (qbeschikbaar)

    Set fso = Nothing

End Sub

(ps. Robert had "Microsoft scripting runtime" moeten aanzetten en niet WSH voor het werken van de macro in post #2)
 
Super het werkt

De code werkt nu en geeft geen foutmelding, het enige wat ik graag zou willen is wanneer q: aanwezig is dat ik geen vermelding krijg maar dat hij verder gaat met het programma en als q: niet aanwezig is dat hij in de messagebox de tekst zet: "Geen netwerkaansluiting" en vervolgens weer terug.

Volgens mij moet dat voor jullie een appeltje/eitje zijn.

Nogmaal allemaal bedankt voor het meedenken.

Groeten, Robert
 
Probeer het zoiets:

Code:
Sub VoerCodeUit()
Const SHARE As String = "Q"

    If ShareExists(SHARE) Then
    
        ' << voer code uit >>
    
    Else
        MsgBox "De drive " & SHARE & " is niet actief"
    End If

End Sub

Function ShareExists(ByVal Drive As String) As Boolean
    On Error Resume Next
    With CreateObject("Scripting.FileSystemObject")
        ShareExists = .getdrive(Drive).isready
    End With
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan