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

Quote

Weergeven resultaten 1 tot 12 van 12

Onderwerp: Runtime error 91 door 'save as' van 'ActiveSheet.copy'

  • Vraag is opgelost
  1. #1

    Question Runtime error 91 door 'save as' van 'ActiveSheet.copy'

    Hallo VBA liefhebbers/ -kenners,

    Ik probeer middels VBA code een enkel worksheet als workbook te bewaren, maar stuit bij het opslaan steeds op een runtime error 91 (object variable or with block not set).

    Ik heb hieronder de code geplaatst die ik gebruik voor het kopieren van het actieve blad (sheet) en het daarna opslaan van het ontstane nieuwe werkboek (Active Workbook). Bij regel 4 staat het gedeelte die de bovengenoemde foutmelding geeft.


    Javascript Code:
    1
    2
    3
    4
    5
    6
    
    Dim ws As Workbook
    ActiveSheet.Copy
    With ActiveWorkbook
            .SaveAs Filename:="R:\CEB\Frankeermachine\Maandoverzichten\" & "frankeermachine " & ws.Name, FileFormat:="xlsx"
            .Close
    End With
    Ik ben niet zo lang geleden begonnen met VBA, dus als iemand mij in gewone taal kan vertellen wat ik nu fout doe ben ik diegene erg dankbaar!!

    Alvast bedankt voor de genomen moeite.

    Mvrgr Martijn

  2. #2

    Exclamation

    Ik heb zo te zien het verkeerde kader gebruikt.

    Het gaat hier natuurlijk om VBA code en geen Javascript.

    Sorry.

    Martijn

  3. #3
    Kijk eens in de hulp funktie (F1) van de VBEditor (alt-F11) bij het lemma 'fileformat'
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  4. #4
    Hallo Martijn,

    Ik heb het niet getest, het zou moeten lukken.
    Opslaan op harde schijf R:, in de map Maandoverzichten.
    Code:
    With ActiveWorkbook
            .SaveCopyAs "R:\CEB\Frankeermachine\Maandoverzichten\" & ActiveWorkbook.Name & ".xls"
            End With
    Mvg,
    Daniel
    Laatst aangepast door DANIEL162 : 11 juli 2012 om 12:43

  5. #5

    Question

    Dank je SNB.

    Ik heb nu gezien wat ik fout deed.

    -1. Ik had 'ws.Name' gebruikt terwijl ws gedimt was als Workbook.
    -2. Ik had 'fileformat:=' gebruikt terwijl het ook gewoon kan met '& .xlsx'.

    Na aanpassingen ziet mijn code er nu als volgt uit en het werkt!!

    XML Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    ActiveSheet.Copy
    Dim ws As Worksheet
     
    With ActiveWorkbook
    Range("A1:E35").Select
    Selection.Copy
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False
    Range("F:M").Select
    Selection.Delete Content
        
        .SaveAs Filename:="R:\CEB\Frankeermachine\Maandoverzichten\" & "frankeermachine " & ActiveSheet.Name & ".xlsx"
        .Close
    End With
     
    ActiveWorkbook.Close True


    Nu speelt het volgende:

    Ik heb een excel werkbook gemaakt die uit diverse csv bestanden data weghaald en daar een netjes overzicht van maakt. Dit overzicht staat op de sheet die ik net met de verbeterde code automatisch kan bewaren!! So far so good.
    Ik houd nu aleen nog een workbook over die ik moet wegklikken, deze zou ik ook automatisch willen laten verwijderen/ verdwijnen, heeft er iemand suggesties?? Ik hoef dit workbook niet te bewaren, deze is alleen gebruikt om de benodigde handelingen uit te voeren!

    Als je het schematisch bekijkt ziet de verwerking er zo uit:

    1. WB met VBA-code (origineel).
    Maakt aan:
    a. WB met gegevens uit de csv-files die verwerkt moeten worden. Deze mag na verwerking zonder bewaren weg.
    b. WB met 1 sheet van de verwerkte gegevens. Deze wordt bewaard en sluit.

    Het rood gekleurde gedeelte gaat niet volgens plan. Die moet ik nu handmatig annuleren en dat wil ik niet, omdat degene die met dit Excel programmaatje aan het werk gaat het niet zal begrijpen!!! (Waarom moet ik dat allemaal annuleren???)

    Wat ik dus eigenlijk wil is terugkeren naar mijn originele workbook.

    Alvast bedankt voor de input.

    Mvrgr Martijn

  6. #6
    Alles op zijn tijd.

    Eerst die 'selects' eruit halen: vermijd in VBA altijd het gebruik van 'select' en 'activate'.

    Vervolgens de hulpbestanden van de VBEditor doorspitten bij With ... End With en vervolgens je code verbeteren.
    Laatst aangepast door snb : 11 juli 2012 om 12:59
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  7. #7

    Thumbs up

    Oh, even verder denken dan m'n neus lang is leverde hetvolgende op en dat werk ook nog:

    XML Code:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    ActiveSheet.Copy
    Dim ws As Worksheet
     
    With ActiveWorkbook
    Range("A1:E35").Select
    Selection.Copy
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False
    Range("F:M").Select
    Selection.Delete Content
        
        .SaveAs Filename:="R:\CEB\Frankeermachine\Maandoverzichten\" & "Frankeermachine " & ActiveSheet.Name & ".xlsx"
        .Close
    End With
     
    With ActiveWorkbook
    .SaveAs False
    .Close True
    End With
      
    frmopening.Show
     
    End Sub

    Ik wil graag iedereen bedanken die alleen al aan een oplossing dacht.

    Het is opgelost!!!

    Mvrgr Martijn

  8. #8
    Selects eruit halen?? Hoe kan ik dan aangeven wat ik WAAR gedaan wil hebben??

  9. #9
    Zoiets als:

    Range("A:H").Delete Content

    ipv

    Range("A:H").select
    selection. delete content??????

  10. #10
    Gebruik svp de goede code tags #

    bijv.
    Code:
    With ActiveWorkbook
      .sheets(1).Range("A1:E35").value= .sheets(1).Range("A1:E35").value
    end with
    dat vervangt
    Code:
    Range("A1:E35").Select
    Selection.Copy
        Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            Application.CutCopyMode = False
    Laatst aangepast door snb : 11 juli 2012 om 14:59
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  11. #11
    Miesschien een domme vraag, maar welke code tag moet ik gebruiken dan om het eruit te laten zien als dat van jou???

    Dank je.

  12. #12
    Kijk eens naar de iconen in het geavanceerde schrijfmenu; zoals ik in de vorige post aangaf staat er op dat icoon

    #
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

Berichtenregels

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

Helpmij.nl en business

Partners
Sponsoren
Linkpartners
Aanbiedingen