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

Status
Niet open voor verdere reacties.

Martijn Kist

Gebruiker
Lid geworden
3 jan 2010
Berichten
33
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).:confused:

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.


[JS]Dim ws As Workbook
ActiveSheet.Copy
With ActiveWorkbook
.SaveAs Filename:="R:\CEB\Frankeermachine\Maandoverzichten\" & "frankeermachine " & ws.Name, FileFormat:="xlsx"
.Close
End With[/JS]
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
 
Ik heb zo te zien het verkeerde kader gebruikt.

Het gaat hier natuurlijk om VBA code en geen Javascript.

Sorry.

Martijn
 
Kijk eens in de hulp funktie (F1) van de VBEditor (alt-F11) bij het lemma 'fileformat'
 
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 bewerkt:
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]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
[/XML]


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
 
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 bewerkt:
Oh, even verder denken dan m'n neus lang is leverde hetvolgende op en dat werk ook nog:

[XML]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[/XML]

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

Het is opgelost!!! :thumb::d:thumb:

Mvrgr Martijn
 
Zoiets als:

Range("A:H").Delete Content

ipv

Range("A:H").select
selection. delete content??????
 
Gebruik svp de goede code tags #

bijv.
Code:
With ActiveWorkbook
  [COLOR="#FF0000"][B][SIZE=4].[/SIZE][/B][/COLOR]sheets(1).Range("A1:E35").value= [COLOR="#FF0000"][B][SIZE=4].[/SIZE][/B][/COLOR]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 bewerkt:
Miesschien een domme vraag, maar welke code tag moet ik gebruiken dan om het eruit te laten zien als dat van jou???

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

#
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan