Una macro - error

31/01/2006 - 17:57 por Marta | Informe spam
Buenas tardes!

Estoy usando (o intentando usar) una macro que me está dando error. No salta
mensaje, simplemente no hace lo que tendría que hacer.
En momentos sí me ha funcionado bien y no he cambiado nada.

Lo que tendría que hacer es lo siguiente: abres el archivo y te encuentras
la columna A y la columna C para que metas en cada una de ellas un listado de
palabras. (la columna B no se usa para nada).
Pulsando un botón que ejecuta la macro, lo que esta hace es comparar ambos
listados (columna A y C) y escribir en la columna H las palabras que están en
la lista 2 (columna C) pero no están en la lista 1 (columna A).

Resumiendo los pasos la macro tendría que hacer esto:
Una vez entras en el fichero y escribes las listas de palabras en ambas
columnas, ejecutas la macro, y entonces:
- Toma de la columna A el rango escrito y lo llama "primecel".
- Toma de la columna C el rango escrito y lo llama "secocel".
- En la columna D escribe la función de buscarv: busca la palabra en C y
mira si está en A, para escribir la palabra en su caso, o el error si no está.
- Copia la fórmula hacia abajo.
- Crea un filtro personalizado en D1 y selecciona los errores.
- Las que están en C pero no en A aparecen entonces. Se copia el contenido
de C.
- Se crea una nueva hoja (Tempo) y se pega la selección (palabras que están
en C y no en A).
- Vuelve a la hoja de antes, deshace el filtro.
- Elimina la hoja Tempo y copia en H las palabras que están en C pero no en A.

¿Podríais decirme por qué en la realidad lo que hace es simplemente pegar en
H todo lo que hay en C, independientemente de si la palabra está o no en A?


Sub Macro4()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

Dim primecel, secocel
Range("a2").Select
Selection.End(xlDown).Select
secocel = ActiveWindow.RangeSelection.Row
Range("c2").Select
Selection.End(xlDown).Select
primecel = ActiveWindow.RangeSelection.Row
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],R2C1:R" & secocel & "C1,1,FALSE)"
Range("D2").Select
Range(Cells(2, 4), Cells(primecel, 4)).Select
Selection.FillDown
Range("D1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.AutoFilter Field:=1, Criteria1:="#N/A"
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets.Add after:=Sheets(2)
ActiveSheet.Name = "Tempo"
Range("A1").Select
ActiveSheet.Paste
Sheets("outils pour extraction des mots").Select
Selection.AutoFilter Field:=1
Range("H2").Select
Sheets("Tempo").Select
Selection.Copy
Sheets("outils pour extraction des mots").Select
ActiveSheet.Paste
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Sheets("Tempo").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Range("H2").Activate

End Sub


Muchas gracias!!!
 

Leer las respuestas

#1 KL
01/02/2006 - 00:14 | Informe spam
Hola Marta,

A ver que tal esto:

Sub Macro5()
Dim c As Range, miLista As Variant
Application.ScreenUpdating = False
With ActiveSheet
ReDim miLista(0)
For Each c In .Range(.Range("C2"), .Range("C65536").End(xlUp))
If Application.CountIf(.Range("A:A"), c) = 0 Then
miLista(UBound(miLista)) = c
ReDim Preserve miLista(UBound(miLista) + 1)
End If
Next c
.Range("H2").Resize(UBound(miLista) + 1) = _
Application.Transpose(miLista)
End With
Application.ScreenUpdating = True
End Sub

Saludos,
KL


"Marta" wrote in message news:
Buenas tardes!

Estoy usando (o intentando usar) una macro que me está dando error. No salta
mensaje, simplemente no hace lo que tendría que hacer.
En momentos sí me ha funcionado bien y no he cambiado nada.

Lo que tendría que hacer es lo siguiente: abres el archivo y te encuentras
la columna A y la columna C para que metas en cada una de ellas un listado de
palabras. (la columna B no se usa para nada).
Pulsando un botón que ejecuta la macro, lo que esta hace es comparar ambos
listados (columna A y C) y escribir en la columna H las palabras que están en
la lista 2 (columna C) pero no están en la lista 1 (columna A).

Resumiendo los pasos la macro tendría que hacer esto:
Una vez entras en el fichero y escribes las listas de palabras en ambas
columnas, ejecutas la macro, y entonces:
- Toma de la columna A el rango escrito y lo llama "primecel".
- Toma de la columna C el rango escrito y lo llama "secocel".
- En la columna D escribe la función de buscarv: busca la palabra en C y
mira si está en A, para escribir la palabra en su caso, o el error si no está.
- Copia la fórmula hacia abajo.
- Crea un filtro personalizado en D1 y selecciona los errores.
- Las que están en C pero no en A aparecen entonces. Se copia el contenido
de C.
- Se crea una nueva hoja (Tempo) y se pega la selección (palabras que están
en C y no en A).
- Vuelve a la hoja de antes, deshace el filtro.
- Elimina la hoja Tempo y copia en H las palabras que están en C pero no en A.

¿Podríais decirme por qué en la realidad lo que hace es simplemente pegar en
H todo lo que hay en C, independientemente de si la palabra está o no en A?


Sub Macro4()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

Dim primecel, secocel
Range("a2").Select
Selection.End(xlDown).Select
secocel = ActiveWindow.RangeSelection.Row
Range("c2").Select
Selection.End(xlDown).Select
primecel = ActiveWindow.RangeSelection.Row
Range("D2").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],R2C1:R" & secocel & "C1,1,FALSE)"
Range("D2").Select
Range(Cells(2, 4), Cells(primecel, 4)).Select
Selection.FillDown
Range("D1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Selection.AutoFilter Field:=1, Criteria1:="#N/A"
Range("C2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets.Add after:=Sheets(2)
ActiveSheet.Name = "Tempo"
Range("A1").Select
ActiveSheet.Paste
Sheets("outils pour extraction des mots").Select
Selection.AutoFilter Field:=1
Range("H2").Select
Sheets("Tempo").Select
Selection.Copy
Sheets("outils pour extraction des mots").Select
ActiveSheet.Paste
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Sheets("Tempo").Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Range("H2").Activate

End Sub


Muchas gracias!!!

Preguntas similares