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

opslaan van bestand

Status
Niet open voor verdere reacties.

gerenmarly

Gebruiker
Lid geworden
10 nov 2009
Berichten
104
Halo
Ik zit met het volgende
ik heb een macro gemaakt voor het opslaan van een bestand
Code:
Sub Opslaan()
'
' Opslaan Macro

Application.ScreenUpdating = False
Application.DisplayAlerts = False


    Range("F2").Select
    ActiveCell.FormulaR1C1 = Time
    Range("J16").Select

 ChDir "C:\"
    ThisWorkbook.SaveAs "C:\" & "Rekenstaat" & Sheets("werkorder 1").Range("C5").Value & ".xlsm"

 If Sheets("werkorder 1").Range("C5").Value = "" Then
    MsgBox ("Voor opslaan eerst Machine nummer invullen.")
    Sheets("Werkorder 1").Select
    Range("C5").Select
    Cancel = True
End If
    
End Sub

als ik nu op opslaan klik krijg ik de vraag eerst machine nummer invullen
klik dan oke en vervolgens slaat hij deze al op met de naam Rekenstaat
vul ik dan cel C5 in en sla hem op ,slaat hij hem opnieuw op met de goede naam
maar heb dan twee bestanden, wat eigelijk niet de bedoeling is
Hoe kan ik dit oplossen

Groetjes Ger
 
Je slaat eerst het document op en controleert daarna pas of het machinenummer wel is ingevuld. Onjuiste volgorde dus. Daarnaast doet Cancel = True in deze context helemaal niets omdat het geen event macro is.
 
Extra info. Wat je aan het begin van je macro uitschakelt moet je aan het einde ook weer terug inschakelen, anders zou je later wel eens voor verassingen komen te staan.
Code:
Sub Opslaan()
'
' Opslaan Macro
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With Sheets("werkorder 1")
        .Range("F2") = Time: .Range("J16").Select
        If .Range("C5").Value = vbNullString Then
            MsgBox ("Voor opslaan eerst Machine nummer invullen.")
            Application.Goto .Range("C5")
            GoTo haserror
        End If
        ThisWorkbook.SaveAs "C:\" & "Rekenstaat" & .Range("C5").Value & ".xlsm"
    End With
haserror:
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
 
hallo Warme Bakkertjs en edmoor

Het eerste stukje code
Code:
Sub Opslaan()
'
' Opslaan Macro

Application.ScreenUpdating = False
Application.DisplayAlerts = False


    Range("F2").Select
    ActiveCell.FormulaR1C1 = Time
    Range("J16").Select

is in orde ,deze slaat de tijd van opslaan op in cel F2

bij het tweede deel daar gaat het fout
Code:
ChDir "C:\"
    ThisWorkbook.SaveAs "C:\" & "Rekenstaat" & Sheets("werkorder 1").Range("C5").Value & ".xlsm"

 If Sheets("werkorder 1").Range("C5").Value = "" Then
    MsgBox ("Voor opslaan eerst Machine nummer invullen.")
    Sheets("Werkorder 1").Select
    Range("C5").Select
    Cancel = True
End If
    
End Sub
hier moet hij eigenlijk eerst kijken of cel C5 van tapblad (werkorder 1) is ingevuld zoja dan opslaan
dit geld ook voor de andere tapbladen die hier nog achteraan komen
deze moeten ook eerst controleren of C5 van tapblad (werkorder 1) is ingevuld
ik hoop dat het iets duidelijker is

Groetjes Ger
 
Je probleem was al wel duidelijk en ik heb uitgelegd wat er aan de hand is.
Heb je al naar de code van onze bakker gekeken?
Die is zo vriendelijk geweest het helemaal voor je uit te schrijven.
 
Laatst bewerkt:
Hallo edmoor
Ja die heb ik bekeken
maar deze werkt in zoverre dat ik hier niet de tijd weergegeven krijg in cel F2
en als ik vanaf het tweede tapblad opsla dan krijg ik een foutmelding dat hij het pad niet klopt , geen verwijzing naar werkorder 1 cel C5
 
Dat zijn extra vragen. Uit je originele code blijkt dat alles op en vanaf blad "Werkorder 1" dient te gebeuren. Daar wordt dus ook de tijd in cel F2 gezet.
Mijn enige opmerking erover is dat je dit:
ThisWorkbook.SaveAs "C:\" & "Rekenstaat" & .Range("C5").Value & ".xlsm"

zou moeten wijzigen in dit:
ThisWorkbook.SaveAs "C:\" & "Rekenstaat\" & .Range("C5").Value & ".xlsm"

Dat moet goed werken, ongeacht wat het actieve tabblad is.
Plaats anders hier je document eens.

N.B.:
Het is tabblad, niet tapblad.
 
Laatst bewerkt:
Hallo edmoor
ik heb hem even getest , maar krijg een foutmelding op deze regel
Rekennstaat en de inhoud van cel C5 vormen samen de naam van het nieuwe bestand
BV RekenstaatK24 waarbij K24 variabel is (dropdownlist)

Groetjes Ger
 
Wat ik al voorstelde, plaats je document hier eens.
 
De Excel file.
 
kan dit ook via personlijke mail
ik wil deze file eigelijk niet op het net zetten
Ger
 
Dat mag ook. Klik op mijn naam en kies Verstuur e-mail.
 
Ben ik het niet mee eens. Kan ik er niets van leren en heeft het forum ook geen nut! Een bestandje is altijd "uit te kleden" dat de kern van de vraag blijft bestaan maar dat er geen gevoelige info meer in blijft staan.:cool:
 
Heb je helemaal gelijk in.
Ik was dan ook van plan de eventueel gevonden oorzaak hier te vermelden.
 
Hallo VenA
als het is opgelost zal ik zeker hier de oplossing posten
want ik leer zelf ook graag van anderen

Ger
 
Ik heb je mail ontvangen en er een reactie op gestuurd.
 
Weet ik wel.;) Maar dat sommigen er zo moeilijk over doen om even een VB te plaatsen blijft voor mij een raadsel.

Edit in reactie op #15

Edit2
@gerenmarly, Is natuurlijk ook altijd goed. Jouw vraag kan ook weer iemand anders vraag zijn.

Nb. Mijn mail kon jullie snelle reacties niet aan. :d
 
Laatst bewerkt:
Vervang in Module 4 de Sub Opslaan door deze van Warme bakkertje die ik iets heb aangepast.

Code:
Sub Opslaan()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    With Sheets("werkorder 1")
        .Range("F2") = Time
        '.Range("J16").Select
        If .Range("C5").Value = vbNullString Then
            MsgBox ("Voor opslaan eerst Machine nummer invullen.")
            Application.Goto .Range("C5")
            GoTo haserror
        End If

        ThisWorkbook.SaveAs "C:\Rekenstaat\" & .Range("C5").Value & ".xlsm"
    End With
    
haserror:
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Zoals je ziet heb ik .Range("J16").Select voorzien van een ' teken. Hierdoor wordt deze niet meer uitgevoerd.
Dit is waar hij op fout ging. De reden waarom is mij onduidelijk, wellicht dat iemand anders daar antwoord op heeft.
De melding is:
Fout 1004 tijdens uitvoering. Methode Select van klasse Range is mislukt.

De reden waarom je die erin hebt staan is mij ook niet duidelijk. Daar kun je zelf waarschijnlijk wel antwoord op geven.
 
Laatst bewerkt:
Heb hem ingevoerd maar krijg een foutmelding op regel
ThisWorkbook.SaveAs "C:\" & "Rekenstaat\" & .Range("C5").Value & ".xlsm"
Rekenstaat is geen map op C
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan