Ejecutar macro sin afectar otras celdas

Hola, he creado un macro el cual se ejecuta al cambiar un valor de Celda, el macro lo que hace es leer los datos de un archivo de texto . En este archivo de texto guardo datos de unos artículos, en la columna 1 del archivo de texto guardo el nombre de los artículos, en la colmna 2 la cantidad de artículos.
En el rango "A1" pongo un articulo, al momento de yo escribir un valor por en B1 se ejecuta el macro y me pone un resultado en B2, si yo ingreso un dato en "C1" se ejecuta el macro y pone un resultado en C2, ahora el problema que tengo es que si yo cambio el valor de "A1" e ingreso un Valor en "D1" los datos que anteriormente estaban en B2 y C2 son cambiados y es lo que yo no quiero, necesito que los datos ya ingresados no sean cambiados.
Gracias por su ayuda.
Sub leer_fichero_de_texto()
On Error Resume Next
Dim Tabulacion As String
Dim Tabulacion2 As Long
Dim Resultado As Long
Application.ScreenUpdating = False
fichero_de_texto = "Prueba.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
ruta = ActiveWorkbook.Path
Set archivo = fso.OpenTextFile(ruta & "\" & fichero_de_texto, 1)
contenido = archivo.readall
archivo.Close
Set fso = Nothing
Set archivo = Nothing
contenido = Split(contenido, vbCrLf)
For i = 0 To UBound(contenido)
Tabulacion = contenido(i)
Tabulacion = Trim(Mid(contenido(i), 1, 8))
Tabulacion2 = Trim(Mid(contenido(i), 11, 4))
If Range("A1") = Tabulacion Then
Tabulacion = Tabulacion
If Target.Address = "$B$1" Then
Resultado = Tabulacion2 * Range("B1")
Range("B2") = Resultado
End If
If Target.Address = "$C$1" Then
Resultado = Tabulacion2 * Range("C1")
Range("C2") = Resultado
End If
If Target.Address = "$D$1" Then
Resultado = Tabulacion2 * Range("D1")
Range("D2") = Resultado
End If
End If
Next
Application.ScreenUpdating = True
======================
LO SIG LO PONGO EN LA HOJA1
=======================
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then leer_fichero_de_texto
If Target.Address = "$C$1" Then leer_fichero_de_texto
If Target.Address = "$D$1" Then leer_fichero_de_texto
End Sub
========================
"DATOS EN ARCHIVO DE TEXTO
======================
Articulo Cantidad
M2150M1A 250
M27Q2M1A 251
M2752M1A 239

1 Respuesta

Respuesta
1
Lo que creo debes hacer es crear una variable publica para guardar la referencia de la celda que estás modificando y luego en tu rutina leer_fichero solo actualizar esta referencia.
Entonces, en el módulo, arriba de Sub leer_fichero...() colocá esta línea:
Public rgo as string
En la rutina de la HOJA1, debajo del Private Sub... la pirmer línea debe ser:
rgo = target.address(false, false)    'así te quedará como C1 o D1 o la que fuese
Luego en la subrutina, entre las 2 líneas que te marco en negrita, deben quedar las siguientes:
If Range("A1") = Tabulacion Then
Tabulacion = Tabulacion           ' controlar esta línea
Resultado = Tabulacion2 * Range(rgo)
Range(rgo).Offset(1,0) = Resultado

End If
Next
Pruébala y comentame si esto resolvió tu consulta
Saludos
Elsa
* No te pierdas la promo de Dbre en manuales:
http://es.geocities.com/lacibelesdepunilla/manuales
Woww!, si que eres grande EXPERTO, funcionó de maravilla, su respuesta HA SIDO EXCELENTE, espero contar con su asesoría si me surge otra duda muchísimas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas