2008-11-11 11 views
4

Je suis en train d'écrire une macro pour un groupe thaQuelle est la meilleure façon d'obtenir la dernière feuille de calcul non vide dans Excel (VBA)

  • a un classeur dans lequel ils créent chaque jour de nouvelles feuilles de calcul, et ont également
  • Feuille 1, Feuille 2 et feuille 3 à la fin de leur longue liste de feuilles.

Je dois créer une référence de cellule externe dans une nouvelle colonne dans un autre classeur où cette information est résumée.

J'ai donc besoin de savoir comment obtenir la dernière feuille non-vide afin que je puisse saisir ces données et les placer de manière appropriée dans le résumé.

Répondre

6

Cette fonction fonctionne à travers les feuilles de droite à gauche jusqu'à ce qu'il trouve une feuille non vide et retourne son nom

Function GetLastNonEmptySheetName() As String 
Dim i As Long 
For i = Worksheets.Count To 1 Step -1 
    If Sheets(i).UsedRange.Cells.Count > 1 Then 
    GetLastNonEmptySheetName = Sheets(i).Name 
    Exit Function 
    End If 
Next i 
End Function 
+0

Merci! J'ai plongé dans Excel VBA et apprendre rapidement je pense, mais c'est différent des langues que je connais. –

1

La méthode ci-dessus ne pas tenir compte d'une feuille avec une seule entrée cellulaire, alors que peut semblent être un problème, un Find à la recherche d'une cellule non-vide donnera plus de certitude.

L'argument xlFormulas de la méthode Find trouvera des cellules cachées (mais pas des cellules filtrées) alors que xlValues ne le fera pas.

Sub FindLastSht() 
    Dim lngCnt As Long 
    Dim rng1 As Range 
    Dim strSht As String 
    With ActiveWorkbook 
     For lngCnt = .Worksheets.Count To 1 Step -1 
      Set rng1 = .Sheets(lngCnt).Cells.Find("*", , xlFormulas) 
      If Not rng1 Is Nothing Then 
       strSht = .Sheets(lngCnt).Name 
       Exit For 
      End If 
     Next lngCnt 
     If Len(strSht) > 0 Then 
      MsgBox "Last used sheet in " & .Name & " is " & strSht 
     Else 
      MsgBox "No data is contained in " & .Name 
     End If 
    End With 
End Sub