web-dev-qa-db-fra.com

Excel VBA Ouvrir le classeur, effectuer des actions, enregistrer sous, fermer

Cette question a été modifiée en raison de longs commentaires et mises à jour des réponses proposées.

Comme demandé ici est le module 13;

Sub SaveInFormat()
Application.DisplayAlerts = False
Workbooks.Application.ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data\" & Format(Date, "yyyymm") & "DB" & ".xlsx",   leFormat:=51
Application.DisplayAlerts = True
End Sub

Il y a aussi des problèmes avec la gestion des erreurs, je sais que je me suis trompé, mais je suis plus intéressé par la correction de la fonction de fermeture au moment où j'y vais. Voici le code de gestion des erreurs qui nécessite un peu de travail

Sub test()

Dim wk As String, yr As String, fname As String, fpath As String
Dim owb As Workbook

wk = ComboBox1.Value
yr = ComboBox2.Value
fname = yr & "W" & wk
fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data"
owb = Application.Workbooks.Open(fpath & "\" & fname)
On Error GoTo ErrorHandler:
ErrorHandler:
If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then Exit Sub Else Call Clear

'Do Some Stuff

Call Module13.SaveInFormat

owb.Close

c'est votre code de test plus ma modification du chemin et du nom du fichier

9
JamesDev

Après la discussion, poster la réponse mise à jour:

Option Explicit
Sub test()

    Dim wk As String, yr As String
    Dim fname As String, fpath As String
    Dim owb As Workbook

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    wk = ComboBox1.Value
    yr = ComboBox2.Value
    fname = yr & "W" & wk
    fpath = "C:\Documents and Settings\jammil\Desktop\AutoFinance\ProjectControl\Data"

    On Error GoTo ErrorHandler
    Set owb = Application.Workbooks.Open(fpath & "\" & fname)

    'Do Some Stuff

    With owb
        .SaveAs fpath & Format(Date, "yyyymm") & "DB" & ".xlsx", 51
        .Close
    End With

    With Application
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = True
    End With

Exit Sub
ErrorHandler: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then

Else: Call Clear

End Sub

Gestion des erreurs:

Vous pouvez essayer quelque chose comme ceci pour détecter une erreur spécifique:

    On Error Resume Next
    Set owb = Application.Workbooks.Open(fpath & "\" & fname)
    If Err.Number = 1004 Then
    GoTo FileNotFound
    Else
    End If

    ...
    Exit Sub
    FileNotFound: If MsgBox("This File Does Not Exist!", vbRetryCancel) = vbCancel Then

    Else: Call Clear
8
Alistair Weir

Je vais essayer de répondre à plusieurs choses différentes, mais ma contribution peut ne pas couvrir toutes vos questions. Peut-être que plusieurs d'entre nous peuvent en retirer des morceaux différents. Cependant, ces informations devraient vous être utiles. Et c'est parti..

Ouverture d'un fichier séparé:

ChDir "[Path here]"                          'get into the right folder here
Workbooks.Open Filename:= "[Path here]"      'include the filename in this path

'copy data into current workbook or whatever you want here

ActiveWindow.Close                          'closes out the file

Ouverture d'un fichier avec une date spécifiée s'il existe:

Je ne sais pas comment rechercher dans votre répertoire pour voir si un fichier existe, mais dans mon cas, je ne prendrais pas la peine de le rechercher, j'essaierais simplement de l'ouvrir et de faire une vérification d'erreur afin que s'il ne n'existe pas alors affichez ce message ou faites xyz.

Quelques déclarations de vérification d'erreur courantes:

On Error Resume Next   'if error occurs continues on to the next line (ignores it)

ChDir "[Path here]"                         
Workbooks.Open Filename:= "[Path here]"      'try to open file here

Ou (meilleure option):

s'il n'y en a pas, ouvrez une boîte de message ou une boîte de dialogue pour dire "le fichier n'existe pas, voulez-vous en créer un nouveau?

vous voudrez probablement utiliser le GoTo ErrorHandler indiqué ci-dessous pour y parvenir

On Error GoTo ErrorHandler:

ChDir "[Path here]"                         
Workbooks.Open Filename:= "[Path here]"      'try to open file here

ErrorHandler:
'Display error message or any code you want to run on error here

Beaucoup plus d'informations sur la gestion des erreurs ici: http://www.cpearson.com/Excel/errorhandling.htm


Aussi, si vous voulez en savoir plus ou devez en savoir plus en général sur VBA, je recommanderais le site de Siddharth Rout, il a beaucoup de tutoriels et d'exemples de code ici: http://www.siddharthrout.com/vb-dot- net-et-Excel /

J'espère que cela t'aides!


Exemple sur la façon de s'assurer que le code d'erreur ne s'exécute PAS CHAQUE fois:

si vous déboguez le code sans le Exit Sub AVANT le gestionnaire d'erreurs, vous vous rendrez vite compte que le gestionnaire d'erreurs sera exécuté à chaque fois qu'il y aura une erreur ou non. Le lien sous l'exemple de code montre une réponse précédente à cette question.

  Sub Macro

    On Error GoTo ErrorHandler:

    ChDir "[Path here]"                         
    Workbooks.Open Filename:= "[Path here]"      'try to open file here

    Exit Sub      'Code will exit BEFORE ErrorHandler if everything goes smoothly
                  'Otherwise, on error, ErrorHandler will be run

    ErrorHandler:
    'Display error message or any code you want to run on error here

  End Sub

Aussi, regardez cette autre question car vous avez besoin de plus de référence sur la façon dont cela fonctionne: le bloc goto ne fonctionne pas VBA


2
Mike Kellogg