2017-05-17 3 views
1

J'ai une macro Outlook qui fonctionne pour exporter les utilisateurs Tasklist vers une feuille de calcul Excel stockée sur un lecteur réseau. Je tente de vérifier si un classeur est déjà présent dans le répertoire (If statement taken form here).Erreur d'exécution lors de la tentative de suppression d'une feuille de calcul d'un classeur nouvellement créé - Outlook VBA

S'il n'y a pas un, puis faire un nouveau classeur avec une feuille de calcul appelée « Feuille 1 », et s'il y a déjà un avec le nom d'utilisateur, puis ouvrez (add statement taken from here):

Dim FilePath As String 
Dim TestStr As String 
Dim objExcel As New Excel.Application 
Dim exWb As Excel.Workbook 
Dim NAME_s As String 

objExcel.DisplayAlerts = False 
'Use the Application Object to get the Username 
NAME_s = Environ("USERNAME") 



    FilePath = "the\directory\" & NAME_s & ".xlsx" 

    TestStr = "" 
    On Error Resume Next 
    TestStr = Dir(FilePath) 
    On Error GoTo 0 
    If TestStr = "" Then 
    Set exWb = objExcel.Workbooks.Add(1) 
    exWb.Worksheets(1).Name = "Sheet1_old" 

Else 
    Set exWb = objExcel.Workbooks.Open("J:\Efficiency Measures\PTaR\" & NAME_s & ".xlsx") 
End If 

exWb.Sheets.Add().Name = "Sheet1" 
exWb.Sheets("Sheet1_old").Delete 

Lorsque je parcours l'instruction If, la valeur TestStr déclenche la première condition, ce qui est correct, mais la ligne exWb.Sheets("Sheet1").Delete déclenche une erreur d'exécution (le classeur doit contenir au moins une feuille visible). Mais je pensais qu'avoir le objExcel.Workbooks.Add(1) ajouterait un nouveau classeur au répertoire spécifié avec une feuille de calcul appelée "Feuille 1".

Comment puis-je modifier le code ci-dessus pour m'assurer que le nouveau classeur généré porte le nom «Sheet 1» et est enregistré dans l'emplacement nework spécifié dans la variable FilePath?

+2

Vous ne pouvez pas supprimer la seule feuille du classeur - Excel ne « savoir » ne vous allez ajouter un dos ... Commencez par renommer « Sheet1 » à "Sheet1_old", puis ajouter la nouvelle feuille, puis supprimer "Sheet1_old" –

+0

@TimWilliams - Merci pour cela, mais comment puis-je modifier le code ci-dessus pour renommer la feuille? J'ai mis à jour le code ci-dessus pour montrer où j'ai mis le changement de nom, mais il montre une erreur 438 - Objet ne supporte pas cette propriété – scb998

Répondre

2

Comme ceci:

exWb.Sheets("Sheet1").Name = "Sheet1Old" 
exWb.Sheets.Add().Name = "Sheet1" 
exWb.Sheets("Sheet1Old").Delete 
+0

Merci Tim - avoir un autre problème avec cette macro particulière qui affiche dans un instant - Etre prêt! : P – scb998