Por que no funciona

31/07/2007 - 18:34 por Albymar | Informe spam
Hola a todos,
Tengo un Libro.xls con 40 Hojas, donde la Hoja1."General" es una hoja
registro, que tras una Macro (De Hector Miguel) por medio de filtro
avanzado, envio registros, por medio de un criterio, a cada Hoja (39
restantes)...
El problema que tengo es que... despues de realizar esto debo realizar una
columna (K) con saldo pendiente partiendo de un importe que esta en K6,
(K7=K6-I7) ... a si sucesivamente miestras haya valores en A:A

Ya se que arrastrando una determinada formula desde la celda K7 hacia abajo
se soluciona el problema pero quiero que lo haga al mismo tiempo
vuelca/traspasa los datos, pero debido a mis limitados conocimientos de
codigo, como siempre me he "atrancado".

Como primer paso para ver como hacerlo -en una hoja- he realizado lo
siguiente:
V = Range("A6").End(xlDown).Row
Range("K7:K" & V).Formula = "=R[-1]C-RC[-2]"
(Puede ser una animalada ... perdon si lo es, he avisado de conocimientos
limitados) pero me da error...
¿Podeis ayudarme?
Gracias de antemano a todos.

Preguntas similare

Leer las respuestas

#6 Albymar
01/08/2007 - 19:18 | Informe spam
Hola Ivan, no soy ni Alba ni Alberto, soy Berta y tengo dos hijos ALBa Y
MARcos (que menos que presentarme a quien me ayuda)...
Bueno, copiando el código que expones y cambiando solo, lo siguiente ...
1. "With Worksheets("Hoja1")" por "With Worksheets("GENERAL")"

2. "Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address" por
"Rango_lista = .Range("a6:i" & .[a65536].End(xlUp).Row).Address" y...

3."For i = 2 To ThisWorkbook.Sheets.Count" por "For i = 3 To
ThisWorkbook.Sheets.Count"
Me da error 1004:Error en el metodo AutoFill de la clase Range, y me marca en
amarillo la linea...
".[k7].AutoFill Destination:=.Range("k7:k" & _
.[a65536].End(xlUp).Row)
Bueno seguiré trasteando el codigo, para ver por que falla,
Gracias, Ivan

"Ivan" escribió:

On 1 ago, 11:42, Albymar wrote:
> Hola Ivan, segun te prometi, te contesto ...
> He estado probando, modificando, cambiando (en definitiva, liandome...) y al
> fina recurro de nuevo a ti.
> Con respecto a tu primera opcion:
> "... quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> haber pegdo lo filtrado)
> Sheets(i).Range("k7").Formula = "=k6-i7"
> Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" &
> .Sheets(i).[a65536].End(xlUp).Row)
> si te da conflictos con los filtros hazlo en un bucle a posteriori ...
> o metiendolo en un bloque with (with sheets(i))"
> ...en las tres formas me da el error 438:Objeto no admite esta Propiedad o
> metodo.
>
> Con respecto a tu segunda opción:
> "... si no te hace falta mas que el resultado (sin formula) algo como
> dim celda as range
> with sheets(i)
> for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> with celda
> .value=.offset(-1)-.offset(,-2)
> end with
> next "
> ... de esta forma, si que sale, pero el proceso parece ser muy lento y tarda
> una eternidad...
>
> En la espera de poder solucionarlo, te reitero las gracias por tu ayuda y
> amabilidad para conmigo.
> Saludos
>
> "Ivan" escribió:
>
>
>
> > On 31 jul, 19:15, Ivan wrote:
> > > On 31 jul, 18:34, Albymar wrote:
>
> > > > Hola a todos,
> > > > Tengo un Libro.xls con 40 Hojas, donde la Hoja1."General" es una hoja
> > > > registro, que tras una Macro (De Hector Miguel) por medio de filtro
> > > > avanzado, envio registros, por medio de un criterio, a cada Hoja (39
> > > > restantes)...
> > > > El problema que tengo es que... despues de realizar esto debo realizar una
> > > > columna (K) con saldo pendiente partiendo de un importe que esta en K6,
> > > > (K7=K6-I7) ... a si sucesivamente miestras haya valores en A:A
>
> > > > Ya se que arrastrando una determinada formula desde la celda K7 hacia abajo
> > > > se soluciona el problema pero quiero que lo haga al mismo tiempo
> > > > vuelca/traspasa los datos, pero debido a mis limitados conocimientos de
> > > > codigo, como siempre me he "atrancado".
>
> > > > Como primer paso para ver como hacerlo -en una hoja- he realizado lo
> > > > siguiente:
> > > > V = Range("A6").End(xlDown).Row
> > > > Range("K7:K" & V).Formula = "=R[-1]C-RC[-2]"
> > > > (Puede ser una animalada ... perdon si lo es, he avisado de conocimientos
> > > > limitados) pero me da error...
> > > > ¿Podeis ayudarme?
> > > > Gracias de antemano a todos.
>
> > > hola,
>
> > > quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > haber pegdo lo filtrado)
>
> > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > [a65536].End(xlUp).Row)
>
> > > si te da conflictos con los filtros hazlo en un bucle a posteriori, y
> > > si no te hace falta mas que el resultado (sin formula) algo como
>
> > > dim celda as range
> > > with sheets(i)
> > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > with celda
> > > .value=.offset(-1)-.offset(,-2)
> > > end with
> > > next
>
> > > a ver que tal
>
> > > un saludo
> > > Ivan- Ocultar texto de la cita -
>
> > > - Mostrar texto de la cita -
>
> > fe de erratas:
>
> > esto =>>
>
> > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > [a65536].End(xlUp).Row)
>
> > seria asi=>>
>
> > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" & .
> > >Sheets(i).[a65536].End(xlUp).Row)
>
> > o metiendolo en un bloque with (with sheets(i))
>
> > disculpas y un saludo- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

hola ¿Alberto?¿Alba?

a mi esta adaptacion me funciona sin problemas

Sub Filtro_avanzado()
Dim Rango_lista As String, i As Integer
Application.ScreenUpdating = False
With Worksheets("Hoja1")
Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address
For i = 2 To ThisWorkbook.Sheets.Count
.Range(Rango_lista).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets(i).Range("H3:H4"), _
CopyToRange:=Sheets(i).Range("A6:I6")
With Sheets(i)
''' .[k6] = 10000
.[k7].Formula = "=k6-i7"
.[k7].AutoFill Destination:=.Range("k7:k" & _
.[a65536].End(xlUp).Row)
End With
Next
End With
End Sub

lo unico que he hecho (pero sin ello tambien parece funcionar) es
asignar un valor inicial a K6, pues sino siempre seria negativo, pero
ya te digo que esto no parece influir (de hecho las ultimas pruebas
esta como lo ves, como comentario)

mira a ver sei hay algo mas que por aqui desconozcamos, y comentas
como te ha ido

un saludo
Ivan

PD: aunque no lo creo, pues te hubiera dado problemas con los filtros
¿el usar Sheets en lugar de Worksheets es por tener alguna hoja de
graficos?


Respuesta Responder a este mensaje
#7 Ivan
01/08/2007 - 19:39 | Informe spam
On 1 ago, 19:18, Albymar wrote:
Hola Ivan, no soy ni Alba ni Alberto, soy Berta y tengo dos hijos ALBa Y
MARcos (que menos que presentarme a quien me ayuda)...
Bueno, copiando el código que expones y cambiando solo, lo siguiente ...
1. "With Worksheets("Hoja1")" por "With Worksheets("GENERAL")"

2. "Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address" por
"Rango_lista = .Range("a6:i" & .[a65536].End(xlUp).Row).Address" y...

3."For i = 2 To ThisWorkbook.Sheets.Count" por "For i = 3 To
ThisWorkbook.Sheets.Count"
Me da error 1004:Error en el metodo AutoFill de la clase Range, y me marca en
amarillo la linea...
".[k7].AutoFill Destination:=.Range("k7:k" & _
.[a65536].End(xlUp).Row)
Bueno seguiré trasteando el codigo, para ver por que falla,
Gracias, Ivan

"Ivan" escribió:



> On 1 ago, 11:42, Albymar wrote:
> > Hola Ivan, segun te prometi, te contesto ...
> > He estado probando, modificando, cambiando (en definitiva, liandome...) y al
> > fina recurro de nuevo a ti.
> > Con respecto a tu primera opcion:
> > "... quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > haber pegdo lo filtrado)
> > Sheets(i).Range("k7").Formula = "=k6-i7"
> > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" &
> > .Sheets(i).[a65536].End(xlUp).Row)
> > si te da conflictos con los filtros hazlo en un bucle a posteriori ...
> > o metiendolo en un bloque with (with sheets(i))"
> > ...en las tres formas me da el error 438:Objeto no admite esta Propiedad o
> > metodo.

> > Con respecto a tu segunda opción:
> > "... si no te hace falta mas que el resultado (sin formula) algo como
> > dim celda as range
> > with sheets(i)
> > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > with celda
> > .value=.offset(-1)-.offset(,-2)
> > end with
> > next "
> > ... de esta forma, si que sale, pero el proceso parece ser muy lento y tarda
> > una eternidad...

> > En la espera de poder solucionarlo, te reitero las gracias por tu ayuda y
> > amabilidad para conmigo.
> > Saludos

> > "Ivan" escribió:

> > > On 31 jul, 19:15, Ivan wrote:
> > > > On 31 jul, 18:34, Albymar wrote:

> > > > > Hola a todos,
> > > > > Tengo un Libro.xls con 40 Hojas, donde la Hoja1."General" es una hoja
> > > > > registro, que tras una Macro (De Hector Miguel) por medio de filtro
> > > > > avanzado, envio registros, por medio de un criterio, a cada Hoja (39
> > > > > restantes)...
> > > > > El problema que tengo es que... despues de realizar esto debo realizar una
> > > > > columna (K) con saldo pendiente partiendo de un importe que esta en K6,
> > > > > (K7=K6-I7) ... a si sucesivamente miestras haya valores en A:A

> > > > > Ya se que arrastrando una determinada formula desde la celda K7 hacia abajo
> > > > > se soluciona el problema pero quiero que lo haga al mismo tiempo
> > > > > vuelca/traspasa los datos, pero debido a mis limitados conocimientos de
> > > > > codigo, como siempre me he "atrancado".

> > > > > Como primer paso para ver como hacerlo -en una hoja- he realizado lo
> > > > > siguiente:
> > > > > V = Range("A6").End(xlDown).Row
> > > > > Range("K7:K" & V).Formula = "=R[-1]C-RC[-2]"
> > > > > (Puede ser una animalada ... perdon si lo es, he avisado de conocimientos
> > > > > limitados) pero me da error...
> > > > > ¿Podeis ayudarme?
> > > > > Gracias de antemano a todos.

> > > > hola,

> > > > quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > > haber pegdo lo filtrado)

> > > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > [a65536].End(xlUp).Row)

> > > > si te da conflictos con los filtros hazlo en un bucle a posteriori, y
> > > > si no te hace falta mas que el resultado (sin formula) algo como

> > > > dim celda as range
> > > > with sheets(i)
> > > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > > with celda
> > > > .value=.offset(-1)-.offset(,-2)
> > > > end with
> > > > next

> > > > a ver que tal

> > > > un saludo
> > > > Ivan- Ocultar texto de la cita -

> > > > - Mostrar texto de la cita -

> > > fe de erratas:

> > > esto =>>

> > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > [a65536].End(xlUp).Row)

> > > seria asi=>>

> > > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" & .
> > > >Sheets(i).[a65536].End(xlUp).Row)

> > > o metiendolo en un bloque with (with sheets(i))

> > > disculpas y un saludo- Ocultar texto de la cita -

> > - Mostrar texto de la cita -

> hola ¿Alberto?¿Alba?

> a mi esta adaptacion me funciona sin problemas

> Sub Filtro_avanzado()
> Dim Rango_lista As String, i As Integer
> Application.ScreenUpdating = False
> With Worksheets("Hoja1")
> Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address
> For i = 2 To ThisWorkbook.Sheets.Count
> .Range(Rango_lista).AdvancedFilter _
> Action:=xlFilterCopy, _
> CriteriaRange:=Sheets(i).Range("H3:H4"), _
> CopyToRange:=Sheets(i).Range("A6:I6")
> With Sheets(i)
> ''' .[k6] = 10000
> .[k7].Formula = "=k6-i7"
> .[k7].AutoFill Destination:=.Range("k7:k" & _
> .[a65536].End(xlUp).Row)
> End With
> Next
> End With
> End Sub

> lo unico que he hecho (pero sin ello tambien parece funcionar) es
> asignar un valor inicial a K6, pues sino siempre seria negativo, pero
> ya te digo que esto no parece influir (de hecho las ultimas pruebas
> esta como lo ves, como comentario)

> mira a ver sei hay algo mas que por aqui desconozcamos, y comentas
> como te ha ido

> un saludo
> Ivan

> PD: aunque no lo creo, pues te hubiera dado problemas con los filtros
> ¿el usar Sheets en lugar de Worksheets es por tener alguna hoja de
> graficos?- Ocultar texto de la cita -

- Mostrar texto de la cita -



hola Berta, (bueno al menos acerte a cuartas <un saludo a tus crios>)

¿es posible que en alguno de los filtrados no existan coincidencias y
te devuelva la lista vacia o con solo un registro en la fila 7?

de momento es la posibildad que se me ocurre (aunque, pensandolo bien,
si autofill funciona como en la hoja (la verdad es que lo he usado muy
poco), que se puede rellenar hacia arriba, tampoco deberia ser
problema

por si acaso prueba a poner tras With Sheeets(i) algo como

If .[a8]<>"" then
'aqui el codigo con autofill
' y cierras el 'If Then' antes del end with
End if

entre medias a ver si alguien mas experto ve algo mas

un saludo
Ivan
Respuesta Responder a este mensaje
#8 Albymar
02/08/2007 - 09:20 | Informe spam
Hola Ivan, eres un fiera (con explicación)...
Anoche, estuve trasteando, como te dije, y me di cuenta de que
efectivamente, en el primer filtrado existen listas vacias, y por lo tanto
hay 3 hojas sin registros, y esta mañana, viniendo hacia el trabajo pensaba
en comentarte este aspecto, y cuando abro el post me encuentro que ya me lo
estas contemplando (como no gusta que os digan un verdadero "maestro").
Voy a aplicar lo que me indicas y te comento algo...
Hasta ahora...

"Ivan" escribió:

On 1 ago, 19:18, Albymar wrote:
> Hola Ivan, no soy ni Alba ni Alberto, soy Berta y tengo dos hijos ALBa Y
> MARcos (que menos que presentarme a quien me ayuda)...
> Bueno, copiando el código que expones y cambiando solo, lo siguiente ...
> 1. "With Worksheets("Hoja1")" por "With Worksheets("GENERAL")"
>
> 2. "Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address" por
> "Rango_lista = .Range("a6:i" & .[a65536].End(xlUp).Row).Address" y...
>
> 3."For i = 2 To ThisWorkbook.Sheets.Count" por "For i = 3 To
> ThisWorkbook.Sheets.Count"
> Me da error 1004:Error en el metodo AutoFill de la clase Range, y me marca en
> amarillo la linea...
> ".[k7].AutoFill Destination:=.Range("k7:k" & _
> .[a65536].End(xlUp).Row)
> Bueno seguiré trasteando el codigo, para ver por que falla,
> Gracias, Ivan
>
> "Ivan" escribió:
>
>
>
> > On 1 ago, 11:42, Albymar wrote:
> > > Hola Ivan, segun te prometi, te contesto ...
> > > He estado probando, modificando, cambiando (en definitiva, liandome) y al
> > > fina recurro de nuevo a ti.
> > > Con respecto a tu primera opcion:
> > > "... quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > haber pegdo lo filtrado)
> > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" &
> > > .Sheets(i).[a65536].End(xlUp).Row)
> > > si te da conflictos con los filtros hazlo en un bucle a posteriori ...
> > > o metiendolo en un bloque with (with sheets(i))"
> > > ...en las tres formas me da el error 438:Objeto no admite esta Propiedad o
> > > metodo.
>
> > > Con respecto a tu segunda opción:
> > > "... si no te hace falta mas que el resultado (sin formula) algo como
> > > dim celda as range
> > > with sheets(i)
> > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > with celda
> > > .value=.offset(-1)-.offset(,-2)
> > > end with
> > > next "
> > > ... de esta forma, si que sale, pero el proceso parece ser muy lento y tarda
> > > una eternidad...
>
> > > En la espera de poder solucionarlo, te reitero las gracias por tu ayuda y
> > > amabilidad para conmigo.
> > > Saludos
>
> > > "Ivan" escribió:
>
> > > > On 31 jul, 19:15, Ivan wrote:
> > > > > On 31 jul, 18:34, Albymar wrote:
>
> > > > > > Hola a todos,
> > > > > > Tengo un Libro.xls con 40 Hojas, donde la Hoja1."General" es una hoja
> > > > > > registro, que tras una Macro (De Hector Miguel) por medio de filtro
> > > > > > avanzado, envio registros, por medio de un criterio, a cada Hoja (39
> > > > > > restantes)...
> > > > > > El problema que tengo es que... despues de realizar esto debo realizar una
> > > > > > columna (K) con saldo pendiente partiendo de un importe que esta en K6,
> > > > > > (K7=K6-I7) ... a si sucesivamente miestras haya valores en A:A
>
> > > > > > Ya se que arrastrando una determinada formula desde la celda K7 hacia abajo
> > > > > > se soluciona el problema pero quiero que lo haga al mismo tiempo
> > > > > > vuelca/traspasa los datos, pero debido a mis limitados conocimientos de
> > > > > > codigo, como siempre me he "atrancado".
>
> > > > > > Como primer paso para ver como hacerlo -en una hoja- he realizado lo
> > > > > > siguiente:
> > > > > > V = Range("A6").End(xlDown).Row
> > > > > > Range("K7:K" & V).Formula = "=R[-1]C-RC[-2]"
> > > > > > (Puede ser una animalada ... perdon si lo es, he avisado de conocimientos
> > > > > > limitados) pero me da error...
> > > > > > ¿Podeis ayudarme?
> > > > > > Gracias de antemano a todos.
>
> > > > > hola,
>
> > > > > quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > > > haber pegdo lo filtrado)
>
> > > > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > > [a65536].End(xlUp).Row)
>
> > > > > si te da conflictos con los filtros hazlo en un bucle a posteriori, y
> > > > > si no te hace falta mas que el resultado (sin formula) algo como
>
> > > > > dim celda as range
> > > > > with sheets(i)
> > > > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > > > with celda
> > > > > .value=.offset(-1)-.offset(,-2)
> > > > > end with
> > > > > next
>
> > > > > a ver que tal
>
> > > > > un saludo
> > > > > Ivan- Ocultar texto de la cita -
>
> > > > > - Mostrar texto de la cita -
>
> > > > fe de erratas:
>
> > > > esto =>>
>
> > > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > > [a65536].End(xlUp).Row)
>
> > > > seria asi=>>
>
> > > > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" & .
> > > > >Sheets(i).[a65536].End(xlUp).Row)
>
> > > > o metiendolo en un bloque with (with sheets(i))
>
> > > > disculpas y un saludo- Ocultar texto de la cita -
>
> > > - Mostrar texto de la cita -
>
> > hola ¿Alberto?¿Alba?
>
> > a mi esta adaptacion me funciona sin problemas
>
> > Sub Filtro_avanzado()
> > Dim Rango_lista As String, i As Integer
> > Application.ScreenUpdating = False
> > With Worksheets("Hoja1")
> > Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address
> > For i = 2 To ThisWorkbook.Sheets.Count
> > .Range(Rango_lista).AdvancedFilter _
> > Action:=xlFilterCopy, _
> > CriteriaRange:=Sheets(i).Range("H3:H4"), _
> > CopyToRange:=Sheets(i).Range("A6:I6")
> > With Sheets(i)
> > ''' .[k6] = 10000
> > .[k7].Formula = "=k6-i7"
> > .[k7].AutoFill Destination:=.Range("k7:k" & _
> > .[a65536].End(xlUp).Row)
> > End With
> > Next
> > End With
> > End Sub
>
> > lo unico que he hecho (pero sin ello tambien parece funcionar) es
> > asignar un valor inicial a K6, pues sino siempre seria negativo, pero
> > ya te digo que esto no parece influir (de hecho las ultimas pruebas
> > esta como lo ves, como comentario)
>
> > mira a ver sei hay algo mas que por aqui desconozcamos, y comentas
> > como te ha ido
>
> > un saludo
> > Ivan
>
> > PD: aunque no lo creo, pues te hubiera dado problemas con los filtros
> > ¿el usar Sheets en lugar de Worksheets es por tener alguna hoja de
> > graficos?- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

hola Berta, (bueno al menos acerte a cuartas <un saludo a tus crios>)

¿es posible que en alguno de los filtrados no existan coincidencias y
te devuelva la lista vacia o con solo un registro en la fila 7?

de momento es la posibildad que se me ocurre (aunque, pensandolo bien,
si autofill funciona como en la hoja (la verdad es que lo he usado muy
poco), que se puede rellenar hacia arriba, tampoco deberia ser
problema

por si acaso prueba a poner tras With Sheeets(i) algo como

If .[a8]<>"" then
'aqui el codigo con autofill
' y cierras el 'If Then' antes del end with
End if

entre medias a ver si alguien mas experto ve algo mas

un saludo
Ivan


Respuesta Responder a este mensaje
#9 Albymar
02/08/2007 - 16:30 | Informe spam
Bueno, Ivan ...
Tampoco funciona... pero
el problema reside ahi... si elimino las hojas que no contengan registros y
ademas aquellas que contengan registros anteriores a K7, funciona, pero si
dejo estas hojas, el rango que me toma en ...
".[k7].AutoFill Destination:=.Range("k7:k" & _
.[a65536].End(xlUp).Row)" es del estilo
"K7:K6" (hacia arriba '?' y se mete en el titulo) y es por esto, creo, que da
error en esta instrucción...
incluso colocando la instruccion 'If [A8]<>"" then ..' sigue dandolo
y tambien realizando el proceso a posteriori ...
seguiré trasteando, que esto a mi no me gana, ni pienso darme por vencida
¡claro!...
Saludos.


"Ivan" escribió:

On 1 ago, 19:18, Albymar wrote:
> Hola Ivan, no soy ni Alba ni Alberto, soy Berta y tengo dos hijos ALBa Y
> MARcos (que menos que presentarme a quien me ayuda)...
> Bueno, copiando el código que expones y cambiando solo, lo siguiente ...
> 1. "With Worksheets("Hoja1")" por "With Worksheets("GENERAL")"
>
> 2. "Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address" por
> "Rango_lista = .Range("a6:i" & .[a65536].End(xlUp).Row).Address" y...
>
> 3."For i = 2 To ThisWorkbook.Sheets.Count" por "For i = 3 To
> ThisWorkbook.Sheets.Count"
> Me da error 1004:Error en el metodo AutoFill de la clase Range, y me marca en
> amarillo la linea...
> ".[k7].AutoFill Destination:=.Range("k7:k" & _
> .[a65536].End(xlUp).Row)
> Bueno seguiré trasteando el codigo, para ver por que falla,
> Gracias, Ivan
>
> "Ivan" escribió:
>
>
>
> > On 1 ago, 11:42, Albymar wrote:
> > > Hola Ivan, segun te prometi, te contesto ...
> > > He estado probando, modificando, cambiando (en definitiva, liandome) y al
> > > fina recurro de nuevo a ti.
> > > Con respecto a tu primera opcion:
> > > "... quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > haber pegdo lo filtrado)
> > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" &
> > > .Sheets(i).[a65536].End(xlUp).Row)
> > > si te da conflictos con los filtros hazlo en un bucle a posteriori ...
> > > o metiendolo en un bloque with (with sheets(i))"
> > > ...en las tres formas me da el error 438:Objeto no admite esta Propiedad o
> > > metodo.
>
> > > Con respecto a tu segunda opción:
> > > "... si no te hace falta mas que el resultado (sin formula) algo como
> > > dim celda as range
> > > with sheets(i)
> > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > with celda
> > > .value=.offset(-1)-.offset(,-2)
> > > end with
> > > next "
> > > ... de esta forma, si que sale, pero el proceso parece ser muy lento y tarda
> > > una eternidad...
>
> > > En la espera de poder solucionarlo, te reitero las gracias por tu ayuda y
> > > amabilidad para conmigo.
> > > Saludos
>
> > > "Ivan" escribió:
>
> > > > On 31 jul, 19:15, Ivan wrote:
> > > > > On 31 jul, 18:34, Albymar wrote:
>
> > > > > > Hola a todos,
> > > > > > Tengo un Libro.xls con 40 Hojas, donde la Hoja1."General" es una hoja
> > > > > > registro, que tras una Macro (De Hector Miguel) por medio de filtro
> > > > > > avanzado, envio registros, por medio de un criterio, a cada Hoja (39
> > > > > > restantes)...
> > > > > > El problema que tengo es que... despues de realizar esto debo realizar una
> > > > > > columna (K) con saldo pendiente partiendo de un importe que esta en K6,
> > > > > > (K7=K6-I7) ... a si sucesivamente miestras haya valores en A:A
>
> > > > > > Ya se que arrastrando una determinada formula desde la celda K7 hacia abajo
> > > > > > se soluciona el problema pero quiero que lo haga al mismo tiempo
> > > > > > vuelca/traspasa los datos, pero debido a mis limitados conocimientos de
> > > > > > codigo, como siempre me he "atrancado".
>
> > > > > > Como primer paso para ver como hacerlo -en una hoja- he realizado lo
> > > > > > siguiente:
> > > > > > V = Range("A6").End(xlDown).Row
> > > > > > Range("K7:K" & V).Formula = "=R[-1]C-RC[-2]"
> > > > > > (Puede ser una animalada ... perdon si lo es, he avisado de conocimientos
> > > > > > limitados) pero me da error...
> > > > > > ¿Podeis ayudarme?
> > > > > > Gracias de antemano a todos.
>
> > > > > hola,
>
> > > > > quizas podrias añadir esto dentro del bucle que carga las hojas (tras
> > > > > haber pegdo lo filtrado)
>
> > > > > Sheets(i).Range("k7").Formula = "=k6-i7"
> > > > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > > [a65536].End(xlUp).Row)
>
> > > > > si te da conflictos con los filtros hazlo en un bucle a posteriori, y
> > > > > si no te hace falta mas que el resultado (sin formula) algo como
>
> > > > > dim celda as range
> > > > > with sheets(i)
> > > > > for each celda in .Range("k7:k" & .[a65536].End(xlUp).Row)
> > > > > with celda
> > > > > .value=.offset(-1)-.offset(,-2)
> > > > > end with
> > > > > next
>
> > > > > a ver que tal
>
> > > > > un saludo
> > > > > Ivan- Ocultar texto de la cita -
>
> > > > > - Mostrar texto de la cita -
>
> > > > fe de erratas:
>
> > > > esto =>>
>
> > > > Sheets(i) .Range("k7").AutoFill .Range("k7:k" & .
> > > > > [a65536].End(xlUp).Row)
>
> > > > seria asi=>>
>
> > > > Sheets(i).Range("k7").AutoFill Sheets(i).Range("k7:k" & .
> > > > >Sheets(i).[a65536].End(xlUp).Row)
>
> > > > o metiendolo en un bloque with (with sheets(i))
>
> > > > disculpas y un saludo- Ocultar texto de la cita -
>
> > > - Mostrar texto de la cita -
>
> > hola ¿Alberto?¿Alba?
>
> > a mi esta adaptacion me funciona sin problemas
>
> > Sub Filtro_avanzado()
> > Dim Rango_lista As String, i As Integer
> > Application.ScreenUpdating = False
> > With Worksheets("Hoja1")
> > Rango_lista = .Range("a1:i" & .[a65536].End(xlUp).Row).Address
> > For i = 2 To ThisWorkbook.Sheets.Count
> > .Range(Rango_lista).AdvancedFilter _
> > Action:=xlFilterCopy, _
> > CriteriaRange:=Sheets(i).Range("H3:H4"), _
> > CopyToRange:=Sheets(i).Range("A6:I6")
> > With Sheets(i)
> > ''' .[k6] = 10000
> > .[k7].Formula = "=k6-i7"
> > .[k7].AutoFill Destination:=.Range("k7:k" & _
> > .[a65536].End(xlUp).Row)
> > End With
> > Next
> > End With
> > End Sub
>
> > lo unico que he hecho (pero sin ello tambien parece funcionar) es
> > asignar un valor inicial a K6, pues sino siempre seria negativo, pero
> > ya te digo que esto no parece influir (de hecho las ultimas pruebas
> > esta como lo ves, como comentario)
>
> > mira a ver sei hay algo mas que por aqui desconozcamos, y comentas
> > como te ha ido
>
> > un saludo
> > Ivan
>
> > PD: aunque no lo creo, pues te hubiera dado problemas con los filtros
> > ¿el usar Sheets en lugar de Worksheets es por tener alguna hoja de
> > graficos?- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

hola Berta, (bueno al menos acerte a cuartas <un saludo a tus crios>)

¿es posible que en alguno de los filtrados no existan coincidencias y
te devuelva la lista vacia o con solo un registro en la fila 7?

de momento es la posibildad que se me ocurre (aunque, pensandolo bien,
si autofill funciona como en la hoja (la verdad es que lo he usado muy
poco), que se puede rellenar hacia arriba, tampoco deberia ser
problema

por si acaso prueba a poner tras With Sheeets(i) algo como

If .[a8]<>"" then
'aqui el codigo con autofill
' y cierras el 'If Then' antes del end with
End if

entre medias a ver si alguien mas experto ve algo mas

un saludo
Ivan


Respuesta Responder a este mensaje
#10 Ivan
02/08/2007 - 17:52 | Informe spam
hola Berta,

es curioso, a mi tras probar sin coincidencias tambien me funciona sin problemas, e incluso aunque me rellene hacia
arriba lo unico que ocurre es que la formula devuelve 'Valor' al hallar texto en vez de nros.

si quieres prueba a ver este codigo [OJO: borra toda la columna K antes de poner la formula]. Copialo y pegalo tal cual,
y si lo trascribes ten especial cuidado con los puntos previos a las propiedades/rangos/metodos en cada bloque with (si
quieres comprueba estos en tus actuales pruebas, es un error tonto, pero muy comun <al menos en mi caso>.

Al final te pongo algunas dudas que se me ocurren. Este es el nuevo codigo:

Sub Filtro_avanzado()
Dim Rango_lista As String, i As Integer
Application.ScreenUpdating = False
With Worksheets("General")
Rango_lista = .Range("a6:i" & .[a65536].End(xlUp).Row).Address
For i = 2 To ThisWorkbook.Sheets.Count
.Range(Rango_lista).AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=Sheets(i).Range("H3:H4"), _
CopyToRange:=Sheets(i).Range("A6:I6")
With Sheets(i)
.[k:k].Clear
If .[a7] <> "" Then
.[k7].Formula = "=k6-i7"
If .[a8] <> "" Then _
.[k7].AutoFill .Range("k7:k" & .[a65536].End(xlUp).Row)
End If
End With
Next
End With
End Sub

los filtros avanzados (al menos para mi) a veces tienen comportamientos raritos, asi que aqui van algunas preguntas
sobre cosas que creo podrian influir, aunque no estoy seguro ni he tenido tiempo[o datos] de comprobarlo [AVISO: no
hagas demasiado caso a mis comentarios, pues mas de uno puede no ajusrase a la realidad]

.- ¿has introducido el criterio en h3:h4 de todas las hojas a partir de la 2? si no es asi ¿porque no pruebas a cambiar
el bucle por la forma en que lo haciaa Hector limitandolo a las que si tengan el criterio introducido?


.- ¿que hay en / como rellenas la celda 'k6'?

.- ¿que criterios estas usando en el filtro?

.- ¿hay datos en la fila 5 , es decir, la previa a los titulos?¿y en la columna 'j'?

creo que seria interesante que probaras con ambas cosas vacias,o con una y luego la otra. Sobre todo en las filas [me ha
entrado la duda a raiz de tu ultimo mensaje], para que excel reconozca un rango como lista/base de datos [creo que] la
fila de titulos debe ser la 1ª de la lista,y y si alguna celda de la fila anterior contiene datos ¿y/o esta en contacto
con ellos? creo que la 1ª fila seria la anterior

.- ¿tienes muchas formulas, o estas usando los eventos de alguna hoja?

.- ¿has revisado bien el tema de los formatos condicionales?

bueno, a ver si hay suerte con esta macro, y si alguien puede estar viendo donde esta el fallo, esperemos que se anime a
comentarlo

un saludo, y si quieres comentas como va la cosa

Ivan
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida