Comment puis-je créer et passer de tableau de chaîne à un sous Excel VBA?
VBA tableaux sont nouveaux pour moi et il semble que il ya plusieurs façons de créer des tableaux de chaîne.
- Je crois que j'ai besoin de créer un tableau dynamique
- Mais je ne trouve pas d'exemples comment passer les tableaux dynamiques à une sous-routine
Je savoir combien de points il faut être dans le tableau par le comte de la zone Utilisateur (donc peut-être que je n'ai pas besoin d'un tableau dynamique??). J'ai de la difficulté du passage du tableau par le biais d'une autre sous-Routine.
Le processus de la pensée est comme suit:
- Itérer sur une liste de noms d'utilisateur
- Créer une fiche pour chaque
- Enregistrer chaque nom d'utilisateur dans un tableau comme je l'ai itérer
- Dans une autre sous-Routine, sélectionner toutes les feuilles que j'ai créé et enregistrer en tant que PDF
Ci-dessous mon code. J'obtiens l'erreur d'Exécution 9 - Indice en dehors de la gamme (en se Référant à l'objet array)
J'apprécie toute l'aide! Merci!!!!
Sub CreateAllDashboards(StartDate As Date, EndDate As Date)
'Used to iterate through the list of users and call the Sub to create Dashboards
Dim UserNameRangeStart As Range
Set UserNameRangeStart = Range("UserName")
Dim SheetNames() As String
'Cyle through users
For i = 1 To GetUserNameRange().CounT
'Some code
ReDim Preserve SheetNames(i)
SheetNames(i) = UserNameRangeStart.Offset(i, 0).Value
Next i
Call CreatePDF(EndDate, SheetNames) 'Also tried SheetNames()
End Sub
Sub CreatePDF(FileDate As Date, ByRef SheetNames As Variant)
Dim FilePath As String, FileName As String
FilePath = Application.ActiveWorkbook.Path
FileName = "Production Dashboards - " & Format(FileDate, "mmddyy") & ".pdf"
ThisWorkbook.Sheets(SheetNames).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub
OriginalL'auteur Barrett Kuethen | 2014-12-31
Vous devez vous connecter pour publier un commentaire.
Le paramètre de tableau n'est pas un problème, il est transmis correctement à la méthode
CreatePDF(...)
. Le type de paramètre peut être modifié àSheetNames() As String
maisSheetNames As Variant
fonctionne aussi bien.Puis le
Run-time error 9 - Subscript out of range
est soulevée iciThisWorkbook.Sheets(SheetNames).Select
, parce que le tableauSheetNames
contient invalide nom de la feuille, qui est le premier élément. Cet élément est une chaîne vide chaîne vide n'est pas valide en tant que nom de la feuille.Dans le
For Next
indice de boucle commence avec la valeur1
mais le tableau commence avec0
. Ainsi, le premier élément du tableauSheetNames
reste intacte et est enfin une chaîne vide. Pour le résoudre définir la limite inférieure dansReDim
explicitement à1
. HTH(Note: si vous omettez de limite inférieure puis
Option Base
est utilisé et si aucunOption Base
est spécifiée, alors0
est utilisé.)Kuethen je suis contente qu'il a aidé!
OriginalL'auteur dee
Je voudrais changer cela:
Sub CreatePDF(FileDate As Date, ByRef SheetNames As Variant)
:
Sub CreatePDF(FileDate As Date, SheetNames() As String)
Mais que votre problème vient de cette ligne:
ThisWorkbook.Sheets(SheetNames).Select
Édité à partir de dee commentaire:
Vous pouvez mettre un tableau de noms de feuille de calcul dans
.Sheets()
mais sans des lignes vides. Donc, dans votre sous "CreateAllDashboards" faites ceci:et vous avez pu lire que sur les tableaux en VBA.
Nous apprenons tous les jours, merci @dee 🙂
Exactement, c'est mon cas 🙂
OriginalL'auteur simpLE MAn
J'ai testé la suivante à l'aide d'une seule feuille du classeur avec une gamme nommée Utilisateurs et un autre nommé FileDate. Il fait ce que vous avez demandé.
La raison de la
Run-time error 9 - Subscript out of range
erreur, c'est que vous avez pour faire référence à l'élément de tableau.ThisWorkbook.Sheets(SheetNames).Select
lèvera une erreur, maisThisWorkbook.Sheets(SheetNames(x)).Select
ne va pas (tant que x est initialisé et à l'intérieur des limites du tableau)Ci-dessus montre comment analyser un tableau à un autre sous comme demandé, mais vous pourriez intégrer la CreatePDF code dans l'appel sous assez facilement aussi.
.Sheets()
. LeRun-time error 9
est jeté par la ligne vide dansSheetNames
tableau.OriginalL'auteur Mark Fitzgerald