J'essaie de créer un nombre de variables dynamics dans VBA en fonction de la valeur d'une cellule. Essentiellement, j'aimerais terminer avec Team1, Team2... to TeamX
. Toute aide est grandement appréciée
Dim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Dim i, x As IntegerDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Définir x = Plage ("J4"). ValeurDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Dim Team (1 à x) en tant que stringDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Dim Manager (1 à x) en tant que stringDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Gamme ("A3"). SélectionnezDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Pour i = 1 à xDim i, x As Integer Set x = Range("J4").Value Dim Team(1 To x) As Ssortingng Dim Manager(1 To x) As Ssortingng Range("A3").Select For i = 1 To x Dim Team(i) As Integer
Un dictionary aiderait probablement dans ce cas, il est conçu pour les scripts, et même s'il ne vous permet pas de créer des variables «dynamics», les éléments du dictionary sont dynamics et peuvent servir à des fins similaires à celles de «variables».
Dim Teams as Object Set Teams = CreateObject("Scripting.Dictionary") For i = 1 To x Teams(i) = "some value" Next
Dim Teams as ObjectDim Teams as Object Set Teams = CreateObject("Scripting.Dictionary") For i = 1 To x Teams(i) = "some value" Next
Définir les équipes = CreateObject ("Scripting.Dictionary")Dim Teams as Object Set Teams = CreateObject("Scripting.Dictionary") For i = 1 To x Teams(i) = "some value" Next
Pour i = 1 à xDim Teams as Object Set Teams = CreateObject("Scripting.Dictionary") For i = 1 To x Teams(i) = "some value" Next
Equipes (i) = "une certaine valeur"Dim Teams as Object Set Teams = CreateObject("Scripting.Dictionary") For i = 1 To x Teams(i) = "some value" Next
Plus tard, pour interroger les valeurs, appelez simplement l'élément comme:
MsgBox Teams(i)
Les dictionarys contiennent des paires de keys / valeurs, et les keys doivent être uniques. L'atsortingbution à une key existante replacea sa valeur, par exemple:
Teams(3) = "Detroit" Teams(3) = "Chicago" Debug.Print Teams(3) '## This will print "Chicago"
Équipes (3) = "Détroit"Teams(3) = "Detroit" Teams(3) = "Chicago" Debug.Print Teams(3) '## This will print "Chicago"
Équipes (3) = "Chicago"Teams(3) = "Detroit" Teams(3) = "Chicago" Debug.Print Teams(3) '## This will print "Chicago"
Vous pouvez vérifier l'existence en utilisant la méthode .Exist
si vous devez vous soucier de l'écrasement ou non.
If Not Teams.Exist(3) Then Teams(3) = "blah" Else: 'Teams(3) already exists, so maybe we do something different here End If
Si Non Teams.Exist (3) EnsuiteIf Not Teams.Exist(3) Then Teams(3) = "blah" Else: 'Teams(3) already exists, so maybe we do something different here End If
Équipes (3) = "blah"If Not Teams.Exist(3) Then Teams(3) = "blah" Else: 'Teams(3) already exists, so maybe we do something different here End If
'Les équipes (3) existent déjà, alors peut-être que nous faisons quelque chose de différent iciIf Not Teams.Exist(3) Then Teams(3) = "blah" Else: 'Teams(3) already exists, so maybe we do something different here End If
Vous pouvez get le nombre d'éléments dans le dictionary avec la méthode .Count
.
MsgBox "There are " & Teams.Count & " Teams.", vbInfo
Les keys d'un dictionary doivent être entières ou en string, mais les valeurs peuvent être n'importe quel type de données (y compris les arrays et même les types de données Object
, comme Collection
, Worksheet
, Application
, Dictionnaires nesteds, etc., en utilisant le mot-key Set
), donc, par exemple, vous pourrait dicter les feuilles de travail dans un classur:
Dim ws as Worksheet, dict as Object Set dict = CreateObject("Scripting.Dictionary") For each ws in ActiveWorkbook.Worksheets Set dict(ws.Name) = ws Next
Dim ws comme feuille de calcul, dict comme objectDim ws as Worksheet, dict as Object Set dict = CreateObject("Scripting.Dictionary") For each ws in ActiveWorkbook.Worksheets Set dict(ws.Name) = ws Next
Set dict = CreateObject ("Scripting.Dictionary")Dim ws as Worksheet, dict as Object Set dict = CreateObject("Scripting.Dictionary") For each ws in ActiveWorkbook.Worksheets Set dict(ws.Name) = ws Next
Pour chaque ws dans ActiveWorkbook.WorksheetsDim ws as Worksheet, dict as Object Set dict = CreateObject("Scripting.Dictionary") For each ws in ActiveWorkbook.Worksheets Set dict(ws.Name) = ws Next
Définir dict (ws.Name) = wsDim ws as Worksheet, dict as Object Set dict = CreateObject("Scripting.Dictionary") For each ws in ActiveWorkbook.Worksheets Set dict(ws.Name) = ws Next
Cela vous amènera à démarrer. Mais avant de commencer, je recommand de regarder ce didacticiel WiseOwlTutorials sur Youtube:
Dim i, x As Integer x = Gamme ("J4"). Valeur Dim Team () As Integer Dim Manager () As Ssortingng ReDim Team (1 à x) en entier ReDim Manager (1 à x) en tant que string Gamme ("A3"). Sélectionnez Pour i = 1 à x Équipe (i) = i Prochain