• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA locatie als string

Status
Niet open voor verdere reacties.

Frankell87

Gebruiker
Lid geworden
7 mei 2015
Berichten
141
Hallo,

Mogelijk om de locatie op te slaan als string? Graag zou ik hem 1 keer invoeren en daarna weer oproepen.

onderstaande heb ik nu, maar hij roept hem niet goed op.

gebruik ik ergens een haakje niet goed of zo?

Code:
Dim Locatie As String

Locatie = "I:\Onderhoudsschema\" + ActiveWorkbook.Name
    SetAttr Locatie + ActiveWorkbook.Name, vbNormal 'Maak hier een Normal van
        ActiveWorkbook.SaveAs Locatie
    SetAttr Locatie + ActiveWorkbook.Name, vbReadOnly 'Maak hier een ReadOnly van


Locatie = "I:\Projecten\" + ActiveWorkbook.Name
        ActiveWorkbook.SaveAs Locatie
 
Ik begrijp niet wat je wilt doen.
Hier zet je het pad en de naam van het document in een string:
Code:
Locatie = "I:\Onderhoudsschema\" + ActiveWorkbook.Name

En hier geef je er nogmaals de naam van het document aan mee die dan dus 2x in de opdracht staat:
Code:
SetAttr Locatie + ActiveWorkbook.Name, vbNormal

Gebruik ook voor het aan elkaar plakken van strings geen + maar een &
 
Er staan geen haakjes dus kunnen ze niet verkeerd staan. Een + is normaal gesproken voor het optellen van getallen. Om tekst samentevoegen moet je & gebruiken. Wat verder de vraag is kan ik niet opmaken uit de halve tekst en halve code.

[Edit] ongeveer dezelfde gedachte als edmoor
 
Laatst bewerkt:
Ik denk dat je dit wilt:
Code:
Dim Locatie As String

Locatie = "I:\Onderhoudsschema\" & ActiveWorkbook.Name

SetAttr Locatie, vbNormal   [COLOR="#008000"]'Maak hier een Normal van[/COLOR]
ActiveWorkbook.SaveAs Locatie
SetAttr Locatie, vbReadOnly [COLOR="#008000"]'Maak hier een ReadOnly van[/COLOR]

Locatie = "I:\Projecten\" & ActiveWorkbook.Name
ActiveWorkbook.SaveAs Locatie

Maar het gaat om je open document, dus het zetten van die attributen zal denk ik niet goed gaan.
 
Laatst bewerkt:
Dit is idd wat ik bedoel edmoor.
vorige keer legde je me uit dat dmv de string je niet steeds zelfde gegevens moet ingeven. graag zou ik dat hier ook toepassen.

de + ipv de & begrijp ik van jullie. echter als je een macro opneemt komt hij ook met een +, denk dat ik hem daarvan heb.
maar ook met de versie die je net stuurde werkt hij niet... Raakt hij misschien in de war zo met de "haakjes"?
Het bestand dat geopend wordt om te gaan bewerken is de 2e bestandslocatie, hierop worden geen attributen toegepast
 
"hij werkt niet"
Is niet echt een verduidelijking van wat er dan niet werkt.
 
"hij werkt niet"
Is niet echt een verduidelijking van wat er dan niet werkt.

