Saltar al contenido

Foco entre formularios


Recommended Posts

publicado

Benito

Para dar foco a un objeto desde un formulario a otro, solo debes escribir sus nombres de formulario y objeto 

MiForm.Referencia.Setfocus

Inclúyelo en el botón "Ir"

 

Saludos

publicado
Hace 15 horas, Gerson Pineda dijo:

Benito

Para dar foco a un objeto desde un formulario a otro, solo debes escribir sus nombres de formulario y objeto 

MiForm.Referencia.Setfocus

Inclúyelo en el botón "Ir"

 

Saludos

Buen día Gersón;

Primero agradecerte la ayuda y segundo he probado como comentas y no va.

Te dejo código por si ves algo raro.

Código evento frm_cobros:

Private Sub Texto_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean): On Error Resume Next
Dim Respuesta As String
Dim vcliente As Long
Set Formulario = Me

Conectar
   Sql = "SELECT * FROM tb_cliente WHERE nºcliente=" & Texto
rs.Open Sql, cnn, 1, 1

If rs.RecordCount > 0 Then
    frm_Cobros.TextBox50 = rs("nºcliente")
    frm_Cobros.TextBox51 = rs("nombre")
    frm_Cobros.TextBox64 = rs("fotoCliente")
   'Añadir imagen
    cargarImagen
   
Else
    Respuesta = MsgBox("El cliente es incorrecto, ¿Desea dar de alta este cliente?", vbYesNo, "Registrar:")
    If Respuesta = vbYes Then
        Cancel = True
'        Texto.SetFocus
        vcliente = Me.Texto.Value
        frm_Clientes.Texto.Text = vcliente
        frm_Clientes.Show
'        TextBox2.SetFocus
    End If
    If Respuesta = vbNo Then
        Cancel = True
        Texto.SetFocus
    End If
End If
End Sub

y código que he puesto en el frm_Clientes btn_Cuenta:

Private Sub btn_Cuenta_Click(): On Error Resume Next
Formulario.Texto = vcliente
Formulario.TextBox2.SetFocus
'frm_Cobros.TextBox2.SetFocus '<--He probado también así
Unload Me
End Sub

Corrígeme si me estoy equivocando.

Un abrazo.

publicado
Hace 2 horas, Antoni dijo:

Lo siento pero no va. ?

Hola Antoni, pues no se lo que falla, lo he abierto en otro pc con office 32bits y si problema.

Lo único que te envié el frm sin código y el código en un Bloc de notas.

No se me ocurre otra cosa.

Si quieres me avisas y mañana vuelvo a subir.

Gracias por la molestia. 

Un abrazo.

publicado
Hace 15 horas, Antoni dijo:

Lo siento pero no va. ?

Buen día Antoni;

No voy a ocuparte mas tiempo. Este es el último intento y sí no te va lo dejamos.

Adjunto archivo Zip y en el tienes la macro MExcel y la base de datos MAccess creados de nuevo.

En la MExcel solo tiene cargado un único formulario que es frm_Cobros y no tiene nada de código está en blanco, el código te lo he puesto en un bloc de notas.

Y por último en este mismo zip tienes los módulos y el resto de formularios que no he cargado a la macro por si acaso.

Espero que ahora no te salga ningún error.

A mi en ninguno de los dos me muestra ningún error.

Creo que ya te he comentado que el office es el 2019 de 32 bits. Inclusive ayer lo actualice.

Saludos y buen día.

Ahh y gracias por intentarlo.

MEvento(3).zip

publicado

Definitivamente, el formulario frm_Cobros está corrupto, lo eliminas y todo se soluciona.

Último intento, exporta el formulario y súbelo.

publicado
Hace 47 minutos , Antoni dijo:

Definitivamente, el formulario frm_Cobros está corrupto, lo eliminas y todo se soluciona.

Último intento, exporta el formulario y súbelo.

Hola Antoni,  corrígeme si me equivoco, tengo que eliminar el frm_Cobros y después hablas de exportar ¿?

Por lo que entiendo es que lo elimino y subo la macro sin el frm.

Es así (?).

Mañana la subo a ver sí entendí bien cualquier cosa me dices.

Un abrazo Antoni y disculpar tanto rollo. 

 

publicado

Exporta el formulario, elimínalo y sube por separado el archivo Excel, y los archivos .frm y .frx del formulario, la BD no es necesario.

publicado
Hace 22 horas, Gerson Pineda dijo:

Tu formulario esta raro, es posible que este corrupto

Pues haciendo pruebas, no tengo ningún problema

Te adjunto un ejemplo y lo pruebas

 

Saludos 

Foco entre formularios.xlsm 18.58 kB · 4 descargas

Gracias Gerson, muy bueno su ejemplo. 

Menos bueno mi frm que está corrupto.  

Voy a seguir los pasos que me ha dado Antoni y a ver si definitivamente conseguimos algo.

Un abrazo y gracias por su ayuda.  ? 

publicado
Hace 13 horas, Antoni dijo:

Exporta el formulario, elimínalo y sube por separado el archivo Excel, y los archivos .frm y .frx del formulario, la BD no es necesario.

Buenos días Antoni;

Te adjunto tres archivos:

1.-En el primero exporto el frm_Cobros y a continuación lo elimino y guardo la macro sin él. En el zip está la macro y el archivo frm_Cobros corrupto que he exportado.

2.-En el segundo zip lo que he hecho es exportar todos los frms y módulos y guardar la macro limpia.

Contiene todos los frms y módulos excepto el frm_Cobros.

3.-El tercer zip contiene una macro nueva con un frm_Cobros nuevo creado desde cero, es decir no he hecho copia y pega desde el corrupto.

Primero cree los frames y desde ellos he ido añadiendo labels y textbox. Dentro del frame si que he hecho copia y pega. Solo contiene este frm dos procedimientos que son para mostrar u ocultar otro fame.

 

Espero poder haberte ayudado así y cruzo los dedos para que por fin puedas abrirlo y ver el fallo que comentaba en el video.

Saludos y buen día.

Opción1.zip Opción2.zip Opción3.zip

publicado

Vamos por partes.

La opción 1 no funciona, ni siquiera me deja importar el formulario. Está claro que el archivo .frx está mal.

El código VBA se puede recuperar sin problemas porqué el archivo .frm se deja abrir.

La opción 2 no tiene problemas, pero eso ya te lo había dicho yo, quitando el formulario no hay problema.

La opción 3 funciona ¿Y?

¿Y ahora qué?

¿No dispones de alguna copia de seguridad anterior a la última versión de la que puedas exportar el formulario?

publicado
Hace 45 minutos , Antoni dijo:

Vamos por partes.

La opción 1 no funciona, ni siquiera me deja importar el formulario. Está claro que el archivo .frx está mal.

El código VBA se puede recuperar sin problemas porqué el archivo .frm se deja abrir.

La opción 2 no tiene problemas, pero eso ya te lo había dicho yo, quitando el formulario no hay problema.

La opción 3 funciona ¿Y?

¿Y ahora qué?

¿No dispones de alguna copia de seguridad anterior a la última versión de la que puedas exportar el formulario?

Buenos días Antoni;

Disculpa si llegan dos mensajes porqué creo que lo envié y ahora no aparece. 

En cuanto al tema, si puedes abrir la macro del zip.2 puedes importar a este el frm del zip. 3 que está  bien y una vez importado le agregas el código que te envié en un bloc de notas en el post anterior. Si no lo tienes te lo puedo pasar en formato. txt

Cita:

En la MExcel solo tiene cargado un único formulario que es frm_Cobros y no tiene nada de código está en blanco, el código te lo he puesto en un bloc de notas.

En cuanto a una copia puedo disponer pero igual pasa lo mismo ya que no sabemos desde cuando viene el problema. 

SI puedes componerlo así bien y sino no te rompas más la cabeza ya he abusado mucho de ti.

Te lo agradezco mucho Antoni, un abrazo. 

Me olvidaba, el frm_Cobros del tres tiene la misma estructura, los botones y textbox están nombrados igual.

publicado

Ya me he hecho un lio, ¿Qué tiene que ver el formulario del zip3 con el video de la petición?

Los archivos se corrompen de 1 en 1, por lo que si tienes alguna copia anterior, lo más probable es que funcione.

publicado
Hace 4 horas, Antoni dijo:

Ya me he hecho un lio, ¿Qué tiene que ver el formulario del zip3 con el video de la petición?

Los archivos se corrompen de 1 en 1, por lo que si tienes alguna copia anterior, lo más probable es que funcione.

Hola de nuevo Antoni;

-Ya para rematar adjunto la macro con del frm hecho desde 0 y una copia de seguridad.

Espero que te sirva y ahora si que ya no le doy mas vueltas. Sí no funciona tiro la toalla.

Un saludo y gracias por tú paciencia.

 

MExcel.xlsm C.Seguridad20210518_13-50-04.xlsm

publicado

Hola Benito

Por lo que puedo notar es que tienes la llamada al procedimiento Verificar en el evento BeforeUpdate de tu TextBox cuando deberias tenerlo en el evento Change y posteriormente en el evento AfterUpdate es donde validarías tu variable Vr para que si está en false, entonces haga la llamada al formulario para registrar el nuevo cliente y con ello ya tienes solucionado esa parte.

Lo otro es el orden de la tabulaciones de tus controles en donde el primer Frame debe ser 0, el segundo Frame debe ser 1 y el TexBox donde quieres el foco que sea 0 y en ese control con su indice de tabulación 0 tendrás el foco sin problemas.

Mis respetos @Gerson Pineda

publicado
Hace 14 horas, Enigma25 dijo:

Hola Benito

Por lo que puedo notar es que tienes la llamada al procedimiento Verificar en el evento BeforeUpdate de tu TextBox cuando deberias tenerlo en el evento Change y posteriormente en el evento AfterUpdate es donde validarías tu variable Vr para que si está en false, entonces haga la llamada al formulario para registrar el nuevo cliente y con ello ya tienes solucionado esa parte.

Lo otro es el orden de la tabulaciones de tus controles en donde el primer Frame debe ser 0, el segundo Frame debe ser 1 y el TexBox donde quieres el foco que sea 0 y en ese control con su indice de tabulación 0 tendrás el foco sin problemas.

Mis respetos @Gerson Pineda

Hola David;

He cambiado de evento tal y como comentas y ahora funciona correctamente.

Imagino que has podido abrir el archivo cosa que me alegra ya que al parecer había problemas a la hora de abrirlo.

Un abrazo y muy gradecido.

saludos también a Gerson y Antoni por su ayuda.

 

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.