MACRO PARA HACER CAMBIOS DE STATUS EN TABLA

28/10/2003 - 03:10 por Ing. Héctor Montero S. | Informe spam
Hola.
Quisiera me puedan orientar sobre el desarrollo de una macro que ejecute lo
siguiente:
Tengo una base da datos configurada de la siguiente forma, CON MÁS DE 3000
REGISTROS.
A B C D
orden status horas centrotrabajo
3456 pendiente 20 corte
3456 pendiente 15 soldadura
3456 pendiente 10 ensamble
3475 pendiente 5 soldadura
3475 pendiente 8 corte

Necesito desarrollar una macro que me pregunte "digite la orden de
producción", de forma que yo solamente digite el número de orden y que
automáticamente en el campo que aparece el STATUS, todos los espacios
cambien por la palabra CERRADA de la orden ya digitada.
Les agradezco toda la ayuda que me puedan facilitar

HMS

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/10/2003 - 04:57 | Informe spam
Hola, 'tocayo' :)

... macro ... pregunte "digite la orden ... y que ... en el campo ... STATUS ... la palabra CERRADA [...]



prueba con la siguiente rutina [no estoy seguro si los numeros de orden son -solamente- 'valores']
'le puse' una 'salida' [Exit For] para NO 'tener que' recorrer todo el rango de registros.
la 'puedes correr' SIN 'necesidad' de tener 'activa' la hoja 'en cuestion'
supongo que la hoja se llama 'Hoja1' y el rango de registros [col 'a'] 'inicia' en 'a2' hasta ???
=Sub Cerrar_Orden()
Dim Orden, Rango As String, Registros As Integer, Celda As Range, Cerrada As Integer
Orden = Trim(InputBox("Digite el número de orden de producción", "Cerrar orden"))
If Orden = "" Then Exit Sub
If Not IsNumeric(Orden) Then Exit Sub Else Orden = Val(Orden)
With Worksheets("Hoja1")
Rango = Range(.Range("a2"), .Range("a65536").End(xlUp)).Address
Registros = Application.CountIf(.Range(Rango), Orden)
If Not Registros > 0 Then Exit Sub
For Each Celda In .Range(Rango)
If Celda = Orden Then
Celda.Offset(, 1) = "CERRADA"
Cerrada = Cerrada + 1
If Cerrada = Registros Then Exit For
End If
Next
End With
End Sub

Saludos,
Héctor.
Respuesta Responder a este mensaje
#2 Ing. Héctor Montero S.
29/10/2003 - 00:32 | Informe spam
Gracia compañeros funciona de maravilla
Qusiera saber como se puede hacer un modificación:
Resulta que necesito agregarle una columna denominada como fecha, de forma
que como en el macro anterior, que se llena con la palabra "CERRADA", PERO
QUE EN LA COLUMNA DE fecha con la fecha de cierre.
Gracias

Saludos.
Ing. Héctor Montero Sobrado
Oficina 231-7858 cel 376-9751.

"Héctor Miguel" wrote in message
news:
Hola, 'tocayo' :)

> ... macro ... pregunte "digite la orden ... y que ... en el campo ...


STATUS ... la palabra CERRADA [...]

prueba con la siguiente rutina [no estoy seguro si los numeros de orden


son -solamente- 'valores']
'le puse' una 'salida' [Exit For] para NO 'tener que' recorrer todo el


rango de registros.
la 'puedes correr' SIN 'necesidad' de tener 'activa' la hoja 'en cuestion'
supongo que la hoja se llama 'Hoja1' y el rango de registros [col 'a']


'inicia' en 'a2' hasta ???
=> Sub Cerrar_Orden()
Dim Orden, Rango As String, Registros As Integer, Celda As Range,


Cerrada As Integer
Orden = Trim(InputBox("Digite el número de orden de producción", "Cerrar


orden"))
If Orden = "" Then Exit Sub
If Not IsNumeric(Orden) Then Exit Sub Else Orden = Val(Orden)
With Worksheets("Hoja1")
Rango = Range(.Range("a2"), .Range("a65536").End(xlUp)).Address
Registros = Application.CountIf(.Range(Rango), Orden)
If Not Registros > 0 Then Exit Sub
For Each Celda In .Range(Rango)
If Celda = Orden Then
Celda.Offset(, 1) = "CERRADA"
Cerrada = Cerrada + 1
If Cerrada = Registros Then Exit For
End If
Next
End With
End Sub

Saludos,
Héctor.


Respuesta Responder a este mensaje
#3 Héctor Miguel
29/10/2003 - 08:26 | Informe spam
Hola, 'tocayo' !

... modificacion ... necesito ... columna ... fecha ... se llena ... con la fecha de cierre.



a mi [que] me gusta 'complicar' las cosas, y se me ha 'ocurrido' lo siguiente [suponiendo que] ...
1.- la columna 'agregada' [fecha] es en la columna 'd' [Celda.Offset(, 4)]
2.- la fecha es 'solicitada' al operador [por un 'inputbox']
[la macro NO 'continua' si la fecha no se ha 'establecido apropiadamente']
3.- la macro [probablemente] sera ejecutada en sistemas con 'diferente' orden de fechas
[p.e. 3/4/03 -segun el orden del sistema- pudiera 'significar' marzo 4 2003 -o- 3 de abril de 2003]
[en fin, puedes modificar lo que sea necesario -o quitar lo que 'estorbe'-]
=Sub Cerrar_Orden()
Dim Orden, Rango As String, Registros As Integer, _
OrdenFecha As String, Fecha, Celda As Range, Cerrada As Integer
Orden = Trim(InputBox("Digite el número de orden de producción", "Cerrar orden"))
If Orden = "" Then Exit Sub
If Not IsNumeric(Orden) Then Exit Sub Else Orden = Val(Orden)
With Worksheets("Hoja1")
Rango = Range(.Range("a2"), .Range("a65536").End(xlUp)).Address
Registros = Application.CountIf(.Range(Rango), Orden)
If Not Registros > 0 Then Exit Sub
Select Case Application.International(xlDateOrder)
Case 0: OrdenFecha = "mm-dd-aaaa"
Case 1: OrdenFecha = "dd-mm-aaaa"
Case 2: OrdenFecha = "aaaa-mm-dd"
End Select
TomarFecha:
Fecha = Trim(InputBox("Indica la fecha del cierre" & vbCr & _
"Utiliza el orden " & OrdenFecha, "Fecha de cierre"))
If Fecha = "" Then Exit Sub
If Not IsDate(Fecha) Then GoTo TomarFecha Else Fecha = CDate(Fecha)
For Each Celda In .Range(Rango)
If Celda = Orden Then
Celda.Offset(, 1) = "CERRADA"
Celda.Offset(, 4) = Fecha ' Format(Fecha, "mmmm dd, yyyy")
Cerrada = Cerrada + 1
If Cerrada = Registros Then Exit For
End If
Next
End With
End Sub

Saludos,
Héctor.

P.D. comentarios 'adicionales':
1.- 'indicarle' [al operador] la secuencia [en la fecha] NO 'previene' que pueda 'entrarla' [de todas formas] de manera 'distinta'
2.- si en [cualquiera de] los 'inputboxes' se presiona {esc}, la macro 'se termina' [asume 'cancelacion por el usuario']
3.- si se 'vuelve a cerrar' una orden [ya 'cerrada'], seguramente se estara 'modificando' su fecha de cierre [anterior] :(( <== => [si quieres 'evitar' que se 'afecten' ordenes 'ya cerradas'] ... < modifica la 'asignacion' de la variable 'Registros' [la 'cuenta' de los registros 'afectables' -si existen-]
de:
Registros = Application.CountIf(.Range(Rango), Orden)
a:
Registros = Evaluate("SumProduct(1*(" & _
.Range(Rango).Address(External:=True) & "=" & Orden & ")*(" & _
.Range(Rango).Offset(, 1).Address(External:=True) & "<>""CERRADA""))")
Respuesta Responder a este mensaje
#4 Ing. Héctor Montero S.
29/10/2003 - 18:28 | Informe spam
TOCAYO!!!!!! Gracias.
HMS

"Héctor Miguel" wrote in message
news:#
Hola, 'tocayo' !

> ... modificacion ... necesito ... columna ... fecha ... se llena ... con


la fecha de cierre.

a mi [que] me gusta 'complicar' las cosas, y se me ha 'ocurrido' lo


siguiente [suponiendo que] ...
1.- la columna 'agregada' [fecha] es en la columna 'd' [Celda.Offset(, 4)]
2.- la fecha es 'solicitada' al operador [por un 'inputbox']
[la macro NO 'continua' si la fecha no se ha 'establecido


apropiadamente']
3.- la macro [probablemente] sera ejecutada en sistemas con 'diferente'


orden de fechas
[p.e. 3/4/03 -segun el orden del sistema- pudiera 'significar' marzo


4 2003 -o- 3 de abril de 2003]
[en fin, puedes modificar lo que sea necesario -o quitar lo que


'estorbe'-]
=> Sub Cerrar_Orden()
Dim Orden, Rango As String, Registros As Integer, _
OrdenFecha As String, Fecha, Celda As Range, Cerrada As Integer
Orden = Trim(InputBox("Digite el número de orden de producción", "Cerrar


orden"))
If Orden = "" Then Exit Sub
If Not IsNumeric(Orden) Then Exit Sub Else Orden = Val(Orden)
With Worksheets("Hoja1")
Rango = Range(.Range("a2"), .Range("a65536").End(xlUp)).Address
Registros = Application.CountIf(.Range(Rango), Orden)
If Not Registros > 0 Then Exit Sub
Select Case Application.International(xlDateOrder)
Case 0: OrdenFecha = "mm-dd-aaaa"
Case 1: OrdenFecha = "dd-mm-aaaa"
Case 2: OrdenFecha = "aaaa-mm-dd"
End Select
TomarFecha:
Fecha = Trim(InputBox("Indica la fecha del cierre" & vbCr & _
"Utiliza el orden " & OrdenFecha, "Fecha de cierre"))
If Fecha = "" Then Exit Sub
If Not IsDate(Fecha) Then GoTo TomarFecha Else Fecha = CDate(Fecha)
For Each Celda In .Range(Rango)
If Celda = Orden Then
Celda.Offset(, 1) = "CERRADA"
Celda.Offset(, 4) = Fecha ' Format(Fecha, "mmmm dd, yyyy")
Cerrada = Cerrada + 1
If Cerrada = Registros Then Exit For
End If
Next
End With
End Sub

Saludos,
Héctor.

P.D. comentarios 'adicionales':
1.- 'indicarle' [al operador] la secuencia [en la fecha] NO 'previene' que


pueda 'entrarla' [de todas formas] de manera 'distinta'
2.- si en [cualquiera de] los 'inputboxes' se presiona {esc}, la macro 'se


termina' [asume 'cancelacion por el usuario']
3.- si se 'vuelve a cerrar' una orden [ya 'cerrada'], seguramente se


estara 'modificando' su fecha de cierre [anterior] :(( <==> => [si quieres 'evitar' que se 'afecten' ordenes 'ya cerradas'] ...
<> modifica la 'asignacion' de la variable 'Registros' [la 'cuenta' de
los registros 'afectables' -si existen-]
de:
Registros = Application.CountIf(.Range(Rango), Orden)
a:
Registros = Evaluate("SumProduct(1*(" & _
.Range(Rango).Address(External:=True) & "=" &


Orden & ")*(" & _
.Range(Rango).Offset(,


1).Address(External:=True) & "<>""CERRADA""))")


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida