Quand j'exécute cette fonction

    Call makeTable("Uber Tracker", range(Cells(7, 1), Cells(LastUber, 42)))
    Call makeTable("Finance Tracker", range(Cells(21, 1), Cells(LastFinance, 23)))

Le premier appel fonctionne correctement, mais le second indique que la plage de feuille de calcul d'erreur 1004 doit être sur la même feuille que la table en cours de création.

    Sub makeTable(TableSheet As String, TableRange As range)
        On Error GoTo errorHandler
        Sheets(TableSheet).ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet

    errorHandler:
        If Err.Number <> 0 Then
            Debug.Print "Error number :" + CStr(Err.Number) + " reason: " + Err.Description
        End If

    End Sub

Qu'est-ce qui ne va pas? J'ai vérifié quelle feuille il sélectionne, et il devrait être correct, même pour la gamme.

0
user1902692 23 déc. 2015 à 13:20

2 réponses

Meilleure réponse

Votre TableRange est sur l'ActiveSheet (où que ce soit). Vous essayez de créer un tableau sur la feuille ("Finance Tracker") avec une plage extraite de la feuille active.

En fonction de ce dont vous avez vraiment besoin, vous pouvez soit changer le sous-marin maketable comme ceci:

ActiveSheet.ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet

Ou changez l'appel comme ceci:

Call makeTable("Finance Tracker", sheets("Finance Tracker").range(sheet("Finance Tracker").Cells(21, 1), sheet("Finance Tracker").Cells(LastFinance, 23)))

Assurez-vous simplement que tout se passe sur la même feuille.

MODIFIER:

Encore une chose à essayer (fonctionne pour moi de cette façon également):

Worksheets("Uber Tracker").Activate
Call makeTable("Uber Tracker", Range(Cells(7, 1), Cells(10, 42)))
Worksheets("Finance Tracker").Activate
Call makeTable("Finance Tracker", Range(Cells(21, 1), Cells(30, 23)))

Assurez-vous simplement que la plage que vous utilisez pour créer une table se trouve sur la même feuille que celle où la table est ajoutée. Il existe de nombreuses façons de le faire, ce ne sont que quelques exemples.

2
vacip 23 déc. 2015 à 11:24

Vous pouvez également simplement utiliser l'adresse de n'importe quelle plage transmise à la routine:

Sheets(TableSheet).ListObjects.Add(xlSrcRange, Sheets(TableSheet).Range(TableRange.Address), ,xlYes).name = TableSheet
0
Rory 23 déc. 2015 à 10:58