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

#1 Héctor Miguel
14/11/2007 - 22:36 | Informe spam
hola, Antonio !

... 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)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 Antonio
15/11/2007 - 13:47 | Informe spam
Hola Héctor Miguel, muchas gracias por tu ayuda, intento lo que me has dicho
que tiene muy buena pinta y me da un error, en el control de errores me da el
numero 13, "No coinciden los tipos", en el rango indicado
las celdas tienen un formato de número no se si será por esto

(utilizo iNum =
Application.WorksheetFunction.CountIf(xlwSemana.Sheets(3).Range("H21:I34"),
"=" & 0)
iNum es una variable de tipo integer

Gracias por tu ayuda

"Héctor Miguel" wrote:

hola, Antonio !

> ... 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)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
15/11/2007 - 17:46 | Informe spam
hola, Antonio !

... 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)
Respuesta Responder a este mensaje
#4 Antonio
15/11/2007 - 18:04 | Informe spam
Hola Hector Miguel, te agradezco tu esfuerzo

Efectivamente hago Set xlwSemana = xlFichero.Workbooks.Open(stRuta)

En stRuta le paso la ruta enterea del fichero, 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 único que se ve,

Un saludo

"Héctor Miguel" wrote:

hola, Antonio !

> ... 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)



Respuesta Responder a este mensaje
#5 Héctor Miguel
15/11/2007 - 18:19 | Informe spam
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)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida