VBA terugkeren naar sheet ná opslag van ander excel werkblad

Status
Niet open voor verdere reacties.

pvag

Gebruiker
Lid geworden
7 jan 2009
Berichten
60
Beste experts,

Ik heb een sheet die de geïmporteerde data uit een CSV bestand opslaat als een apart excel bestand. Nadat het bestand succesvol is opgeslagen loop ik vast in de code. Ná opslag staan er dus 2 excel bestanden open. 1. de werkmap, 2. het aangemaakte excel bestand. Omdat het tweede excel bestand nog open staat, kan de code in de 1e werkmap niet worden afgewerkt. Mijn 1e vraag: Hoe kom ik terug in de werkmap zodat de code kan worden afgewerkt? 2e vraag: Kan het 2e opgeslagen bestand met VBA worden gesloten vanuit de code in de werkmap? want nu moet ik het 2e excel bestand handmatig sluiten. Ik heb in de code aangegeven waar het fout gaat. Ik ben maar een leek in VBA, dus als jullie experts de code zien zou je mogelijk kunnen gaan lachen, maar het werkt tot nu toe goed.
Alvast bedankt.
Mvg, Ton

Code:
Private Sub Imprt1eKw_Click()
' eerst checken of het kwartaal in 'Param' goed staat ingesteld
Dim KwCheck As String
Dim KwAbsoluut As String
KwAbsoluut = Sheets("Param").Range("B68").Value
KwCheck = Sheets("Param").Range("F10").Value

    If MsgBox("De kwartaal bestandsnaam is nu ingesteld op:" & vbCrLf & KwCheck & vbCrLf & vbCrLf & _
    "De kwartaal bestandsnaam zou moeten zijn:" & vbCrLf & KwAbsoluut & vbCrLf & vbCrLf & "Wil je de kwartaal bestandsnaam wijzigen?" & vbCrLf & vbCrLf, _
                vbYesNo + vbInformation, "Bestandsnaam - controle") = vbYes Then
   Application.Goto Sheets("Param").Range("F10")
  
   Exit Sub
        Else
        End If

' Eerst kijken of de map bestaat, anders aanmaken. = E:\Werkmap\TDEP_new\Administratie\Kasboeken
    sPad = Sheets("Param").Range("F11").Value & "\"
    Pad = Split(sPad, "\")
    sPad = Pad(0)
    For i = 1 To UBound(Pad)
        sPad = sPad & "\" & Pad(i)
        If Dir(sPad, vbDirectory) = "" Then
        MkDir sPad
        End If
    Next i
   
' Eerst kijken of in het werkblad data staat.
    If WorksheetFunction.CountA(Sheets("Bank_1e_kwart").Columns(1)) = 1 Then
        GoTo further
    Else
        If MsgBox("                                       BELANGRIJKE INFO " & vbCrLf & vbCrLf & "Achterliggend blad bevat data zoals je kunt zien. Als je nieuwe data wilt importeren, moet eerst de huidige data worden gewist!" & vbCrLf & vbCrLf & _
                "Wil je de huidige data wissen en een nieuw CSV bestand te importeren." & vbCrLf & vbCrLf, _
                vbYesNo + vbInformation, "CSV comma gescheiden bankbestand importeren") = vbYes Then
            Rows("2:5000").ClearContents
            Rows("2:2").Select
            Dim Kiezen As Integer, Bestand As String
further:
        With Application.FileDialog(msoFileDialogOpen)
            .AllowMultiSelect = False
            Kiezen = .Show
            If Kiezen <> 0 Then
                Bestand = .SelectedItems(1)
            End If
        End With

        If Bestand = "" Then Exit Sub
         
        With ActiveSheet.QueryTables.Add(Connection:= _
            "TEXT;" & Bestand, Destination:=Range("$A$2"))
            .Name = "INGB_1e_kwart_1"
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = 850
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = False
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = True
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
        Exit Sub
        Else
        End If
    End If
    
    
'F5    Geef het path op voor opslag van de werkmap kasboek              : C:\Werkmap\TDEP\Administratie\Kasboeken
'F6    Geef het path op voor opslag van het sjabloon kasboek               : C:\Werkmap\TDEP\Sjabloon kasboek
'F7    Geef de naam op voor dit programma                                        : Kasboek
'F8    Je voornaam                                                                            : Ton
'F9    Je achternaam                                                                          : Coolen
'F10  Bestandsnaam                                                                          : INGB 0007 992960 1e kwart
'F11  Voer het path in waar het excelbestand moet worden opgeslagen : E:\Werkmap\TDEP\Administratie\Bank_import
 
 ' Kijken of jaarmap bestaat, anders aanmaken
 Dim sYear As String
 sYear = CStr(Year(Date))
    
   sPad = Sheets("Param").Range("F11").Value & ("\") & sYear & ("\")
   Pad = Split(sPad, "\")
   sPad = Pad(0)
   For i = 1 To UBound(Pad)
   sPad = sPad & "\" & Pad(i)
   If Dir(sPad, vbDirectory) = "" Then
   MkDir sPad
  End If
  Next i
 
If MsgBox("Als er wijzigingen zijn aangebracht in achterliggend blad, klik dan op 'OK' om het bestand op te slaan, en volg dan de aanwijzingen op het scherm. Klik anders op 'Nee' " & vbCrLf & vbCrLf & _
"Wil je dit blad toch opslaan?" & vbCrLf & vbCrLf, _
                vbYesNo + vbInformation, "Geïmporteerd bestand opslaan") = vbYes Then

' Het geïmporteerde CSV bestand als apart excelbestand opslaan in de map
Dim ChDir As String
ChDir = Sheets("Param").Range("F11").Value & ("\") & sYear & ("\")
Dim sFileName As String
sFileName = Sheets("Param").Range("F10").Value & (" ") & sYear

Cells.Select
Range("A500").Activate
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs FileName:= _
ChDir & sFileName

' Hierna gaat het fout. Er wordt een kopie van het werkblad 'Bank_1e_kwart'
' en als apart excelbestand opgeslagen, maar dat staat nog open, los van deze werkmap.
' Nadat het bestand is weggeschreven, zou die werkmap moeten worden gesloten en
' worden teruggekeerd naar Application.Goto Sheets("Bank_1e_kwart").Range("A1")
' en de MsgBox moeten laten verschijnen

MsgBox "De CSV data is opgeslagen in:" & vbCrLf & Sheets("Param").Range("F11") & vbCrLf & _
vbCrLf & " " & "onder de naam:" & " " & Sheets("Param").Range("F10").Value, vbOKOnly + vbInformation, "Opslag van geïmporteerd CSV bestand"
End If
End Sub
 
Pvag,

Om met de eerste vraag te beginnen, na de ActiveWorkbook.SaveAs is dat bestand het active document. Deze kun je simpel sluiten met:
ActiveWorkbook.Close. Waarna het bestand met daarin de macro weer het active bestand wordt.

Veel Succes.
 
Je kan onderscheid in de code maken met 'Activeworkbook' en 'Thisworkbook'.
Zo kan de code altijd verder met de juiste handelingen zonder iets te moeten sluiten.
 
Hey boys,

Bedankt voor jullie tip. Werkt inderdaad goed.

M.v.g. Ton
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan