Ayuda con macros

Hola, tengo dos preguntas con macros que quisiera que me ayudaras:
1. Tengo una macro en Excel que me abre un archivo de texto y con ciertas condiciones de filtros, los archivos de texto son varios y están enumerados, sin embargo cada vez que quiero abrir un archivo diferente tengo antes que editar la macro y cambiarle el nombre del archivo que deseo abrir, ¿hay alguna forma de que me pregunte que archivo abrir y no estar editando la macro?
2. Tengo dos libros de Excel, en el libro 2 quiero llenar algunas celdas con información del libro 1, pero quiero hacer una macro que lo haga:
Del ejemplo de abajo la macro debe buscar el valor POR del libro 2 en el libro 1 y después copiar en las siguientes columnas del libro 2 el valor de la columna 1 correspondiente al valor buscado. El libro 2 solo tiene datos en la columna 1, las demás columnas son las que quiero ir llenando.
Libro 1:
Columna 1 columna 2
Compra 1 valor X
Compra 2 valor Z
Compra 3 valor Y
Compra 4 valor Z
Compra 5 valor X
Compra 6 valor X
. .
. .
Libro 2:
Columna 1 Columna 2 Columna 3 Columna 4
Valor X compra 1 compra 5 compra 6
Valor Y compra 3
Valor Z compra 2 compra 4
Si necesitas más información házmelo saber. Gracias.
Respuesta
1
Te envío por ahora la segunda macro. Cuando finalices esta consulta (de a 1 consulta por vez así puedo responder a todos ya que en Excel son muchas las que recibo por día) enviame la primera con la macro que ya tienes así trabajo sobre ella (no todos programan igual y puedo enviarte instrucciones que no "encajan" en tu modelo) además así puedo probarla.
Bien aquí está la segunda:
Insertás un módulo en el Editor y copias todo esto:
Option Explicit
Public i As Integer
Public dato As String
Public r2 As Range, r1 As Range
Sub COPIANDO()
Dim encontrado
i = 1
ActiveSheet.Range("A2").Select
Set r2 = ActiveCell
While r2.Value <> ""
dato = r2.Value
' Activar casilla A2 de Hoja1 y referenciarla con r1
Workbooks("Libro1.xls").Worksheets("Hoja1").Activate
ActiveWorkbook.Worksheets("Hoja1").Range("B2").Activate
' Recorrer todo el rango de datos de Hoja1
encontrado = False
Do While Not IsEmpty(ActiveCell)
' Si la casilla activa = Datos_Buscados
If ActiveCell.Value = dato Then
encontrado = True
' Referenciar con r1 la celda donde están os datos
Set r1 = ActiveCell
' Copiar los datos
Call Copiar_Datos_Hojas(r1, r2)
' Referenciar con r2 la casilla donde se copiaran los próximos datos-
i = i + 1
End If
ActiveCell.Offset(1, 0).Activate
Loop
'ahora para el siguiente registro de Libro2
Set r2 = r2.Offset(1, 0)
i = 1
Wend
End Sub
Sub Copiar_Datos_Hojas(r1 As Range, r2 As Range)
Dim Datos As Variant
' Recorrer las columnas del registro y copiar celda a celda
Datos = r1.Offset(0, -1).Value
r2.Offset(0, i).Value = Datos
End Sub
Podes ejecutarla desde un botón o atajo de teclado, desde la Hoja1 del Libro2 (ajústalo a tus datos). El libro1 debe estar abierto, sino hay que incluir una instrucción de Open primero.
La idea es que recorra la col A del Libro 2 y por cada registro busque todas las coincidencias del Libro1.
Espero que esté todo como lo necesitas, sino me volvés a contactar.
Gracias por tu ayuda, me ha funcionado perfectamente, disculpa la demora por finalizar la pregunta estaba muy ocupado. Ahora mismo te mando lo relacionado con la primera macro en otra consulta. Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas