Excel 2003 of 2007

Status
Niet open voor verdere reacties.

Spiderman

Gebruiker
Lid geworden
8 sep 2000
Berichten
866
Hoi Allemaal,

Ik heb binnen Access een query die d.m.v. vba wordt ge-exporteerd naar Excel.

De mensen die dit rapport nodig maken, hebben bijna allemaal Excel 2003 en Excel 2007. Vraag me niet waarom, maar dit is zo, en kan/mag ook niet worden veranderd.

Probleem is dat dit rapport in Excel 2007 moet worden gemaakt, maar Access denkt daar anders over. Hij wilt dit bijna bij iedereen doen in 2003, met als gevolg dat bepaald dingen niet gaan zoals ze zouden moeten gaan.

Is er een manier om via VBA ervoor te zorgen dat het wordt gemaakt in Excel 2007

De code die ik gebruik voor het openen van Excel is:
Code:
    Dim xl_app As Object: Set xl_app = CreateObject("Excel.application")
    xl_app.workbooks.Add
 
Zet een databasequery in een Excelbestand. Altijd de goede versie.
 
Ik denk dat dat niet zo makkelijk gaat. Het zijn namelijk een aantal opvolgende queries, die na elkaar gedraaid worden, voordat de laatste query wordt ge-exporteerd.
 
Dat is nog eenvoudiger.
Nadat alle queries zijn gedraaid kun je het Excel-bestand met de databasequeries openen (Getobject("C:\test.xlsx")) en de koppelingen bijwerken.(Refresh) en klaar is Kees. Geen twijfel mogelijk of een xls-bestand of xlsx-bestand wordt geopend.
 
Hoi snb,

Bedankt voor de hulp.
Ik heb het even geprobeert met de GetObject, maar heb er 2 problemen mee.

1 = Excel is niet zichtbaar, tenzij ik deze dus weer via een Shell of iets dergelijks open
2 = Vanuit Access wordt er ook nog het een en ander gedaan binnen Excel, nu is dat misschien wel weer op te lossen met een Macro, probleem alleen is dat eigenlijk alles al binnen Access is gemaakt, en om alles weer om te zetten is misschien een beetje omslachtig.

Vreemde is dat bij 2 mensen (Ook met 2003 en 2007) het wel werkt zoals het hoort.
Ik heb de systeem beheerder nu gevraagd, om 2007 opnieuw te installeren. Misschien dat dit iets oplost.

Overigens heb ik CreateObject("Excel.Application.12") geprobeert en deze doet het vreemd genoeg ook niet.

Alle andere oplossingen zijn welkom.
 
Het handige van createobject en getobject is nu juist dat ze niet zichtbaar gebeuren.
Als je dat niettemin wil:

Code:
with Getobject("C:\test.xlsx")
  .application.visible=true
end with
 
Hoi snb,

Dat werkt inderdaad beter. Ik had inderdaad wel de de Visible geprobeert, maar wist niet dat het Application.Visible moet zijn :(

Ik kom wel vrij snel het volgende probleem tegen.

Namelijk ik zet de hele recordset via onderstaande code in een sheet.
Code:
Sheet.Range("A2").CopyFromRecordset rst

Dit werkte wel via CreateObject, maar niet meer met GetObject.

Weet je hier toevallig ook een oplossing voor
 
Ik kan niet beoordelen wat er in de variabele rst zit.
Plaats svp de regel waarin je die variabele 'vult'. (meestal is zo'n variabele overbodig)
'Ietsje' meer context van je code maakt het beantwoorden soms veel eenvoudiger.
 
In de variable rst, zit een gehele recordset.
Deze recordset komt uit een Query, die zoals gezet wel met CreateObject werkt, maar dus niet met GetObject.

Ik denk ook niet dat de variable de fout is, maar meer het command CopyFromRecordset
 
Over de laatste zin van mijn vorige reaktie heb je blijkbaar heengelezen ?
 
Hoi snb,

Nee had er niet overheen gelezen, dacht alleen dat het niet zoveel zou toevoegen.

Maar bij deze.
Code:
Dim rst_ovwMTActualsPortfolioTotalFinal As Recordset
    Dim CurDB As Database
    Dim qd_ovwMTActualsPortfolioTotalFinal As QueryDef

    Set CurDB = CurrentDb
    Set qd_ovwMTActualsPortfolioTotalFinal = CurDB.QueryDefs!ovwMTActualsPortfolioTotal
    Set rst_ovwMTActualsPortfolioTotalFinal = qd_ovwMTActualsPortfolioTotalFinal.OpenRecordset

    
    Dim xl_App As Object: Set xl_App = GetObject(CurrentProject.Path & "\mt.xls")
    ''Dim xl_app As Object: Set xl_app = CreateObject("Excel.application")
    xl_App.Application.Visible = True
    ''xl_app.Visible = True
    ''xl_app.workbooks.Add
    
    Dim xl_Sht_tmp As Object: Set xl_Sht_tmp = xl_app.sheets(1)
    Dim xl_Wkb_Template As Object
    Dim xl_Sht_Template_Overzicht_totaal As Object
    Dim xl_Sht_Tamplate_Purchase_Orders As Object
    Dim FileNameTemplate As String: FileNameTemplate = CurrentProject.Path & "\Template Finance Purchase orders.xlsx"
    
    
    xl_Sht_tmp.Name = "TMP"
    ''xl_app.Visible = True
    
    ' ############## Copieer de recordset naar het tijdelijke excel sheet (TMP)
    [B][COLOR="red"]CopyRecordsetToSheet [/COLOR][/B]xl_Sht_tmp, rst_ovwMTActualsPortfolioTotalFinal

Code:
Sub [B][COLOR="Red"]CopyRecordsetToSheet[/COLOR][/B](Sheet As Object, rst As Recordset)
    
    Dim Fields(100) As String
    Dim fld As Field
    Dim x1 As Integer: x1 = 0
    Dim x2 As Integer: x2 = 1 ' De eerste regel na de header
    Dim x3 As Integer: x3 = 0
    
    For Each fld In rst.Fields
        x1 = x1 + 1
        Fields(x1) = fld.Name
        Sheet.cells(1, x1).Value = Fields(x1)
    Next
    Sheet.Activate
    Sheet.Range("A2").CopyFromRecordset rst

End Sub
 
Als ik je code goed lees, doe je er verstandig aan in plaats van deze excercities een Excel-bestand te maken met een databasequery, die is gekoppeld aan de database waarmee je werkt.
Als je de refresh-eigenschap van die databasequery zo instelt, dat iedere keer als het bestand wordt geopend de gegevens worden bijgewerkt, is deze regel

Code:
Getobject("C:\voorbeeld met databasequery.xls")

voldoende om uit te voeren wat in jouw code staat.

als je het bestand met geaktualiseerde gegevens wil opslaan:
Code:
With Getobject("C:\voorbeeld met databasequery.xls")
  .close true
end with
 
Hoi snb,

Nou probleem is schijnbaar opgelost.

De systeembeheerder heeft zowel Office 2003 als 2007 helemaal opnieuw geinstalleerd, en de hele boel werkt nu wel naar behoren.

Snappen doe ik het niet, want Office 2007 was al na 2003 geinstaleerd. De beheerder heeft nu het zelfde nogmaals gedaan.

Maarja, voor nu is het probleem dus opgelost.

Mocht het weer eens terug komen, dan open ik dit topic weer.

Bedankt voor de hulp, en misschien tot later
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan