Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 17 van 17

Onderwerp: VBA locatie als string

  1. #1
    Vraag is niet opgelost

    VBA locatie als string

    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

  2. #2
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    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 &
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  3. #3
    Mega Honourable Senior Member
    Geregistreerd
    2 maart 2013
    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 aangepast door VenA : 17 mei 2018 om 17:05
    Je kan een paard naar het water leiden, maar je kan het niet dwingen te drinken.

  4. #4
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Ik denk dat je dit wilt:
    Code:
    Dim Locatie As String
    
    Locatie = "I:\Onderhoudsschema\" & ActiveWorkbook.Name
    
    SetAttr Locatie, vbNormal   'Maak hier een Normal van
    ActiveWorkbook.SaveAs Locatie
    SetAttr Locatie, vbReadOnly 'Maak hier een ReadOnly van
    
    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 aangepast door edmoor : 17 mei 2018 om 17:05
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  5. #5
    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

  6. #6
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    "hij werkt niet"
    Is niet echt een verduidelijking van wat er dan niet werkt.
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  7. #7
    Quote Origineel gepost door edmoor Bekijk Bericht
    "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.

  8. #8
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    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.
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  9. #9
    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?

  10. #10
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Wat er mis gaat heeft niets met die string te maken als je die gebruikt zoals ik in #4 liet zien.
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  11. #11
    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 aangepast door FrankGierman : 17 mei 2018 om 21:06

  12. #12
    Hebben jullie nog een fout kunnen vinden?

  13. #13
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    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.
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  14. #14
    Quote Origineel gepost door edmoor Bekijk Bericht
    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

  15. #15
    Tera Honourable Senior Member edmoor's avatar
    Geregistreerd
    8 september 2000
    Locatie
    Zuid-Holland
    Die SetAttr heeft op runtime geen nut. De wijziging geldt pas na het sluiten en weer openen van het bestand.
    "Hardware: The parts of a computer system that can be kicked. "
    Op rechtstreekse vragen via email reageer ik niet. Daar is het forum voor.

  16. #16
    Giga Honourable Senior Member
    Verenigingslid

    Geregistreerd
    12 juni 2008
    Code:
    Sub M_snb
       thisworkbook.savecopyas "H:\map1\" & ThisWorkbook.Name
       SetAttr "H:\map1\" & ThisWorkbook.Name,1
    end sub
    VBA voor smarties
    VBA is een taal die je moet leren met een grammatica- en een woordenboek.

    http://www.helpmij.nl/forum/announcement.php?f=5
    Plaats svp geen bestanden op andere sites; nadat het bestand daar verwijderd is wordt een forumdraad onbegrijpelijk voor anderen.

  17. #17
    Quote Origineel gepost door snb Bekijk Bericht
    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.

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Aanbiedingen