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

Niet overschrijven van bestaande file.

Status
Niet open voor verdere reacties.

blackbox

Gebruiker
Lid geworden
7 feb 2007
Berichten
8
Ik heb een macro, waarmee een file template wordt geopened. Deze template wordt vervolgens opgeslagen onder een nieuwe naam, bv NAAM1
Echter, als NAAM1 al bestaat komt de volgende melding:
A File named NAAM1 already exists. Do you want to replace it?

Wanneer ik "ja" kies wordt de file overschreven. Geen Probleem.
Echter wanneer ik "Nee" kies het volgende:Runtime error 1004. method Save as of object workbook failed.
De macro wordt dus niet afgesloten.
Heeft iemand hier een oplossing voor.
Tx
 
Post je code (volledige sub - incl. afhankelijke subs en functions) eens, dan kunnen we er naar kijken.
Welke Excel versie gebruik je?
 
Niet opslaan bestaande file

Ik heb een macro, waarmee een file template wordt geopened. Deze template wordt vervolgens opgeslagen onder een nieuwe naam, bv NAAM1
Echter, als NAAM1 al bestaat komt de volgende melding:
A File named NAAM1 already exists. Do you want to replace it?

Wanneer ik "ja" kies wordt de file overschreven. Geen Probleem.
Echter wanneer ik "Nee" kies het volgende:Runtime error 1004. method Save as of object workbook failed.
De macro wordt dus niet afgesloten.
Heeft iemand hier een oplossing voor.
Tx

Public vNameInitiator As String
Public vDepartmentInitiator As String
Public vEmailInitiator As String
Public vDateInitiate As String
Public vCCnummer As String
Public vJuisteCel As String
Public vChangeDescription As String

Sub AanmakenCCWerklijsten()

Application.ScreenUpdating = False

'
' Macro2 Macro
' Macro recorded 23-4-2008 by Richard Boxebeld

vJuisteCel = UCase(InputBox("Weet je zeker dat je op de Cel staat van het door jouw toegekende CC-nummer", "QAS Zwolle", "Nee"))

If vJuisteCel = "JA" Then


ActiveCell.Select
vCCnummer = ActiveCell
ActiveCell.Offset(0, 1).Select
vChangeDescription = ActiveCell
ActiveCell.Offset(0, 1).Select
vNameInitiator = ActiveCell
ActiveCell.Offset(0, 1).Select
vDepartmentInitiator = ActiveCell
ActiveCell.Offset(0, 1).Select
vEmailInitiator = ActiveCell
ActiveCell.Offset(0, 1).Select
vDateInitiate = ActiveCell


Workbooks.Open FileName:= _
"G:\Project\Change Control\Templates\QAS-020 Change Control Ingredienten.xls", ReadOnly:=True



ActiveWorkbook.SaveAs FileName:="G:\Project\Change Control\CC08\" & vCCnummer & ".xls"


Worksheets("Initiator Voorblad").Select
Range("K6").Select
ActiveCell = vCCnummer
ActiveCell.Offset(1, 0).Select
ActiveCell = vNameInitiator & " / " & vDepartmentInitiator
ActiveCell.Offset(1, 0).Select
ActiveCell = vEmailInitiator
ActiveCell.Offset(1, 0).Select
ActiveCell = vDateInitiate
Range("e10").Select
ActiveCell = vChangeDescription
Range("e7").Select
Else: End If
End Sub
 
Blackbox, Een paar goed bedoelde opmerkingen over je code...
  • Waarom maak je public variabelen aan? Dat lijkt me in deze overbodig en kost je extra geheugenruimte (in dit geval is het te verwaarlozen, maar als je groter gaat programmeren met véél meer variabelen...). Hou je variabele dus zoveel mogelijk binnen je procedure en declareer met 'Dim' (uiteraard nog een paar mogelijkheden)
  • Al je variabelen zijn van het type 'string'. Je plaatst nu een ' v ' voor je variabele-naam (de v van variabele???). Om het voor jezelf (en anderen) duidelijk te maken gebruik je de letter(s) van het type. Dus bijvoorbeeld: Dim sNameInitiator As String
  • Je vraagt via een inputbox of de gebruiker op de juiste cel staat. Waarom laat je de code niet gewoon de juiste cel seleccteren?
  • Je vraagt via een inputbox of de gebruiker op de juiste cel staat. Dit kan je mooier afhandelen met de MSGBOX
    Code:
        If MsgBox("Weet je zeker dat je op de Cel staat van het door jouw toegekende CC-nummer", vbYesNo + vbDefaultButton2, "QAS Zwolle") = vbYes Then
         ....
  • Je gebruikt een heleboel 'selects'. Da's niet nodig. Dit is ook een methode om het te doen (als voorbeeld het 2e deel van je code)...
    Code:
        Worksheets("Initiator Voorblad").Select
        With Range("K6")
            .Value = vCCnummer
            .Offset(1, 0).Value  = vNameInitiator & " / " & vDepartmentInitiator
            .Offset(2, 0).Value  = vEmailInitiator
            .Offset(3, 0).Value  = vDateInitiate
        End With
        Range("e10").Value  = vChangeDescription
        Range("e7").Select
  • Net voor het 'End Sub' heb je nog een 'Else' van je 'if-structuur'. Deze is in dit geval overbodig omdat je daarna geen extra code meer hebt. Je hoeft alleen maar het 'End If' te laten staan.
  • Waarom wil je trouwens het bestand opslaan als 'overschrijven toch geen probleem is'? Je slaat volgens mij een bestand op om 'm te bewaren. Als overschrijven geen probleem is, heeft opslaan óók niet zoveel zin...

Let wel, het is niet de bedoeling met deze opmerkingen om je af te kraken (mocht je het gevoel hebben na het lezen van dit stuk). Slechts om je te helpen nadenken om je code te verfraaien/verbeteren.

Groet, Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan