2013-01-23 28 views
7

Voglio rendere la mia funzione VBA personalizzata accetta solo un argomento a cella singola. Qual è il Rightway di farlo:Excel/VBA: passaggio di una singola cella come argomento

  • passaggio myCell as Cell

o:

  • passaggio myRange as Range e ottenere la cella di sinistra-alto di default (come?)?
+0

si può mostrare la funzione così .. è possibile aggiungere in 'Myfunction (ByRef mycell come Range)' come parametro – bonCodigo

+0

In realtà, come se spesso accade, la soluzione arriva dopo aver chiesto la domanda: 'topLeftValue = myRange.Cells (1, 1) .Value' – user776686

+0

è la convalida della seguente risposta che stai cercando? – bonCodigo

risposta

14

Se si seleziona più di una cella la funzione uscirà:

Function AcceptOneCell(rng As Range) 

If (rng.Cells.Count > 1) Then 
    AcceptOneCell = "Only allow 1 cell" 
    Exit Function 
End If 

    ' your code here 

End Function 
+0

+ 1 per dare quello che l'OP chiedeva –

+0

così posso chiamare questa funzione in questo modo ----> AcceptOneCell (Celle (1,1)) (funzionerà? – BKSpurgeon

+0

sì è possibile Bene anche per definire quale foglio proviene dalla cella (Range): Sheet1.Cells (1,1) per esempio. – InContext

7

Supponendo che l'utente entrerà in una gamma con più colonne e righe, è possibile effettuare le seguenti operazioni di controllo per uscire dalla funzione se è questo che si intende per la questione ...

Function myFunction(ByRef myCell as Range) as SomeDataType_of_your_choice 
Dim numRow as Long, numCol as Long 

numRow = myCell.Columns.Count 
numCol = myCell.Rows.Count 

If numRow > 1 or numCol > 1 Then 
    MsgBox "Only one cell is accepted" 
    Exit Function  
Else 
    '-- do other stuff you want to do here 
End If 
End Function 
+0

+ 1 per dare quello che l'OP chiedeva –

4
topLeftValue = myRange.Cells(1, 1).Value 
0
numRow = myCell.Columns.Count 

numCol = myCell.Rows.Count 

Dovrebbe essere

numColum = myCell.Columns.Count 

numRow = myCell.Rows.Count 
Problemi correlati