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

bestand afsluiten via macro

Status
Niet open voor verdere reacties.

WIMLIN

Gebruiker
Lid geworden
17 jul 2007
Berichten
429
Code:
Sub PRINTENPRAP506()
'
' PRINTENPRAP506 Macro
' PRINTEN PRAP 506 B.U. LAWAAI
'

'
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 506 B.U. Lawaai.xls"
    Windows("JET.FINANCIEEL Afdelingkosten 506 Lawaai 1.0.xls").Activate
    ActiveWorkbook.PrintOut Copies:=1
    Windows("Budget 506 B.U. Lawaai.xls").Activate
    ActiveWorkbook.Close
End Sub

Bovenstaande macro heb ik opgenomen in excel. Het enigste probleem is nu dat er een melding komt bestand afsluiten ja of nee.

Is het mogelijk dat dit bestand afgesloten wordt zonder op te slaan.
 
Code:
ActiveWorkbook.Close Savechanges:=False
 
Wigi,

Bedankt.

Dit werkt weer. Werkt u toevallig ook met JetReports. Als ik de macro opneem zie ik nl. geen code die laat zien dat ik eerst mijn excel laat rapporteren via Jetreports.

M.vr.gr.

Wim
 
Code:
ChDir "L:\Rapportage\2008\Budget 2008\Definitief budget 2008"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek totaal.xls" _
        , UpdateLinks:=0
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Asbest.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Isolatie.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Rope Access.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Steigerbouw.xls"
    Windows("JET.FINANCIEEL Afdelingkosten 501 Botlek 1.0.xls").Activate
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,3,,,TRUE,,FALSE)"
    Windows("Budget 501 B.U. Botlek activiteit Steigerbouw.xls").Activate
    ActiveWorkbook.Close
    ActiveWindow.ActivateNext
    ActiveWindow.Close
    ActiveWindow.Close
    ActiveWindow.Close
    ActiveWindow.Close
    Windows("JET.FINANCIEEL Afdelingkosten 501 Botlek 1.0.xls").Activate
    Application.Goto Reference:="PRAP501"
End Sub

Wigi,

Bij mij werkt het toch nog niet goed. Het is nl. de bedoeling dat de bestand die ik eerst heb geopend allemaal weer worden afgesloten. Nu weet mijn excel nog niet welke bestand hij moet afsluiten.

Ik open deze bestanden zodat mijn koppelingen worden bijgewerkt in mijn excel bestand. Die worden nl. pas bijgwerkt als de bestanden zijn geopend.
 
Ik heb het al redelijk veel keer aangegeven in mijn posts: werk met variabelen ;)

bijvoorb:

Code:
Dim wb1 As Workbook

Set wb1 = Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek totaal.xls", UpdateLinks:=0

'andere code

wb1.Close Savechanges:=False

'andere code

End Sub

Wigi
 
Code:
Dim wb1 As Workbook

Set wb1 = Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek totaal.xls", UpdateLinks:=0

'andere code

wb1.Close Savechanges:=False

'andere code

End Sub

Wigi,

Als ik het goed begrijp.

Open ik eerst met set wb1 alle bestanden.

Vervolgens activeer ik het bestand wat ik wil printen

Daarna sluit ik met wb1 met het commando alle bestanden

Als laatste activeer ik het weer mijn print bestand.
 
wb1 of per bestand een andere variabele, dat is waarschijnlijk beter.

En het beste van allemaal is dit in een aparte procedure steken, die je kan x aantal keren aanroept (1 keer per bestand). Je geeft als argument bvb het pad mee.

Wigi
 
Wigi,

Het gaat mij al weer een beetje duizelen. Ik ga nu naar huis. Ik ga proberen daar met u raadgevingen er toch uit te komen.

Ik ben heel benieuwd. Als deze macro gaat werken kan ik dit namelijk weer in 30 tal andere bestanden kopieren.

Ik begrijp het variabele verhaal nog niet volkomen.

Vanuit mijn basisbestand moet Ik steeds 5 bestanden openen. Dan terug naar mijn basisbestand. Deze helemaal printen. (De koppelingen worden dan bijgewerkt) Dan de 5 bestanden weer sluiten. Mijn basisbestand weer activeren en afsluiten zonder bewaren.

M.vr.gr.
Wim
 
Wimlin, Ik heb ook nog een oplossing voor je verzonnen. Met de methode GetOpenFileName en een array. De methode GetOpenFileName toont je de standaard 'File Open' dialog, maar opent bij het aanklikken van het te openen bestand niets. Alleen de naam wordt overgenomen. Deze namen worden vervolgens opgeslagen in een array, waarna een lus in de code met Workbooks.Open er voor zorgt dat de array wordt uitgelezen en dus alle aangewezen bestanden worden geopend.
Let wel, het is een redelijk snel gemaakt voorbeeld waar nog geen foutafhandeling in zit. Maar 't is wel leuk om ff te proberen of zoiets óók in de 'gedachten richting' zit (aub niet in de 'GetOpenFileName dialog' op cancel drukken, dat gaat dus nog fout!)
Code:
Code verwijderd ivm ontbrekende foutafhandeling. Zie [URL="http://www.helpmij.nl/forum/showpost.php?p=2275452&postcount=13"]deze oplossing[/URL] verderop in de Topic...

Zet 2 knoppen in je default sheet die je verbindt aan SluitBestanden en OpenBestanden. Klik op de 'open' knop en wijs de benodigde bestanden aan. Laat je bestand updaten, printen en druk op de 'sluiten' knop.

Groet, Leo
 
Laatst bewerkt:
Goedemorgen heren,

Uiteindelijk is dit mijn resultaat geworden.
Code:
Sub PRINTENPRAP506()
'
' PRINTENPRAP506 Macro
' PRINTEN PRAP 506 B.U. LAWAAI
'

'
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 506 B.U. Lawaai.xls"
    Windows("JET.FINANCIEEL Afdelingkosten 506 Lawaai 1.0.xls").Activate
    If Application.Dialogs(xlDialogPrinterSetup).Show Then
       ActiveWindow.SelectedSheets.PrintOut
    End If
    ActiveWorkbook.PrintOut Copies:=1
    Windows("Budget 506 B.U. Lawaai.xls").Activate
    ActiveWorkbook.Close savechanges:=False
    Windows("JET.FINANCIEEL Afdelingkosten 506 Lawaai 1.0.xls").Activate
End Sub

Voorlopig lijkt het even te werken. Of staan er nog gekke dingen in.
 
Code:
Sub prap501()
'
' prap501 Macro
'

'
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek totaal.xls" _
        , UpdateLinks:=0
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Asbest.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Isolatie.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Rope Access.xls"
    Workbooks.Open Filename:= _
        "L:\Rapportage\2008\Budget 2008\Definitief budget 2008\Budget 501 B.U. Botlek activiteit Steigerbouw.xls"
    Windows("Jet.Financieel Afdelingkosten 501 Botlek 1.0.xls").Activate
    If Application.Dialogs(xlDialogPrinterSetup).Show Then
       ActiveWorkbook.PrintOut
    End If
    Windows("Budget 501 B.U. Botlek totaal.xls").Activate
    ActiveWindow.Close Savechanges:=False
    Windows("Budget 501 B.U. Botlek activiteit Isolatie.xls").Activate
    ActiveWindow.Close Savechanges:=False
    Windows("Budget 501 B.U. Botlek activiteit Asbest.xls").Activate
    ActiveWindow.Close Savechanges:=False
    Windows("Budget 501 B.U. Botlek activiteit Rope Access.xls").Activate
    ActiveWindow.Close Savechanges:=False
    Windows("Budget 501 B.U. Botlek activiteit Steigerbouw.xls").Activate
    ActiveWindow.Close Savechanges:=False
    Windows("Jet.Financieel Afdelingkosten 501 Botlek 1.0.xls").Activate
End Sub

Ik ben er dus niet zo snel uitgekomen met de variabelen. Ik kon gisteravond thuis niet proberen omdat ik niet bij de excelbestanden van mijn werk kon. Hopelijk vanavond.

Het enigste probleem heb ik nu nog met het printcommando

Code:
If Application.Dialogs(xlDialogPrinterSetup).Show Then
       ActiveWorkbook.PrintOut
    End If

Er wordt nu namelijk als ik voor mijn adobe pdf printer kies twee keer om een bestand naam gevraagd.
 
Wimlin, ik heb mijn eerdere poging verbeterd met diverse controles. Probeer deze nieuwe maar 'ns om bestanden te openen en te sluiten...
Code:
Global arrBestandsNamen() As Variant
Sub OpenBestanden()
Dim bMeerBestanden As Boolean
Dim i As Integer
Dim sBestandsNaam As String

    bMeerBestanden = True
    i = -1
    
    Do While bMeerBestanden = True
        i = i + 1
        ReDim Preserve arrBestandsNamen(i)
        'haal bestandsnamen op...
        arrBestandsNamen(i) = Application.GetOpenFilename("Microsoft Excel Files (*.xls),*.xls")
'        Debug.Print arrBestandsNamen(i) 'voor de test!
        If arrBestandsNamen(i) = False Then 'er is op cancel geklikt
            i = i - IIf(i = 0, 0, 1)
            ReDim Preserve arrBestandsNamen(i) 'maak de array 1 stapje kleiner
            Exit Do 'voorkom meer toevoegingen
        End If
        If MsgBox("Nog een bestand openen? (totaal: " & i + 1 & ")", _
                    vbYesNo + vbQuestion, "Meer?") = vbNo Then bMeerBestanden = False
    Loop
    
    If i = 0 Then Exit Sub 'er zijn geen bestanden aangewezen om te openen
    
    For i = 0 To UBound(arrBestandsNamen)
        'haal de bestandsnaam uit de string
        sBestandsNaam = Right(arrBestandsNamen(i), InStr(1, StrReverse(arrBestandsNamen(i)), "\") - 1)
        'test eerst of het bestand al open staat; zo ja ga naar het volgende bestand
        If Not IsOpen(sBestandsNaam) Then
            Workbooks.Open FileName:=arrBestandsNamen(i)
        End If
    Next i
    
    ThisWorkbook.Activate
    
End Sub

Function IsOpen(FileName As String) As Boolean
Dim wb As Workbook
    
    For Each wb In Application.Workbooks
        If UCase(wb.Name) = UCase(FileName) Then
            IsOpen = True
            Exit Function
        End If
    Next wb
    IsOpen = False
    
End Function

Sub SluitBestanden()
Dim sBestandsNaam As String

    For i = 0 To UBound(arrBestandsNamen)
        'haal de bestandsnaam uit de string
        sBestandsNaam = Right(arrBestandsNamen(i), InStr(1, StrReverse(arrBestandsNamen(i)), "\") - 1)
        If IsOpen(sBestandsNaam) Then
            Workbooks(sBestandsNaam).Close savechanges:=False
        End If
    Next i

    Erase arrBestandsNamen

End Sub
Voor het gemak heb ik het voorbeeldworkbook ook als bijlage toegevoegd.

Groet, Leo

P.s Mijn eerdere code heb ik hierbij verwijderd! (ivm fouten)
 

Bijlagen

  • OpenBestandViaArray.xls
    30 KB · Weergaven: 106
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan