• 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.

Excel slaat niet op ,bij speciale tekens in de tekst

  • Onderwerp starter Onderwerp starter HBot
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

HBot

Gebruiker
Lid geworden
12 dec 2006
Berichten
325
Beste forum,

Ik heb een document met een macro die opslaat onder de naam in een bepaalde cel, bv E6,
Ondanks een invoer bericht (bij gegevensvalidatie) maken de mensen deze fout regelmatig.

In de tekst staan Excel vreemde tekens zoals,
'/' , '\' , '*' ,'>', '|' of ':'
dan wordt het document niet opgeslagen en gaat de Macro verder met mail verzenden en afsluiten, zonder opslaan

Hoe kan ik een msg-box laten zien (dat deze tekens (Excel vreemde tekens) zijn gebruikt in de tekst, Cel E6) zodat met dit kan aanpassen en de macro wordt afgebroken, en men opnieuw moet invullen en dan weer Marco activeren.

BVD.
Henny
 
In de tekst staan Excel vreemde tekens zoals, '/' , '\' , '*' ,'>', '|' of ':'
Als je de waarde uit een cel gebruikt om een bestandsnaam samen te stellen, dan moet je voorkomen dat de Windows tekens (niet Excel-vreemde tekens, Excel heeft er geen enkel probleem mee) niet in de cel gebruikt mogen worden. Een Msgbox helpt daar uiteraard geen moedertje lief aan. Het is aan jou om te voorkomen dat die tekens er in komen te staan. Bijvoorbeeld door een Inputbox routine te laten lopen die de gebruiker niet alleen waarschuwt, maar de 'verboden' tekens er gelijk uithaalt. Zodat de gebruiker met die Inputbox een juiste naam invult. Die Inputbox laat je net zo lang loopen totdat de naam correct is.
 
OctaFish,

bedankt voor je antwoord,

ik begrijp dat het de verantwoording is van diegene die het invult, ondanks de waarschuwing, gaat het regelmatig mis. nu heb ik wel een msg box als verplichte velden niet zijn ingevuld en men dan niet verder kan totdat dit is opgelost.

Maar in deze loop ik een beetje vast, ik weet niet hoe ik de naam kan filteren op deze tekens.
mijn simpele gedachte was, als ik een Msgbox weergeef als een van deze tekens in de omschrijving zit is men verplicht dit aan te passen anders kan men niet verder.


Ik ben nog niet zo'n expert om een inputbox routine op te zetten. misschien kun je een voorzetje geven.

TNX
 
Ik gebruik er een functie voor om de ongeldige tekens eruit te verwijderen:
Code:
Sub Bestandsnaam()
    Dim Bestand As String
    Bestand = "Sloop:ongel{}dige<>tekens/\er |uit?"
    MsgBox ChkFileName(Bestand)
End Sub

Function ChkFileName(ByRef Bestand As String) As String
    ChkFileName = Bestand
    ChkFileName = Replace(ChkFileName, "/", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "\", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, ":", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "*", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "?", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, """", "'", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "<", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, ">", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "|", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "{", "", 1, -1, vbBinaryCompare)
    ChkFileName = Replace(ChkFileName, "}", "", 1, -1, vbBinaryCompare)
End Function
 
Hi,

ik heb ooit deze gevonden:
Code:
Dim Myarray As Variant
Dim Filename as string

Myarray = Array("<", ":", ">", "|", "/", "*", "\", "?", """")
For x = LBound(Myarray) To UBound(Myarray)
    Filename = Replace(Filename , Myarray(x), "", 1)
Next x


volgens mij zijn { en } wel toegestaan in bestandsnamen (Windows).
 
Edmoor, Iam201,

bedankt voor de reactie,

ik wil beide uitproberen maar, met mijn gebrekkige kennis,
voor zover ik begrijp.
Deze code checkt de file-name voordat deze opgeslagen wordt? en verwijdert dan de tekens alvorens het bestand op te slaan.

klinkt goed,
waar moet ik deze code plaatsen, in een aparte module, voor in de code van het opslaan of in "ThisWorkbook"


extra check,
omdat het document geopend wordt als een sjabloon heb ik aangegeven dit document een andere naam te geven in Cel E6
(in combinatie met een documenten teller krijg ik dan de naam van het document (nr + naam E6) in F1) en wordt deze dan afhankelijk van de afdeling (8 stuks) in de juiste map geplaatst.

als het document aangepast wordt is er nog een check of de naam gelijk is gebleven
hiermee vermijdt ik steeds de melding dat het document al bestaat.

Code:
If ActiveWorkbook.Name = Sheets("Klachtenformulier").Range("F1") & ".xlsm" Then
ActiveWorkbook.Save

blijft jullie code dan ook werken. (ff check voordat ik het uit probeer)

BVD
 
Code:
Dim Myarray As Variant
Dim Filename as string

Myarray = Array("<", ":", ">", "|", "/", "*", "\", "?", """")
FileName = Sheets("Klachtenformulier").Range("F1")
For x = LBound(Myarray) To UBound(Myarray)
    Filename = Replace(Filename , Myarray(x), "", 1)
Next x
ActiveWorkbook.Name = FileName & ".xlsm" 
ActiveWorkbook.Save
 
Of:
Code:
With CreateObject("VBscript.Regexp")
       .Global = True
       .Pattern = "([\\//:*?<>|])"
       ThisWorkbook.SaveAs "d:\users\HBot\documents\" .Replace(Range("e6").Value, "") & ".xlsm", 52
  End With
 
Waarom zou je gebruikers zelf namen laten verzinnen ?
Je kunt documenten geautomatiseerd een uniek kenmerkende naam geven (=het achterliggende idee bij ieder archiefsysteem).
 
Octafish

Ik zie niet dat de tekens worden vervangen door "" in cel F1
De code doorloopt de loop 8x en gaat vervolgens verder,

HSV,
De optie SaveAs is een lastige omdat het document in meerdere mappen opgeslagen kan worden, en moet dan de hele code aanpassen. maar wie weet.

De naam (in E6) is een link naar een veroudert ERP systeem (gekoppeld aan de code in E5) waarin deze tekens nog werden gebruikt.

De Optie van Octafish lijkt de meest simpele.

ik stuur het document mee in uitgeklede vorm, veel codes en data verwijdert (bedrijfsgevoelige informatie)
hopelijk is het eenvoudig op te lossen.

gr
henny
 

Bijlagen

Ik probeer iets met substitueren, dat zou ook moeten werken als de file-naam naar een cel verwijst.

Maar ik blijf steken dat ik dit maar 1 keer kan uitvoeren,
=SUBSTITUEREN(F1;"*";"_")

Ik heb nog gezocht in het forum op "meerdere tekens substitueren" (ook op het NET) maar kan niet iets vinden om meerdere substitueren kan combineren, wel in allerlei andere combinaties met "deel" en "vind.spec" enzo, maar krijg deze ook niet sluitend.
Iemand die hier meer in thuis is om deze formule op de juiste manier te combineren.
 
Excelbat,
Bedankt, dit ziet er inderdaad simpel uit,
=SUBSTITUEREN(SUBSTITUEREN(SUBSTITUEREN(F1,"/","."),"*","."),"",".")

maar ik krijg een fout melding "er is een fout gevonden in deze formule... " "Wilt u geen formule typen etc.."
ook als ik probeer met ; er tussen en extra cel verwijzing lukt het niet

het is nml zo dat niet altijd deze tekens in de tekst voorkomen, maar als ze voorkomen wil ik ze vervangen, zodat het opslaan geen probleem oplevert.
 
Voorlopig opgelost door de formule te kopiëren naar nieuwe cellen en elke keer teken vervangen, de laatste cel zonder tekens is dan de bron voor de filenaam.
mocht er deze week geen definitieve oplossing komen sluit ik deze vraag wel.

Bedankt voor het meedenken.
Gr
 
Ik zie het probleem niet.
 
Harry,

het probleem is dat ik de formule niet aangepast krijgt met 8 x =SUBSTITUEREN(SUBSTITUEREN(SUBSTITUEREN..
dus heb ik nu de formule substitueren van het woord in cel A1 en dan deze 8 keer herhaald in een nieuwe cel A2=SUBSTITUEREN(A1;"/";"") ...,A3, enz.. (in een apart tabblad)

Het werkt nu wel, niet zo netjes.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan