Stocker les données de localisation de l'adresse de la cellule à la variable en VBA
Je suis à l'aide de VBA dans Excel et je suis en utilisant une fonction pour trouver la première ligne vide puis d'ajouter des valeurs, après que j'ai besoin de passer l'adresse de la cellule à une autre fonction, mais à l'aide du code ci-dessous j'obtiens une erreur à l'exécution. firstEmptyRow est une fonction qui renvoie une plage,par exemple $A$280
.
Dim addCell as Range
'Find first empty row in the table
With firstEmptyRow
'Enter Values
.Value = taskID
.Offset(0, 1).Value = jobID
.Offset(0, 2).Value = jobName
.Offset(0, 6).Value = taskTypeID
.Offset(0, 8).Value = taskName
.Offset(0, 9).Value = desc
.Offset(0, 11).Value = estMins
.Offset(0, 13).Value = "No"
set addCell = .Address //Gives a runtime error
End With
Quelle est la bonne façon d'économiser de l'adresse de la cellule, donc je peux passer à une autre fonction? Ci-dessous est le code pour firstEmptyRow
Public Function firstEmptyRow() As Range 'Returns the first empty row in the Schedule sheet
Dim i, time As Long
Dim r As Range
Dim coltoSearch, lastRow As String
Dim sheet As Worksheet
Set sheet = Worksheets("Schedule")
time = GetTickCount
coltoSearch = "A"
For i = 3 To sheet.Range(coltoSearch & Rows.Count).End(xlUp).Row
Set r = sheet.Range(coltoSearch & i)
If Len(r.Value) = 0 Then
Set firstEmptyRow = sheet.Range(r.Address)
'r.Select
Exit For 'End the loop once the first empty row is found
End If
Next i
'Debug.Print "firstEmptyRow time: " & GetTickCount - time, , "ms"
End Function
- Il serait plus propre de passer
firstEmptyRow
directement à la Gamme de type de paramètre, plutôt que de le convertir en une chaîne, puis de nouveau à un objet de la Plage (en particulier depuis, vous devez ensuite spécifier le parent feuille de calcul, ce qui rend votre code plus fragiles si vous avez besoin de mise à jour) - Ne pas
public function firstEmptyRow() as Range
dire que je suis déjà passer en tant que Gamme? Je ne pense pas que je sais ce que tu veux dire - Je veux dire, si vous avez déjà une Gamme variable de type
firstEmptyRow
il n'y a pas besoin de convertir une chaîne de caractères (viaAddress
) et puis de nouveau à un objet de la Plage: le round-trip à travers la Chaîne n'est pas nécessaire et vous pouvez juste passerfirstEmptyRow
directement.
Vous devez vous connecter pour publier un commentaire.
La
.Address
propriété renvoie une chaîne de caractères de sorte que vous aurez besoin de définir laaddCell
variable comme ceci: