Ayuda formula desde código

14/11/2007 - 13:27 por Antonio | Informe spam
Hola a todos, para calcular el número de ceros que hay en un rango hago

iNum = Application.WorksheetFunction.CountIf(ActiveSheet.Range("H21:I34"),
"=" & 0)

Que funciona correctamente, el problema es que quiero calcula los ceros de
otra hoja de otro fichero para hacer esto
xlwSemana.Sheets(3).Select
xlwSemana.Sheets(3).Activate (siendo xlwSemana As Excel.Workbook)
El problema es que ActiveSheet sigue siendo siempre la otra hoja y aunque he
seleccionado y activado esta no lo cambia.

Un saludo y muchas gracias

Preguntas similare

Leer las respuestas

#6 Antonio
15/11/2007 - 18:36 | Informe spam
Tienes razon Hector,

He utilizado código que utilizaba desde Visual Basic suponiendo que
funcionaria, y así a sido no se mucho de Excel y fue un código que vi en
Internet que alguien amablemente me cedio

hago esto

Dim xlFichero As New Excel.Application
Dim xlwSemana As Excel.Workbook
Set xlwSemana = xlFichero.Workbooks.Open(stRuta)

y ya tengo abierto el archivo xlwSemana, esta forma me gusta por que el
archivo no se ve, y desde el archivo de Excel que tengo abierto lo manejo, me
imagino que esta forma no es la mas adecuada, hasta ahora funcionaba y para
mis necesidades va bien para contar los ceros estoy haciendo

For i = 21 To 34
If xlwSemana.Sheets(3).Range("H" & i).Value = 0 Then
iNum = iNum + 1
End If
If xlwSemana.Sheets(3).Range("I" & i).Value = 0 Then
iNum = iNum + 1
End If
Next i
Por ahora esto va bien, el otro método además de ser mas eficiente es mucho
más elegante, pero me imagino que no se puede utilizar de esta forma, si me
indicaras la mejor forma de abrir un archivo Excel desde el propio Excel si
que este archivo se viera y si poder utilizar la fórmula te lo agradeceria.

Un saludo y gracias

P.D. Ahora me quedo sin conexión, si me respondes te leeré mañana, y gracias
otra vez por tus esfuerzos



"Héctor Miguel" wrote:

hola, Antonio !

> Efectivamente hago Set xlwSemana = xlFichero.Workbooks.Open(stRuta)
> ... esto funciona bien y puedo acceder a los datos moviendome por las hojas, es cuando hago
> iNum = Application.WorksheetFunction.CountIf(xlwSemana.Sheets(3).Range("H21:I34"), "=" & 0) cuando da error
> si hago iNum = Application.WorksheetFunction.CountIf(ActiveSheet.Range("H21:I34"), "=" & 0)
> me coge el rango del fichero desde que lo abro, que es el unico que se ve

1) cual es "la historia" de esta nueva variable de objeto: -> xlFichero ???

2) estas usando macros directas en excel ? (o estas instanciando excel desde otras aplicaciones -p.e. VB- ?)

3) por que la necesidad de tantos "brincos" entre distintas variables ? (xlFichero, xlwSemana, Workbooks.Open, ???)

me da la impresion de que existen mas de dos detalles aun "en el tintero" ?

saludos,
hector.

>> > ... intento lo que me has dicho... y me da un error... numero 13, "No coinciden los tipos"
>> > en el rango indicado las celdas tienen un formato de numero no se si sera por esto
>> > (utilizo iNum = Application.WorksheetFunction.CountIf(xlwSemana.Sheets(3).Range("H21:I34"), "=" & 0)
>> > iNum es una variable de tipo integer
>>
>> 1) de tu consulta anterior, donde mencionas que: "... (siendo xlwSemana As Excel.Workbook).."
>> se entiende que declaras una variable de objeto (p.e.) Dim xlwSemana As Excel.Workbook
>>
>> 2) antes de poder usar una variable de objeto es necesario establecer su referencia (p.e.)
>> Set xlwSemana = Workbooks("cualquier libro abierto.xls")
>>
>> 3) una vez establecida la referencia a la variable de objeto, ya puedes usar sus colecciones/objetos/propiedades/...
>> (p.e.) iNum = Application.WorksheetFunction.CountIf(xlwSemana.Sheets(3).Range("H21:I34"), "=" & 0)
>>
>> si cualquier duda (o informacion adicional)... comentas ?
>> saludos,
>> hector.
>>
>> __ las consultas anteriores __
>> >> > ... para calcular el numero de ceros que hay en un rango hago
>> >> > iNum = Application.WorksheetFunction.CountIf(ActiveSheet.Range("H21:I34"), "=" & 0)
>> >> > Que funciona correctamente, el problema es que quiero calcula los ceros de otra hoja de otro fichero para hacer esto
>> >> > xlwSemana.Sheets(3).Select
>> >> > xlwSemana.Sheets(3).Activate (siendo xlwSemana As Excel.Workbook)
>> >> > El problema es que ActiveSheet sigue siendo siempre la otra hoja y aunque he seleccionado y activado esta no lo cambia.
>> >>
>> >> (segun parece) no necesitas ni la instruccion ".Select" ni tampoco la ".Activate" (aplicadas a un objeto establecido/declarado)
>> >> prueba modificando solamente la instruccion que ya te ha funcionado:
>> >> de: -> iNum = Application.WorksheetFunction.CountIf(ActiveSheet.Range("H21:I34"), "=" & 0)
>> >> a: -> iNum = Application.WorksheetFunction.CountIf(xlwSemana.Sheets(3).Range("H21:I34"), "=" & 0)



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida