Problema con macro

31/03/2006 - 01:44 por Mk | Informe spam
Hola a todos!

Vuelvo a escribir por estos lares... Estoy haciendo una macro y tengo un
pequeño problema, os cuento.

La macro abre un fichero y le añade una fórmula (tipo buscarv en la
celda U2, vinculado a otro fichero distinto). La columna siempre será U
pero el problema es que las filas de esa matriz varían y no se como
decirle que "complete" esa fórmula para toda la columna.

Espero haberme explicado. Lo he intentado con Autofill pero no he sido
capaz.

¿Alguna idea?.

Muchas gracias.

Marco


-Copio y pego el codigo para ser mas claro -ç

Sub Sumar_MV1()

Workbooks.Open Filename:="F:\EXCELL\5024.xls"
Sheets("ID_5024_01").Select

Selection.AutoFilter
Range("U2").Select

Workbooks.Open Filename:="F:\EXCELL\AL010.xls"
Sheets("Data").Select

Windows("5024.xls").Activate
Sheets("ID_5024_01").Select

ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-15],[AL010.xls]Data!C2:C6,5,0)"
Selection.AutoFill Destination:=Range("U2:U11000")

Range("A2").Select

Rem ActiveCell.CurrentRegion.Select

End Sub



NOTA: Como se puede ver le he dado un rango u2:u11000 pero realmente es
una chapuza.

Preguntas similare

Leer las respuestas

#1 Mk
31/03/2006 - 00:48 | Informe spam
Ya decía yo...

Otro escollo, necesitaría eliminar todas las filas que tengan un valor
determinado en una columna (U). He buscado info pero solo encuentro la
forma de hacerlo cuando las celdas están en blanco:

[U:U].SpecialCells(xlCellTypeBlanks).EntireRow.Delete

También he mirado con xlCellTypeValue pero no he encontrado o no he
sabido interpretar correctamente la info, alguna solución?

Muchas gracias.

Mk.
Respuesta Responder a este mensaje
#2 Héctor Miguel
31/03/2006 - 07:53 | Informe spam
hola Marco !

... haciendo una macro... tengo un peque#o problema..
... abre un fichero y le a#ade una formula (tipo buscarv en la celda U2, vinculado a otro fichero distinto)
La columna siempre sera U pero... las filas de esa matriz varian y no se como decirle que "complete" esa formula para toda la columna.
Lo he intentado con Autofill pero no he sido capaz. Alguna idea?.



1) [antes]... comentarte que [al parecer] la formula que estas 'depositando' [por codigo] necesita de una ligera 'correccion' :-(
si estas usando la notacion RC [Row.Column o Fila.Columna] para la referencia a las celdas en la formula... necesitaras modificarla...
de -> ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-15],[AL010.xls]Data!C2:C6,5,0)"
a: -> ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-15],[AL010.xls]Data!R2:C6,5,0)"
-> 'nota' la modificacion EN -> Data!C2:C6 A -> Data!R2:C6 [C2:C6 <> R2:C6]

2) la 'forma' como estas usando el metodo 'autofill': -> Selection.AutoFill Destination:=Range("U2:U11000")
es 'aquivalente a' [o lo mismo que]... usarlo asi: -> Selection.AutoFill Destination:=Range("U2:U11000"), Type:=xlFillDefault
y... el 'Type:=xlFillDefault' NO siempre es el 'acertado/adecuado/correcto/...' :-(

3) si usas el metodo autofill para copiar -> formulas... necesitaras del =>Type:=xlFillCopy<--
'otras' maneras [abreviadas] de copiar formulas 'entre rangos' [con los mismos rangos de tu ejemplo]...
a) Range("u2").AutoFill Range("u2:u11000"), xlFillCopy
b) Range("u2").Copy Range("u2:u11000")
las mismas pero usando el tipo de notacion abreviada para referencia a hojas/rangos en texto
a) [u2].AutoFill [u2:u11000], xlFillCopy
b) [u2].Copy [u2:u11000]

4) para 'adivinar' cual es la ultima fila donde se ha de copiar[/arrastrar] la formula [entre otras diversas y variadas formas]...
suponiendo que el resto de las filas en la columna 'U' esta vacia y que la columna 'T' SI tiene datos 'hasta su ultima fila REAL'...
a) Range("u2").AutoFill Range(Range("u2"), Range("t65536").End(xlUp).Offset(, 1)), xlFillCopy
b) Range("u2").Copy Range(Range("u2"), Range("t65536").End(xlUp).Offset(, 1))

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ el codigo expuesto __
-Copio y pego el codigo para ser mas claro -
Sub Sumar_MV1()
Workbooks.Open Filename:="F:\EXCELL\5024.xls"
Sheets("ID_5024_01").Select
Selection.AutoFilter
Range("U2").Select
Workbooks.Open Filename:="F:\EXCELL\AL010.xls"
Sheets("Data").Select
Windows("5024.xls").Activate
Sheets("ID_5024_01").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-15],[AL010.xls]Data!C2:C6,5,0)"
Selection.AutoFill Destination:=Range("U2:U11000")
Range("A2").Select
Rem ActiveCell.CurrentRegion.Select
End Sub
NOTA: Como se puede ver le he dado un rango u2:u11000 pero realmente es una chapuza.
Respuesta Responder a este mensaje
#3 Mk
31/03/2006 - 23:04 | Informe spam
Muchas gracias por responder Hector Miguel!. Como siempre, eres de gran
ayuda.

Ahora me funciona perfectamente. He dejado como estaba el código
referente a:

ActiveCell.FormulaR1C1 = VLOOKUP(RC[-15],[AL010.xls]Data!C2:C6,5,0)"

porqué al cambiarlo al que sugeriste me reportaba error (no de código,
de resultado de la fórmula=#N/A).

Funciona perfecta la segunda parte, lo único es que la columna u tenía
menos datos que el resto, simplemente he realizado una pequeña corrección:

Range("u2").Copy Range(Range("u2"), Range("S65536").End(xlUp).Offset(, 2))

De momento me funciona ok, me surgen otro montón de dudas sobre mas
procesos que necesito que haga la macro pero prefiero buscar info y
rucarme mas la cabeza antes de que me lo des/deis demasiado fácil.

Lo dicho, muchísimas gracias de nuevo.

Mk
Respuesta Responder a este mensaje
#4 Héctor Miguel
01/04/2006 - 08:28 | Informe spam
hola, Marco !

Ya decía yo...
Otro escollo, necesitaria eliminar todas las filas que tengan un valor determinado en una columna (U).
He buscado info pero solo encuentro la forma de hacerlo cuando las celdas están en blanco:
[U:U].SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Tambien he mirado con xlCellTypeValue pero no he encontrado o no he sabido interpretar correctamente la info, alguna solucion?



[creo que]... una solucion mas 'barata' [por sencilla] es aplicar autofiltros por codigo y eliminar las filas que resulten del criterio [p.e.]
==Sub Eliminar_celdas_un_U_segun_criterio()
Application.ScreenUpdating = False
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Columns("u:u").AutoFilter Field:=1, Criteria1:="pon aqui el criterio"
With ActiveSheet.AutoFilter.Range
.Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
End With
Columns("u:u").AutoFilter
End Sub
==
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 Mk
01/04/2006 - 22:20 | Informe spam
Hola Hector Miguel!!

Muchísimas gracias por tu respuesta. He probado con el código que me
sugeriste y no me funciona, cuando ejecuto la macro el pc se me queda
colgado, creo que es problema de que la matriz que estoy trabajando es
demasiado grande.

Tengo que darle vueltas. De todos modos he buscado alternativas tal y
como te comenté y encontré una forma muy útil de solucionar mi duda;

Sub Delete_with_Autofilter_Array()
Dim Rng As Range
Dim I As Long
Dim myArr As Variant

myArr = Array("A", "B", "C")
For I = LBound(myArr) To UBound(myArr)


ActiveSheet.Range("A1:A100").AutoFilter Field:=1,
Criteria1:=myArr(I)
With ActiveSheet.AutoFilter.Range
Set rng = Nothing
On Error Resume Next
Set Rng = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not Rng Is Nothing Then Rng.EntireRow.Delete
End With
Next I
ActiveSheet.AutoFilterMode = False
End Sub

Seguiré dando la paliza por estas news, la verdad es que es increible lo
que se aprende..

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