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.
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!!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
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'
VBA voor smarties
Application.SheetsInNewWorkbook = 1
Vermijd Select en Activate in VBA-code
Gebruik in VBA-code With ... End With in plaats van objectvariabelen
Hallo Martijn,
Ik heb het niet getest, het zou moeten lukken.
Opslaan op harde schijf R:, in de map Maandoverzichten.
Mvg,Code:With ActiveWorkbook .SaveCopyAs "R:\CEB\Frankeermachine\Maandoverzichten\" & ActiveWorkbook.Name & ".xls" End With
Daniel
Laatst aangepast door DANIEL162 : 11 juli 2012 om 12:43
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 18ActiveSheet.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
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
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 25ActiveSheet.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
Selects eruit halen?? Hoe kan ik dan aangeven wat ik WAAR gedaan wil hebben??
Zoiets als:
Range("A:H").Delete Content
ipv
Range("A:H").select
selection. delete content??????
Gebruik svp de goede code tags #
bijv.
dat vervangtCode:With ActiveWorkbook .sheets(1).Range("A1:E35").value= .sheets(1).Range("A1:E35").value end with
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
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
#
VBA voor smarties
Application.SheetsInNewWorkbook = 1
Vermijd Select en Activate in VBA-code
Gebruik in VBA-code With ... End With in plaats van objectvariabelen