Hij slaat het bestand niet op.
in de melding (foutcode die hij op een ander tabblad opslaat staat er:
1004 Kan geen toegang krijgen tot Projectplanning Loenen 2018 (Concept FG, niet gebruiken).xlsm.
 
Wat ik al zei, dat zal fout gaan op die SetAttr opdracht. Dat kan niet op een open bestand.
Loop de code maar eens in debug mode door met F8 dan zal je zien dat 'ie daar stopt.
 
ik snap wat je bedoeld. Ben nu ook meer achter wanneer het probleem ontstaat.

zoals je misschien nog kan herrinneren moet hij op meerdere posities opslaan en dan geeft hij op een tabblad weer als er ergens wat mis gaat.
op de eerste locatie wordt hij als readonly opgeslagen en op de 2e als een normaal bestand. degene die dit bestand altijd bijwerkt werkt vanuit het 2e bestand.

het 2e bestand wordt vanuit gewerkt en is dus geopend en de eerste moet dus overschreven kunnen worden. Om dat te doen moet (denk ik) eerst door de attr de readonly eraf en dan opslaan en dan weer als readonly worden opgeslagen (met behulp van de setattr functie). hierna wordt het 'basis' bestand (2e locatie) opgeslagen. hij moet ook in deze volgorde blijven omdat in dit laatste bestand het foutlog dan compleet wordt opgeslagen indien er wat fout gaat ergens in de macro.

Op het moment dat er iets mis gaat op de eerste locatie dan wil hij op de 2e ook niet meer. Zou het kunnen dat hij de 'Locatie-string' niet goed overschrijft?
 
Wat er mis gaat heeft niets met die string te maken als je die gebruikt zoals ik in #4 liet zien.
 
toch gaat het niet helemaal lekker en ik weet niet meer waar ik het moet zoeken. Hieronder de complete code. Ik schijf hem nu in Map1 en daarna in Map2 weg. hij werkt dan goed, deze mappen bestaan ook en daar heb ik hem al eens opgeslagen. als ik de locatie Map1 aanpas naar Map3, (die niet bestaat) en ik dus simuleer dat de map niet beschiikbaar is. dan slaat hij dus ook niet meer op op de 2e plaats...

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'macro versie 17-05-2018
Select Case ThisWorkbook.BuiltinDocumentProperties("Last Author")  'Controle of je schrijfbevoegd bent
            Case "Gierman, Frank", _
        "Laurman, Kees", _
        "Extra naam"
            Select Case MsgBox("Meneer Laurman, wil je het bestand opslaan voordat je het sluit?", vbYesNoCancel, "Opslaan")  '3 keuze box openen, "Ja/Nee/Annuleren"
            
            Case Is = vbYes 'Wanneer "Ja", opslaan op de locaties hieronder
        Worksheets("Fouten").Visible = True
                    Application.DisplayAlerts = False
                    
                    Dim Count As Long, i As Long
                    Dim CountTot As Long
                    Dim Sectie As String
                    Dim Locatie As String
                    On Error GoTo Foutje
                                        
                    Sectie = "Map1"
                    Locatie = "H:\map1\" & ActiveWorkbook.Name
                            SetAttr Locatie, vbNormal  'Maak hier een Normal van
                                ActiveWorkbook.SaveAs Locatie
                            SetAttr Locatie, vbReadOnly 'Maak hier een ReadOnly van
Count = 0
                    Sectie = "Map2"
                    Locatie = "H:\map2\" & ActiveWorkbook.Name
                    ActiveWorkbook.SaveAs Locatie
                    
        Worksheets("Fouten").Visible = False
                    
                    If CountTot = 0 Then
                        MsgBox "Opslag gelukt op alle locaties." & vbNewLine & vbNewLine & "Bestand wordt afgesloten.", vbOKOnly, "Opslaan"
                        Application.Quit
                        Exit Sub
                    End If
                    If CountTot < 4 Then
                        MsgBox "Er zijn in totaal " & CountTot & " fouten geweest tijdens het opslaan.", vbOKOnly, "Opslaan"
                        Application.Quit
                    End If
                    If CountTot = 4 Then
                        
                        Select Case MsgBox("In totaal zijn er " & CountTot & " fouten geweest tijdens het opslaan." & vbNewLine & vbNewLine & _
                        "Er is niks opgeslagen!!! Klik 'Ja' en probeer via 'Opslaan als' het bestand ergens anders op te staan." & vbNewLine & vbNewLine & _
                        "Bij 'Nee' wordt het bestand afgesloten!", vbYesNo, "Opslaan mislukt!")
                    
                        Case Is = vbYes 'Wanneer "Ja", terug naar bestand
                        Cancel = True
                        
                        Case Is = vbNo 'Wanneer "Nee", afsluiten zonder opslaan
                        Application.Quit
                        Exit Sub
                        End Select
                    End If
                    
                Application.DisplayAlerts = False
                
                Exit Sub 'Afsluiten bestand na het opslaan
                
                Case Is = vbCancel 'Wanneer "Annuleren", terug naar bestand
                  Cancel = True
                        
                Case Is = vbNo 'Wanneer "Nee", afsluiten zonder opslaan
                  Application.DisplayAlerts = False
                  Application.Quit
            Exit Sub 'Afsluiten "ingeval van gebruiker..."
            End Select
    Exit Sub
    End Select
        
If ThisWorkbook.ReadOnly Then
Select Case MsgBox("Bestand wordt gesloten, opslaan is niet mogelijk! " _
                & vbNewLine & vbNewLine & "Klik Ok om af te sluiten zonder op te slaan." & vbNewLine & "" _
                & vbNewLine & "Klik annuleren en kies 'Opslaan als' om een persoonlijk bestand te maken." & vbNewLine & "", vbOKCancel, "ReadOnly bestand") 'Igv ReadOnly bestand deze POP-up
                
        Case Is = vbCancel
        Cancel = True
        
        Case Is = vbOK 'Wanneer "Ok", afsluiten zonder opslaan
                  Application.DisplayAlerts = False
                  Application.Quit
End Select
End If

    Select Case MsgBox("Bestand wordt gesloten, opslaan is niet mogelijk! " _
                    & vbNewLine & vbNewLine & "Klik Ok om af te sluiten zonder op te slaan." & vbNewLine & "" _
                    & vbNewLine & "Klik annuleren en kies 'Opslaan als' om een persoonlijk bestand te maken." & vbNewLine & "", vbOKCancel, "ReadOnly bestand") 'Indien je niet gebruiker ... bent deze POP-up
                    
            Case Is = vbCancel
            Cancel = True
            
            Case Is = vbOK 'Wanneer "Ok", afsluiten zonder opslaan
                      Application.DisplayAlerts = False
                      Application.Quit
    Exit Sub
    End Select

Foutje:
Count = Count + 1
CountTot = CountTot + 1
    With Sheets("Fouten") 'fout registratie in tabblad fouten
        rij = .Cells(Rows.Count, "A").End(xlUp).Row + 1
                .Cells(rij, 1) = Err.Number
                .Cells(rij, 2) = Err.Description
                .Cells(rij, 3) = Now()
                .Cells(rij, 4) = Environ("username")
                .Cells(rij, 5) = Sectie
                .Cells(rij, 6) = Count
                            
    End With
    If Count = 1 Then
        MsgBox "Er ging iets niet goed met opslaan: " & vbNewLine & vbNewLine & "Opslag niet gelukt in map van " & Sectie & ".", vbCritical, "Fout"
    End If

    Resume Next
                          
End Sub
 
Laatst bewerkt:
Afgezien van het feit dat het nogal lastig lezen is vanwege de onlogische indeling m.b.t. inspringpunten, zal het mis gaan als het bestand wordt geopend terwijl deze read only is. Je kan een open bestand niet op VbNormal zetten als deze tijdens het openen VbReadOnly was. Je krijgt daar geen foutmelding op maar het bestand kan dan niet worden opgeslagen en gaat het dus alsnog fout.
 
Afgezien van het feit dat het nogal lastig lezen is vanwege de onlogische indeling m.b.t. inspringpunten, zal het mis gaan als het bestand wordt geopend terwijl deze read only is. Je kan een open bestand niet op VbNormal zetten als deze tijdens het openen VbReadOnly was. Je krijgt daar geen foutmelding op maar het bestand kan dan niet worden opgeslagen en gaat het dus alsnog fout.

sorry daarvoor, heb de logica nog niet gevonden daarin. Als je mij hoe ik dat moet doen (wat is de theorie erachter) dan pas ik het aan.

Het bestand dat ik open (in map2) is een normal bestand. Of moet ik misschien bij het eerste opslaan de 2e SetAttr eraf halen en in het SaveAs zetten, vbReadOnly?

dan de 2e opslag met een SaveAs vbNormal?

dus even dat stukje:

Code:
Locatie = "H:\map1\" & ActiveWorkbook.Name
    SetAttr Locatie, vbNormal  'Maak hier een Normal anders kan hij niet opslaan/overschrijven? dacht ik
    ActiveWorkbook.SaveAs Locatie, vbReadonly

Locatie = "H:\map2\" & ActiveWorkbook.Name
      ActiveWorkbook.SaveAs Locatie, vbNormal
 
Die SetAttr heeft op runtime geen nut. De wijziging geldt pas na het sluiten en weer openen van het bestand.
 
Code:
Sub M_snb
   thisworkbook.savecopyas "H:\map1\" & ThisWorkbook.Name
   SetAttr "H:\map1\" & ThisWorkbook.Name,1
end sub
 
Code:
Sub M_snb
   thisworkbook.savecopyas "H:\map1\" & ThisWorkbook.Name
   SetAttr "H:\map1\" & ThisWorkbook.Name,1
end sub

werkt goed snb! bedankt!
Heb wel een SetAttr ervoor gezet die er een vbNormal van maakte eerst. Lijkt of hij hem anders niet wil overschrijven.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan