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

Fout 91 Objectvariabele of blokvariabele With niet ingesteld

Status
Niet open voor verdere reacties.

drakie

Gebruiker
Lid geworden
10 mrt 2001
Berichten
176
Hallo,

Ik heb twee excel bestanden A en B (01.01.xlsm) met daarin macro's

In bestand B (01.01.xlsm) runt een macro bij afsluiten van het bestand om een grafiek en een tekst werkbook te exporteren naar jpg. Als ik deze macro run vanuit bestand B werkt deze keurig.

Nu heb ik in bestand A een macro opgenomen om bestand B te openen en weer te sluiten om de grafiek te updaten en ervoor te zorgen dat ik altijd voorzien ben van de laatste data. De code die ik hiervoor gebruik is de volgende:

Code:
    If Worksheets("KPI").Range("B5").Value <> "[gereserveerd]" Then
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Sheet_indicator\ID01.01.xlsm"
    ActiveWorkbook.Close SaveChanges:=True
    
    Else
    End If

Echter geeft die nu een foutmelding Fout 91 Objectvariabele of blokvariabele With niet ingesteld in bestand B bij de volgende code:

Code:
Sub ExportNumChart()
Dim myFileName As String
myFileName = Worksheets("Data").Range("B2").Value
Dim FName As String
Dim pic_rng As Range
Dim ShTemp As Worksheet
Dim ChTemp As Chart
Dim PicTemp As Picture
Application.ScreenUpdating = False
Set pic_rng = Worksheets("Info").Range("A13:F30")
Set ShTemp = Worksheets.Add
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
Set ChTemp = ActiveChart
pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
ChTemp.Paste
Set PicTemp = Selection
With ChTemp.Parent
.Width = PicTemp.Width + 8
.Height = PicTemp.Height + 8
End With
ChTemp.Export FileName:=ThisWorkbook.Path & "\" & "KPI_status" & "\" & myFileName, FilterName:="JPG"
'UserForm1.Image1.Picture = LoadPicture(FName)
'Kill FName
Application.DisplayAlerts = False
ShTemp.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

ActiveWorkbook.Save

End Sub

Hij crashed bij het stukje ActiveChart.Location Where:=xlLocationAsObject, Name:=ShTemp.Name

Ik kom er zelf niet uit omdat die vanuit bestand B zelf wel gewoon runned maar als ik hem aanroep via bestand A crashed.

Kan iemand mij verder helpen?

Alvast bedankt
 
drakie,

je schrijft o.a.
Ik heb twee excel bestanden A en B (01.01.xlsm) met daarin macro's

in de macro in bestand A staat:
Code:
....
 Workbooks.Open Filename:=ThisWorkbook.Path & "\Sheet_indicator\[COLOR="#FF0000"][B]ID[/B][/COLOR]01.01.xlsm"

kan het daar in zitten?
 
verander dit eens:
Code:
Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
Set ChTemp = ActiveChart
in
Code:
Set ChTemp=Charts.Add
ChTemp.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
 
Nav het antwoord van ReneDirks is nu de code als volgt in bestand B:

Code:
Sub ExportNumChart()
Dim myFileName As String
myFileName = Worksheets("Data").Range("B2").Value
Dim FName As String
Dim pic_rng As Range
Dim ShTemp As Worksheet
Dim ChTemp As Chart
Dim PicTemp As Picture
Application.ScreenUpdating = False
Set pic_rng = Worksheets("Info").Range("A13:F30")
Set ShTemp = Worksheets.Add

Set ChTemp = Charts.Add
ChTemp.Location Where:=xlLocationAsObject, Name:=ShTemp.Name
Set ChTemp = ActiveChart

pic_rng.CopyPicture Appearance:=xlScreen, Format:=xlPicture
ChTemp.Paste
Set PicTemp = Selection
With ChTemp.Parent
.Width = PicTemp.Width + 8
.Height = PicTemp.Height + 8
End With
ChTemp.Export FileName:=ThisWorkbook.Path & "\" & "KPI_status" & "\" & myFileName, FilterName:="JPG"
'UserForm1.Image1.Picture = LoadPicture(FName)
'Kill FName
Application.DisplayAlerts = False
ShTemp.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

ActiveWorkbook.Save

End Sub

Wanneer ik de code run vanuit bestand B dan werkt deze. Deze code staat overigens in de module ThisWorkbook

Als ik nu via een macro in bestand A, bestand B aanroep dan krijg ik nu de volgende foutmelding:
Fout 13: Typen komen niet met elkaar overeen

Ik blijf het raar vinden omdat de code in bestand A niks anders doet dan bestand B openen en weer afsluiten.
Iemand suggesties?
 
Rene,

Ik heb vanmorgen nog zitten sleutelen en het is inmiddels gelukt. Ik had zo een vermoeden dat het te maken had met het definieren van objecten en variabelen etc wat in beide bestanden gebeurd. Voor het aanroepen van de bestanden B vanuit bestand A gebruik ik nu de volgende code:

Code:
 Sub test()

    If Sheets(3).Range("B7").Value <> "[gereserveerd]" Then
    Dim wbTarget As Workbook, CloseIt As Boolean
    Set wbTarget = Workbooks.Open(Sheets(3).Range("L7") & "Sheet_indicator\ID" & Sheets(3).Range("A7") & ".xlsm")
    Application.Run (wbTarget.Name & "!Update")
    ActiveWorkbook.Close savechanges:=True
    ThisWorkbook.Activate
    
    Else
    End If
      
    If Sheets(3).Range("B8").Value <> "[gereserveerd]" Then
    Set wbTarget = Workbooks.Open(Sheets(3).Range("L8") & "ID" & Sheets(3).Range("A8") & ".xlsm")
    Application.Run (wbTarget.Name & "!Update")
    ActiveWorkbook.Close savechanges:=True
    ThisWorkbook.Activate
    
    Else
    End If

End Sub

Hij roept nu specifiek de macro aan in bestand A. In bestand B heb ik verwijderd dat de macro automatisch moet draaien als het bestand sluit. Dat is was niet meer nodig.

Nu is er vast nog wel een manier om deze code korter te maken? Ik moet namelijk een stuk of 50 sheets aanroepen. Maar het eerste deel van de vraag is opgelost :D
 
De reden dat je eerste code niet werkte is omdat je activesheet, activegraph, etc gebruikt. Op moment dat je een tweede werkbook opent, blijft het eerste werkboek & sheet actief. Dus vandaar dat ik bijvoorbeeld Set ChTemp = Charts.Add gebruikt had. Jouw code Set ChTemp = ActiveChart hoeft er dan dus ook niet bij - zodra er een nieuwe chart is toegevoerd wijst chTemp naar deze nieuwe chart.

Verder hoef je de else niet te gebruiken - het kan natuurlijk zijn dat je daar nog op verder wilt bouwen, maar
Code:
    Else
    End If
is hetzelfde als
Code:
    End If
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan