2009-08-03 6 views
1

Je cours quelques modules de code dans l'accès et écris des données dans Excel. Quand j'écris la première fois, les données sont écrites correctement. Mais encore une fois quand j'essaye, les nouvelles données sont écrites sur les anciennes données. Que dois-je faire pour insérer une nouvelle feuille?Accéder à VBA Comment ajouter de nouvelles feuilles à Excel?

Mon code existant est

Dim objexcel As Excel.Application 
Dim wbexcel As Excel.Workbook 
Dim wbExists As Boolean 
Dim objSht As Excel.Worksheet 
Dim objRange As Excel.Range          
Set objexcel = CreateObject("excel.Application") 
On Error GoTo Openwb 
wbExists = False 
Set wbexcel = objexcel.Workbooks.Open("C:\REPORT1.xls") 
Set objSht = wbexcel.Worksheets("Sheet1") 
objSht.Activate 
wbExists = True 

Openwb:    
On Error GoTo 0 
If Not wbExists Then 
    objexcel.Workbooks.Add 
    Set wbexcel = objexcel.ActiveWorkbook 
    Set objSht = wbexcel.Worksheets("Sheet1") 
End If 
+0

oui c'est si la feuille 1 est remplie, puis la feuille 2 si la feuille 2 est remplie, puis passez à la feuille 3 et ainsi de suite. – tksy

Répondre

3

Je pense que le code suivant devrait faire ce que vous voulez. Il est très similaire au vôtre, sauf qu'il utilise les valeurs de retour des méthodes .Add pour obtenir les objets souhaités.

Public Sub YourSub() 
    Dim objexcel As Excel.Application 
    Dim wbexcel As Excel.Workbook 
    Dim wbExists As Boolean 
    Set objexcel = CreateObject("excel.Application") 

    'This is a bad way of handling errors. We should' 
    'instead check for the file existing, having correct' 
    'permissions, and so on, and actually stop the process' 
    'if an unexpected error occurs.' 
    On Error GoTo Openwb 
    wbExists = False 
    Set wbexcel = objexcel.Workbooks.Open("C:\REPORT1.xls") 
    wbExists = True 

Openwb: 
    On Error GoTo 0 
    If Not wbExists Then 
     Set wbexcel = objexcel.Workbooks.Add() 
    End If 

    CopyToWorkbook wbexcel 
EndSub 

Private Sub CopyToWorkbook(objWorkbook As Excel.Workbook) 
    Dim newWorksheet As Excel.Worksheet 
    set newWorksheet = objWorkbook.Worksheets.Add() 

    'Copy stuff to the worksheet here' 
End Sub 
+0

Cela ferait toujours la même fonction. Quand je exécute de façon réitérée les données de code seront copiées dans sheet1 seulement – tksy

+0

Ah désolé - je n'ai pas lu votre question correctement. Essaye ça. – Ant

+1

Je ne vais pas voter votre réponse vers le bas, parce que la partie pertinente à la question est correcte, mais je pense qu'utiliser On Error Resume Next et ensuite On Error GoTo 0 pour un bloc de code est une très mauvaise pratique. S'il y a une erreur anticipée dont vous savez qu'elle peut être ignorée, écrivez un gestionnaire d'erreur qui rejette cette erreur. Sinon, vous risquez d'ignorer les erreurs importantes qui ne doivent pas être ignorées. –

Questions connexes