2012-02-26 24 views
6

Estoy un poco confundido por celda y rango en vba (excel). Lógicamente, podría pensar una celda como un rango con tamaño = 1; y creo que es fácil hacer un rango desde una celda.Excel vba: tipo rango y celda

Si leo la api de la propiedad EntireRow here funciona en el rango. Sin embargo, el trabajo de código siguiente, que indica 'cell'variable dentro del bucle es una gama

Set import = Sheets("import") 
    Set spRange = import.Range("A2") 
    Set spRange = import.Range("A2:" & spRange.End(xlDown).Address) 
    For Each cell In spRange 
     dict.Add cell.Offset(0, 2).Text, cell.EntireRow 
    Next cell 

Al mismo tiempo, el código de abajo devuelve un error que indica coincidencia de tipos cuando se llame a la función removecell. ¿Cuál debería ser el tipo de targetCell en la definición de la función?

Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell (cell) 
Next cell 


Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

tiene usted razón. Cell es un Rango con 1 artículo. Es 'val', del tipo' Boolean'? – shahkalpesh

+0

sí. Este método ya funcionaba cuando pasé "cell.Text" y lo acepto en el método remove cellVal As String. Ahora estoy tratando de pasar la celda (rango) sí mismo al pasar la celda en lugar de la celda. Texto – bsr

Respuesta

4

Esto compila y se ejecuta:

Sub Tester() 
Dim spRange As Excel.Range 
Dim cell As Excel.Range 
Dim mySheet As Excel.Worksheet 
Dim val As Boolean 

Set mySheet = ActiveSheet 
Set spRange = mySheet.Range("b2", mySheet.Range("b2").End(xlDown)) 
For Each cell In spRange 
    val = removecell(cell) 
Next cell 

End Sub 

Public Function removecell(targCell As Range) As Boolean 
    removecell = False 
End Function 
+0

Gracias. "Dim cell As Excel.Range" me dio una pista, ya que no estaba declarando explícitamente celular antes. Como mencioné, acabo de convertir el método, y anteriormente no necesitaba declarar la celda explícitamente. El error que obtuve fue un poco engañoso. – bsr

+2

El valor predeterminado del objeto Range es Value, por lo que con Cell no declarado como Range, se asumió que Cell era un valor, que, lo suficientemente razonable, provocó el "error de coincidencia de tipos". Es una muy buena práctica declarar todas las variables. Para forzar esto, en el VBE, seleccione Herramientas> Opciones> Editor> Requerir declaración de variable. Esto agregará Option Explicit al principio de todos los módulos nuevos y le dará un error de compilador de "Variable no definida" para las variables no declaradas. También puede simplemente escribir Option Explicit en la parte superior de los módulos existentes. –

+0

+1 en el buen consejo para declarar variables! –

Cuestiones relacionadas