Foros del Web » Soporte técnico » Ofimática »

Codigo que devuelva el numero de celda en

Estas en el tema de Codigo que devuelva el numero de celda en en el foro de Ofimática en Foros del Web. Amigos espero puedan ayudarme 1. necesito la coordenada de la celda en eje Y para asignarsela a una variable para que? ok tengo una hoja ...
  #1 (permalink)  
Antiguo 23/10/2006, 14:50
Avatar de Crashman  
Fecha de Ingreso: junio-2004
Mensajes: 335
Antigüedad: 19 años, 10 meses
Puntos: 0
Codigo que devuelva el numero de celda en

Amigos espero puedan ayudarme
1. necesito la coordenada de la celda en eje Y para asignarsela a una variable
para que? ok tengo una hoja de escel que contiene datos cada fila contiene informacion que necesito pero para dar con esa fila yo estipule que empezara en la fila 4 columna 1 y que cuando encontrara compra que pusiera una x y la pintara de amarillo, si es diferente una E, y tambien pintada, ahora necesito que la macro empieze de la ultima fila con cualquier letra, para asignar nuevamente asi abajo las letras, pero no se como asignar a una variable el dato de la coordenada Y porque utilizo el codigo de "Cells" y no de "Range"
aca les dejo el codigo que tengo

Código:
Workbooks(origen).Worksheets(1).Cells(celda, 2).Value <> ""
    dato = Cells(celda, 2).Value (aqui es donde necesito saber el # de celda)
    Select Case dato
        Case "compra"
            Cells(celda, 2).Select
            With Selection.Interior
                .ColorIndex = 6
                .Pattern = xlSolid
            End With
            Cells(celda, 1).Value = "x"
        Case "ANULADA"
            Cells(celda, 2).Select
            With Selection.Interior
                .ColorIndex = 6
                .Pattern = xlSolid
            End With
            Cells(celda, 1).Value = "E"
        Case "NO RECIBIDA"
            Cells(celda, 2).Select
            With Selection.Interior
                .ColorIndex = 6
                .Pattern = xlSolid
            End With
            Cells(celda, 1).Value = "E"
        End Select
        celda = celda + 1
    Wend
__________________
En la politica el unico ministerio que sale bien ante el pueblo es la iglesia, promete vida despues de la muerte y nadie a regresado a reclamar...
  #2 (permalink)  
Antiguo 24/10/2006, 02:48
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
No me he enterado mucho de lo que quieres hacer, pero aquí te dejo un ejemplo, para saber la celda en la que estamos (referencia absoluta y relativa), y también la fila, y la columna:
Código:
Sub prueba()
dato = ActiveCell.Address
'si no quieres tener una referencia absoluta, como por ejemplo $A$33,
'pon esta línea que viene a continuación
dato_temporal = Replace(dato, "$", "")
'escribamos algunas cosillas debajo de la celda activa...
ActiveCell = dato_temporal 'referencia relativa
ActiveCell.Offset(1, 0) = dato 'referencia absoluta
'eliminamos el primer caracter de la referencia absoluta (el primer $)
dato = Mid(dato, 2)
fila_y_columna = Split(dato, "$")
ActiveCell.Offset(2, 0) = fila_y_columna(0) 'fila
ActiveCell.Offset(3, 0) = fila_y_columna(1) 'columna
End Sub
Espero que te sirva.

Salu2
  #3 (permalink)  
Antiguo 24/10/2006, 11:27
Avatar de Crashman  
Fecha de Ingreso: junio-2004
Mensajes: 335
Antigüedad: 19 años, 10 meses
Puntos: 0
Gracias mi amigo, pero aun no te entiendo bien (falta de agricultura) pero si quieres te mando la macro y los archivos que busca...para que te des una idea
tengo un bucle que busca determinado texto
en este caso "Compra" que cuando la encuentre ponga en la celda de la izquierda una x y si es diferente una e,
ok hasta aca funciona bien, pero ahora necesito que siga buscando datos en la misma hoja, el problema es que yo le dije al bucle que empieze en la celda 4 fila 2 para el dato y que escriba el celda 4 fila 1, asi agroso modo:

Código:
celda = 4
cells(celda,1).value = "X"
'y demas codigo arriba como abajo..
lo que necesito seria algo asi
que busque la primera celda hacia abajo sin dato
que cuando la encuentre le asigne el numero de celda a la variante "celda" pero que se mantenga en la misma fila digo algo asi

Código:
'codigo que desconosco
activecell.value= celda_activa
celda= celda_activa
cells(celda,1).value= "x"
espero puedas ayudarme gracias...
__________________
En la politica el unico ministerio que sale bien ante el pueblo es la iglesia, promete vida despues de la muerte y nadie a regresado a reclamar...
  #4 (permalink)  
Antiguo 24/10/2006, 11:50
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Cita:
Iniciado por Crashman
lo que necesito seria algo asi
que busque la primera celda hacia abajo sin dato
que cuando la encuentre le asigne el numero de celda a la variante "celda" pero que se mantenga en la misma fila digo algo asi

'codigo que desconosco
activecell.value= celda_activa
celda= celda_activa
cells(celda,1).value= "x"
Sigue sin quedarme del todo claro, pero nos vamos aproximando (o eso creo).

Lo que quieres es recorrer una columna (vertical), y que se pare en cuanto encuentre una celda vacía. ¿Es así?. Bueno, si estoy en lo cierto, una vez hecho eso, quieres poner en la celda de la izquierda, un texto, ¿verdad?. En ese caso, el código sería este (aunque se puede hacer de varias formas), ...pero claro, debes situarte en alguna celda de esa columna que deseas chequear:

Código:
'Que no se pare de buscar, hasta que no encuentre una fila vacía
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
    ActiveCell.Offset(1, 0).Select
Loop
'ahora que estaremos parados en la celda vacía,
'en la misma fila, y una columna más atrás (a la izquierda),
'ponemos una equis
ActiveCell.Offset(0, -1) = "x"
Creo que era esto lo que buscabas, ¿no?.

Salu2
  #5 (permalink)  
Antiguo 24/10/2006, 12:18
Avatar de Crashman  
Fecha de Ingreso: junio-2004
Mensajes: 335
Antigüedad: 19 años, 10 meses
Puntos: 0
mi buen gracias por la ayuda pero te explicare mas despacio...
La macro YA HACE esto de buscar el dato y dependiendo el dato que busca asigna una letra en la columna izquierda.
el problema es que yo le dije que buscara a partir de la celda "4", que es donde estaba el dato original, si quiero seguir usando esta macro tengo que eliminar manualmente desde la celda 4 hasta la ultima celda que proceso y dejar las celdas que no tienen letra a su izquierda, para evitar eso necesito un codigo que busque la primera celda en blanco (codigo que gracias ya me proporcionaste) y que la celda que encuentre en blanco el NUMERO de celda se lo asigne a otra variable, y que esta a la ves es el dato de la celda del bucle te dejo los archivos para que los veas

http://www.mytempdir.com/1013605

creo que tendre que volver a hacer todo...(en un principio eran hojas diferentes ahora es una sola hoja)
__________________
En la politica el unico ministerio que sale bien ante el pueblo es la iglesia, promete vida despues de la muerte y nadie a regresado a reclamar...
  #6 (permalink)  
Antiguo 24/10/2006, 12:49
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Bueno, pues entre mis dos respuestas anteriores, haré un mix, porque sigo sin tenerlo claro del todo (hoy estoy espeso).

Antes de nada, decirte que sería conveniente que como primera línea de cada macro, pusieras esto:

Código:
Application.ScreenUpdating = False
Así no se ve en pantalla la ejecución del macro (ese movimiento de pantalla que parece volver a uno loco), aparte de que poniendo esa línea, se ejecuta más rápidamente el macro.

Antes de finalizar el procedimiento (la linea antes del end sub), pones esto, para dejarlo como estaba:
Código:
Application.ScreenUpdating = True
Ahora lo que preguntabas. Este código te pone el número de fila en la primera celda vacía que encuentre. Puedes utilizar la variable "celda" para lo que quieras, porque ahí tienes el número de la fila:
Código:
'Que no se pare de buscar, hasta que no encuentre una fila vacía
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
    ActiveCell.Offset(1, 0).Select
Loop
'ahora que estaremos parados en la celda vacía,
'sacamos la dirección de la celda
direccion = ActiveCell.Address
'como tenemos una referencia absoluta, del tipo $A$33
'le quitamos el primer signo del $ para que nos quede A$33
direccion = Mid(direccion, 2)
'creamos un vector con 2 elementos que estarán separados por el símbolo
'del $. Uno será la "A" y otro el "33" (suponiendo que estemos en A33)
dato = Split(direccion, "$")
'nos quedamos con el segundo elemento del vector (empieza por cero)
celda = dato(1)
ActiveCell = celda
Salu2
  #7 (permalink)  
Antiguo 24/10/2006, 15:57
Avatar de Crashman  
Fecha de Ingreso: junio-2004
Mensajes: 335
Antigüedad: 19 años, 10 meses
Puntos: 0
ejem,,cuj, cuj, disculpa mi ignorancia pero si podrias poner el tipo de variable para cada dato que me das en la localizacion de la celda porque a mi me da error...talvez estoy haciendo mal en asignarles el tipo de variable...como pudiste revisar en mi codigo yo utilizo el option explicit y por ello no me deja pasa ya le asigne el tipo de variable pero en la linea
Código:
dato = Split(direccion,"$")
me da error de tipo...gracias
__________________
En la politica el unico ministerio que sale bien ante el pueblo es la iglesia, promete vida despues de la muerte y nadie a regresado a reclamar...
  #8 (permalink)  
Antiguo 26/10/2006, 01:33
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 4 meses
Puntos: 144
Aquí lo tienes:
Código:
Option Explicit
Dim direccion As String
Dim celda As String
Dim dato() As String
 
Sub prueba()
  'Que no se pare de buscar, hasta que no encuentre una fila vacía
   Do While Not IsEmpty(ActiveCell.Offset(0, 0))
       ActiveCell.Offset(1, 0).Select
   Loop
  'ahora que estaremos parados en la celda vacía,
  'sacamos la dirección de la celda
   direccion = ActiveCell.Address
  'como tenemos una referencia absoluta, del tipo $A$33
  'le quitamos el primer signo del $ para que nos quede A$33
   direccion = Mid(direccion, 2)
  'creamos un vector con 2 elementos que estarán separados por el símbolo
  'del $. Uno será la "A" y otro el "33" (suponiendo que estemos en A33)
   dato = Split(direccion, "$")
  'nos quedamos con el segundo elemento del vector (empieza por cero)
   celda = dato(1)
   ActiveCell = celda
End Sub
Editado: Si te fijas, dato() está definido como una matriz. En realidad contiene dos elementos:

la columna: dato(0)
y la fila: dato(1)

Salu2

Última edición por 3pies; 26/10/2006 a las 01:44
  #9 (permalink)  
Antiguo 26/10/2006, 14:26
Avatar de Crashman  
Fecha de Ingreso: junio-2004
Mensajes: 335
Antigüedad: 19 años, 10 meses
Puntos: 0
MASTER, gracias amigo mio, creeme que me sacaste de un buen apuro, te lo agradesco infinitamente...
__________________
En la politica el unico ministerio que sale bien ante el pueblo es la iglesia, promete vida despues de la muerte y nadie a regresado a reclamar...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:49.