Excel sluiten in Access

Status
Niet open voor verdere reacties.

so10070

Gebruiker
Lid geworden
4 feb 2014
Berichten
419
Ik onderzoek in onderstaande procedure of het Excel-bestand nog open is (hidden). Ik doe dit voor ik voordat ik het werkboek heb toegewezen aan oWerkboek. Maar als het Excel-bestand nog open is hoe spreek ik dit dan aan om te sluiten.

Code:
Private Sub Knop0_Click()
    Dim oExcel As Excel.Application
    Dim oWerkboek As New Workbook
    Dim oTabblad As New Worksheet

    If fFileOpen("C:\TestAccess\TestExportCSV.xlsx") = True Then
        [COLOR="#FF0000"][B]oWerkboek[/B][/COLOR].Close True '>>> oWerkboek is niet gedefinieerd!!
        MsgBox "File is open"
    Else
        MsgBox "File is closed"
    End If

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "TestExportCSV", "C:\TestAccess\TestExportCSV.xlsx", True

    Set oExcel = CreateObject("Excel.Application")
    Set oWerkboek = oExcel.Workbooks.Open("C:\TestAccess\TestExportCSV.xlsx")
    Set oTabblad = oWerkboek.Worksheets("TestExportCSV")
    
    oTabblad.SaveAs "C:\TestAccess\TestExportCSV.csv", xlCSV
        
    oExcel.Visible = True
    
    Set oTabblad = Nothing
    Set oWerkboek = Nothing
    Set oExcel = Nothing
End Sub

Dit is de functie die aangesproken wordt.

Code:
Function fFileOpen(strFile As String) As Boolean

On Error Resume Next
 
    Dim intFile As Integer
    If Dir(strFile) = "" Then Exit Function
 
    intFile = FreeFile()
    Open strFile For Input Lock Read As intFile
    Close intFile
 
    If Err <> 0 Then
        fFileOpen = True
    End If
 
End Function
 
Loop door de verzameling workbooks (= verzameling van alle geopende werkboeken) en als je een werkboek vind met de naam van degene die je wil sluiten, sluit het.
Iets als:

dim oWB as WorkBook

for each oWB in application.workbooks
if oWB.name = "xxxxx" then oWB.close
next oWB
 
Lukt perfect! :thumb: Maar indien ik nu ook nog wil controleren op het CSV-bestand, werkt dit niet in deze loop. Welke fout maak ik?

Code:
Private Sub Knop0_Click()
    Dim oExcel As Excel.Application
    Dim oWerkboek As New Workbook
    Dim oWBSluiten As Workbook 'controle werkboek dat misschien gesloten moet worden
    Dim oTabblad As New Worksheet
    
    Set oExcel = CreateObject("Excel.Application")
        
    For Each oWBSluiten In oExcel.Workbooks
        If oWBSluiten.Name = "TestExportCSV.xlsx" Then
            oWBSluiten.Close True
        End If
[COLOR="#FF0000"][B]        If oWBSluiten.FileFormat = 6 Then
            oWBSluiten.Close True
        End If[/B][/COLOR]
    Next oWBSluiten

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "TestExportCSV", "C:\TestAccess\TestExportCSV.xlsx", True

    Set oWerkboek = oExcel.Workbooks.Open("C:\TestAccess\TestExportCSV.xlsx")
    Set oTabblad = oWerkboek.Worksheets("TestExportCSV")

    oTabblad.SaveAs "C:\TestAccess\TestExportCSV.csv", xlCSV
        
    oExcel.Visible = True
    
    Set oTabblad = Nothing
    Set oWerkboek = Nothing
    Set oWBSluiten = Nothing
    Set oExcel = Nothing
End Sub
 
als je een werkboek object sluit dan wordt het uit de verzameling van workbooks verwijderd en ziet excel het niet meer. Je kan wel via het Filesystemobject werken.
 
Dus: als ik eerst het xlsx-bestand sluit is ook het csv-bestand gesloten? Moet ik het zo verstaan?
 
Nee natuurlijk niet; het zijn twee verschillende bestanden. Moet je apart sluiten. Als je een csv bestand opslaat als xlsx bestand hoeft dat niet, want dan heb je maar één bestand open. Heb je ze allebei geopend (zie zelf de noodzaak niet, maar wat maak het uit?) dan check je dat toch zo?
Code:
  If oWBSluiten.Name = "TestExportCSV.xlsx" Or oWBSluiten.Name = "TestExportCSV.csv" Then
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan