Ejecutar macro sin afectar otras celdas(2)

Hola Experto hace un par de días le consulte una pregunta la cual consistía en ejecutar un un macro al modificar una celda, su respuesta fue sastisfactoria Solo que yo por error Finalice la consulta:
Esta es la pregunta que le hice:
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.
El macro funciona perfectamente pero ahora me surge esta duda:
El macro debe funcionar también con referencia en la celda A19 y que al escribir un valor en B19 me ponga un resultado en B20 Y y así sucesivamente.
El problema que se me precentó es que si yo pongo un articulo en A19 el mecro se ejecuta pero me toma como referencia el valor que tiene "A1" yo quiero que tome como referencia el valor que tiene "A19", osea que A1 se independiente de A19.
Muchas Gracias.
Este es el macro que usted me ayudo a realizar
Public rgo As String        ' SUJERENCIA DEL EXPERTO

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("A8") = Tabulacion Then              'SUJERENCIA DEL EXPERTO
Resultado = Tabulacion2 * Range(rgo)       'SUJERENCIA DEL EXPERTO
Range(rgo).Offset(1, 0) = ResultadoEnd If
Next
Application.ScreenUpdating = True
========================
LO SIG LO PONGO EN LA HOJA1
========================
rgo = Target.Address(False, False) 'SUGERENCIA DEL EXPERTO
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
Aquí van los ajustes para la HOJA1:
Private Sub Worksheet_Change(ByVal Target As Range)
'aquí dentro debes colocar la línea para guardar la celda activa
rgo = Target.Address(False, False) 'SUGERENCIA DEL EXPERTO
fil = target.row    'para conocer en qué fila estás ingresando valores
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
If Target.Address = "$B$19" Then leer_fichero_de_texto
'podés seguir agregando líneas para otras referencias
End Sub
La siguiente línea de la Sub rutina que mencionas que fue mi sugerencia (en realidad en tu rutina original decía A1), la debés cambiar por otra que tenga que ver con la referencia activa
If cells(fil,1) = Tabulacion Then 'SUJERENCIA DEL EXPERTO
De esta manera, como fil guarda la celda donde se está introduciendo un valor, siempre hará mención a la celda de esa fila, col A.
Solo falta agregar en el módulo, otra variable pública a continuación de donde ingresaste la línea:
Public rgo as String
Public fil as Integer
Saludos
Elsa
* No te pierdas la promoción de dbre en manuales:
http://es.geocities.com/lacibelesdepunilla/manuales
Te recuerdo que tenés esta consulta abierta. Si el tema quedó concluido no olvides finalizarla.
Felicidades!
Elsa
Felicidades Elsa, el macro funciona de maravilla; solo que ahora le agregue una subrutina al código con la finalidad de que todos los datos que estoy capturando en las celdas arriba mencionadas se vayan registrando también en otra Hoja ("hoja1").
Esto es lo que le intento agregar al código del Modulo1:
For J = 1 To 1000
If Hoja1.Cells(J, 1) = "" Then
final = J
Hoja1.Cells(final, 1) = Time & " - " & Date      'LENEA1
Hoja1.Cells(final, 2) = Tabulacion                    'LENEA2
Hoja1.Cells(final, 3) = Tabulacion2                  'LINEA3
Hoja1.Cells(final, 4) = Resultado                     'LINEA4

Exit For
End If
Next
Como vera esta instrucción solo me pone correctamente la linea 1 y la linea 4 de este código.
Las Lineas 3 y 4 ("Tabulacion" y "Tabulacion2") si las ingresa en la "Hoja1" pero el problemas es que los datos no corresponden a los artículos que yo ingrese en la hoja de excel sino que corresponden a la ultima linea del archivo de Texto que es en donde yo tengo registrado todos mis artículos. La idea es que se vayan registrando los datos que yo estoy capturando en otra hoja de excel.
Muchas gracias.
Luego de tantos días comprenderás que no es tan fácil volver sobre un tema
Aparentemente cuando cargás datos en B1, C1 o D1 (y otras más) llamás a la subrutina 'leer-texto).
Bien, aquí capturás algunos datos y los querés colocar en Hoja1. No necesitas en ese caso un For Next, porque lo harás por cada fila capturada.
Creo que lo mejor será que finalices hasta aquí ya que la respuesta responde a lo que solicitaste inicialmente.
Luego abrí una nueva consulta, escribiendo la rutina tal como te quedó para que partamos ya de una versión genuina y aclarando un poco más que estás intentando lograr ahora.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas