la réinitialisation des variables dans excel vba

Je suis en train de construire un modèle avec VBA faire un peu de travail pour moi. Supposons que j'ai 4 variables - unité, la location de la date de début de bail p.un, et l'alternative de la location p.un. Il n'y sont plus, mais qui n'a pas d'importance pour mon problème. VBA boucle sur chaque ligne et obtient la valeur de l'unité i dans la colonne respective.

Donc, logiquement, je pourrais déclarer unité comme une chaîne de caractères, bail date de début date, bail p.un unique, et l'alternative de la location p.un. en tant que single. Le problème que j'ai c'est que j'ai besoin de distinguer entre le vide d'entrée et de 0. La valeur par défaut valeur numérique va être 0. la distinction entre 0 et vide est crucial. Le seul moyen que j'ai trouvé pour contourner ce problème consiste à déclarer tout comme Variante et de vérifier ensuite si la gamme correspondante est vide. Si elle est vide, alors le bail de la Variante de la valeur par défaut (Vide), autrement affecter la valeur.

J'ai le sentiment que cela va sérieusement affecter mon code de la performance. En fin de compte, il y aura beaucoup de variables, et je veux me référer à ces variables dans le code. Comme, if isempty(AltLease) = true then faire qu'une seule chose, sinon quelque chose d'autre.

Je trouve aussi que je ne peux pas vide unique ou variable de type date(la date n'est pas réellement un problème, car il tombe à 1900). Quelqu'un peut-il suggérer quelque chose?

Voici le code:

Dim tUnitName As Variant
Dim tNumberOfUnits As Variant
Dim tLeaseCurLeaseLengthDef as Variant
Dim tLeaseCurLeaseLengthAlt as Variant


Sub tenancyScheduleNew()
Dim lRow As Long
Dim i As Long
lRow = Sheet2.Cells(Rows.Count, 2).End(xlUp).Row
For i = 3 To lRow
    reAssignVariables i
Next i
End Sub

Sub reAssignVariables(i As Long)
tAssetName = checkIfEmpty(i, getColumn("Sheet4", "tAssetName", 3))
tNumberOfUnits = checkIfEmpty(i, getColumn("Sheet4", "tNumberOfUnits", 3))
tLeaseCurLeaseLengthDef = checkIfEmpty(i, getColumn("Sheet4", "tLeaseCurLeaseLengthDef", 3))
tLeaseCurLeaseLengthDef = checkIfEmpty(i, getColumn("Sheet4", "tLeaseCurLeaseLengthAlt", 3))

End Sub

Function getColumn(sh As String, wh As String, colNo As Long) As Long
Dim refSheet As Worksheet
Dim rFound As Range
Set refSheet = Sheets(sh)
With refSheet
    Set rFound = .Columns(1).Find(What:=wh, After:=.Cells(1, 1), LookIn:=xlValues, LookAt:=xlWhole)
    On Error GoTo 0
    If Not rFound Is Nothing Then
        getColumn = rFound.Offset(0, colNo - 1).Value
    Else
    End If
End With

End Function

C'est la façon dont je le fais maintenant, ce qui je pense sera de ralentir les performances vers le bas. Ce est seulement une petite partie des variables que j'ai fait -, il va être beaucoup plus. J'ai juste besoin de comprendre comment construire correctement en premier lieu. Plus précisément, si il ya une valeur dans tLeaseCurLeaseLengthAlt, le code devrait l'utiliser, vous pouvez également utiliser la valeur par défaut.

  • Pouvez-vous poster le code qui vous a déjà essayé?
  • J'ai du mal à obtenir le code ici... peut-être des conseils à lui seul pourrait faire? Effectivement je suis en déclarant tout comme variante, puis utiliser la fonction personnalisée pour vérifier si il doit rester vide " Fonction checkIfEmpty(rowNo, colNo) Comme Variante if IsEmpty(Feuil2.Les cellules(rowNo, colNo)) = Vrai Alors checkIfEmpty = Vide " Si variableTypeIfEmpty = "Rien" Puis Définissez checkIfEmpty = Rien d'Autre checkIfEmpty = Feuil2.Les cellules(rowNo, colNo).La Valeur De Fin Si Fin Fonction"
  • pouvez-vous ne pas simplement utiliser IsEmpty() pour vérifier entre 0 et NULL?
  • J'ai besoin d'obtenir la valeur de la variable en tant que vide, mais si je déclarer ce que numérique (simple, double, etc.) il sera toujours 0 ou tout ce qui est dans la cellule correspondante
  • Poster votre code dans votre question initiale, et il peut être formaté correctement
  • fait.

InformationsquelleAutor user2287712 | 2015-06-24