aaquino

Miembros
  • Contador de contenido

    287
  • Unido

  • Última visita

  • Days Won

    5

1Seguidor

Sobre aaquino

  • Rango
    Miembro

Configuraciones

  • Campo que utilizas como separador de argumentos ,
  1. Muchas gracias mi estimado @Macro Antonio Tema solucionado
  2. Buenos días, tardes, noches, Quiero molestarlos con otra consulta. Tengo esta UDF que hice para que me genere un borde al registrar datos: Public Function BordeDeFilas(Hoja As Worksheet, xFila As Long, xColumna As String, Color As Long) Dim Inicio As String Inicio = "A" With Hoja .Range(Inicio & xFila & ":" & xColumna & xFila).Select With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .ThemeColor = Color .Weight = xlThin End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .ThemeColor = Color .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .ThemeColor = Color .Weight = xlThin End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .ThemeColor = Color .Weight = xlThin End With .Range(Inicio & 1).Select End With End Function La verdad la hice para no estar haciendo haciendo el mismo código una y otra vez. Pero me está dando un pequeño inconveniente. Tengo varios forms, los cuales guardan y actualizan registros en diferentes hojas de un mismo Excel. Desde estos forms es que hago la llamada a esta función, para que agregue un borde de color dependiendo de la base de datos que necesito (es únicamente estética del proyecto), la cuestión es la siguiente: Tengo la hoja "Proveedores", y tengo la hoja "Menú", desde la hoja Menú hago la llamada al form para actualizar / registrar nuevos proveedores. Al momento de guardar la información me salta un error, el cuál ya detecté la causa, y es porque estoy haciendo una selección de un rango desde otra hoja, por lo que tengo que modificar el código de la función para darle un Activate a la hoja de proveedores. La cuestión es que al activar dicha hoja ya no me regresa a la hoja Menú, y es este mi inconveniente. Me podrían ayudar a modificar la UDF para que pueda regresar a la hoja menú, o si me pueden dar una nueva forma de hacer lo que necesito se los voy a agradecer. Liquidación Muestra.xlsm
  3. Hola, de acuerdo a lo que han dicho los compañeros @ikanni y @Macro Antonio te adjunto un ejemplo de cómo lo podrías hacer para tener acceso a los formularios por nivel de usuario. Acceso a formularios por nivel.xlsm
  4. Muchas gracias @johnmpl Me ha quedado más claro la implementación de UDF Tema solucionado
  5. Hola, y gracias por las respuestas. @Macro Antonio es únicamente para conocimiento en vba, para saber si se puede o no hacer un argumento el cual se haga obligatorio dependiendo de si se usa o no otro argumento opcional. Esto lo pregunto por si en algún dado caso creo una UDF que vayan a implementar otros usuarios y no tener fallos en la UDF. Saludos.
  6. Prueba ahí a ver que te parece localescomerciales.xlsm
  7. Muy buenos días, tardes, noches Me ha saltado una duda, y quisiera me pudieran ayudar a finalizar una UDF He hecho esta función, la cual va muy bien. Public Function LimpiarTextbox(xForm As UserForm, Optional Switch As Boolean, Optional sNombre As String) Dim xCtrl As Control For Each xCtrl In xForm.Controls If TypeOf xCtrl Is MSForms.TextBox Then xCtrl = "" xCtrl.BackColor = RGB(255, 255, 255) If Switch = True And xCtrl.Name = sNombre Then xCtrl.SetFocus Else Exit Function End If End If Next End Function La duda que me surge es la siguiente: Como pueden ver hay dos argumentos opcionales, a lo que voy es, se puede hacer que el segundo argumento opcional se vuelva obligatorio, siempre y cuando el primer argumento opcional sea utilizado. Por ejemplo: En un Form, necesito que solamente limpie los textbox como lo indica la fórmula, por lo que la función queda así: Call LimpiarTextbox(Me) Pero en otro Form si quiero que al momento de limpiar ponga el focus en un textbox en específico Call LimpiarTextbox(Me, True, "txt_NombreEmpresa") Por lo tanto, lo que quiero es que al momento de poner en True el primer argumento opcional, el segundo argumento opcional se vuelva obligatorio. Aclaro que esto es un ejemplo de UDF en el que aplico este tipo de argumentos opcionales, y no siempre el primer argumento opcional será boolean, sino que puede ser string o long, etc., por lo que necesito saber si se pueden hacer argumentos opcionales dependientes. No subo archivo porque no necesito ayuda con solución de un problema, sino simplemente con aclaración de si se puede o no hacer lo que pido, y cómo hacerlo. De antemano muchas gracias por su ayuda.
  8. Muchas gracias por la ayuda, voy a revisar los aportes a ver cual me funciona mejor.
  9. Muchas gracias mi estimado @Macro Antonio Pueden cerrar el tema
  10. Muy buenos días, tardes, noches Disculpen la consultadera, pero no entiendo por qué me está dando tanto inconveniente el proyecto. Tengo un combobox que tiene 2 usos, el primero es para ingresar nuevos contribuyentes, y el segundo es para búsqueda de contribuyentes ya registrados en la BD. La macro para buscar contribuyentes registrados funciona bien, ya que si existe el NIT entonces me coloca en pantalla los datos registrados, el problema que tengo es el siguiente: Supongamos que tengo un NIT registrado 123456789, al ir digitando el NIT me aparecen en los textbox los datos de ese NIT, pero lo que necesito es registrar un nuevo contribuyente cuyo NIT es 12345987, el problema está en que me deja en pantalla los datos del primer NIT, no los borra de los textbox, por lo que me hice un procedimiento para borrar los datos del contribuyente registrado. El inconveniente radica en que al hacer el llamado al procedimiento para borrar los datos del contribuyente registrado, el formulario ya no me muestra los datos de todos los contribuyentes, sino únicamente del último registrado, es decir, en la base de datos actual tengo 3 contribuyentes, entonces el form únicamente me muestra los datos del tercer contribuyente, de los otros dos los deja en blanco, y no entiendo el motivo, si en la macro indica que si el NIT en el combobox existe entonces que muestre los datos, de lo contrario que borre los datos almacenados en los textbox, pero no hace eso, sino que solo muestra los datos del último contribuyente registrado. Esta es la macro completa del archivo: Private Sub cmb_NitContribuyente_Change() Dim Fila As Long, Final As Long On Error Resume Next If Me.cmb_NitContribuyente = Empty Then Call LimpiarControles("datos_contribuyente", Me) LimpiarItems End If With Hoja2 Final = .Range("A" & Rows.Count).End(xlUp).Row For Fila = 2 To Final If Val(.Cells(Fila, 1)) = Val(Me.cmb_NitContribuyente) Then Me.txt_NombreContribuyente.Value = .Cells(Fila, 2) Me.txt_CalleContribuyente.Value = .Cells(Fila, 3) Me.txt_CasaContribuyente.Value = .Cells(Fila, 4) Me.txt_ApartamentoContribuyente.Value = .Cells(Fila, 5) Me.txt_ZonaContribuyente.Value = .Cells(Fila, 6) Me.txt_PostalContribuyente.Value = .Cells(Fila, 7) Me.txt_ColoniaContribuyente.Value = .Cells(Fila, 8) Me.txt_DepartamentoContribuyente.Value = .Cells(Fila, 9) Me.txt_MunicipioContribuyente.Value = .Cells(Fila, 10) Me.txt_TelefonoContribuyente.Value = .Cells(Fila, 11) Me.txt_CelularContribuyente.Value = .Cells(Fila, 12) Me.txt_FaxContribuyente.Value = .Cells(Fila, 13) Me.txt_CorreoContribuyente.Value = .Cells(Fila, 14) Me.txt_NitPatrono.Value = .Cells(Fila, 15) Me.txt_NombrePatrono.Value = .Cells(Fila, 16) Else LimpiarSinNit End If Next End With End Sub Adicional, dejo el archivo a como lo llevo para que me hagan el favor de revisar y ver que estoy haciendo mal. Gracias de antemano. Plan IVA SAT 2017.xlsm
  11. Muchas gracias mi estimado @Macro Antonio me funcionó muy bien. En sí el tema está solucionado, lo único que quisiera saber es por qué la otra forma de recorrer las filas me daba ese error, por lo menos para tenerlo en cuenta para siguientes proyectos.
  12. Muy buenos días, tardes, noches Se me está presentando un inconveniente con el guardado y actualización de registros en un nuevo proyecto que estoy haciendo. Al grabar nuevos registros no hay inconvenientes, el problema se me da al momento de querer actualizarlos, pues lo que está haciendo la macro es que actualiza el registro, pero a la vez me crea uno nuevo con los mismos datos. Esta es la macro que estoy haciendo para el registro y actualización, lo cual lo hago desde un mismo botón de comando. Private Sub cmd_Guardar_Click() Dim Final As Long Dim Fila As Long On Error Resume Next If ControlesVacios("datos_contribuyente", Me, MultiPage1.Pages(0), True) = True Then Exit Sub Final = nReg(Hoja2, 1, 1) With Hoja2 If MsgBox("¿Están correctos los datos?" & vbNewLine & _ "¿Desea proceder?", vbQuestion + vbYesNo) = vbYes Then For Fila = 2 To Final If Val(.Cells(Fila, 1)) = Val(Me.cmb_NitContribuyente.Value) Then .Cells(Fila, 2) = Me.txt_NombreContribuyente.Value .Cells(Fila, 3) = Me.txt_CalleContribuyente.Value .Cells(Fila, 4) = Me.txt_CasaContribuyente.Value .Cells(Fila, 5) = Me.txt_ApartamentoContribuyente.Value .Cells(Fila, 6) = Me.txt_ZonaContribuyente.Value .Cells(Fila, 7) = Me.txt_PostalContribuyente.Value .Cells(Fila, 8) = Me.txt_ColoniaContribuyente.Value .Cells(Fila, 9) = Me.txt_DepartamentoContribuyente.Value .Cells(Fila, 10) = Me.txt_MunicipioContribuyente.Value .Cells(Fila, 11) = Me.txt_TelefonoContribuyente.Value .Cells(Fila, 12) = Me.txt_CelularContribuyente.Value .Cells(Fila, 13) = Me.txt_FaxContribuyente.Value .Cells(Fila, 14) = Me.txt_CorreoContribuyente.Value .Cells(Fila, 15) = Me.txt_NitPatrono.Value .Cells(Fila, 16) = Me.txt_NombrePatrono.Value Else .Cells(Final, 1) = Me.cmb_NitContribuyente.Value .Cells(Final, 2) = Me.txt_NombreContribuyente.Value .Cells(Final, 3) = Me.txt_CalleContribuyente.Value .Cells(Final, 4) = Me.txt_CasaContribuyente.Value .Cells(Final, 5) = Me.txt_ApartamentoContribuyente.Value .Cells(Final, 6) = Me.txt_ZonaContribuyente.Value .Cells(Final, 7) = Me.txt_PostalContribuyente.Value .Cells(Final, 8) = Me.txt_ColoniaContribuyente.Value .Cells(Final, 9) = Me.txt_DepartamentoContribuyente.Value .Cells(Final, 10) = Me.txt_MunicipioContribuyente.Value .Cells(Final, 11) = Me.txt_TelefonoContribuyente.Value .Cells(Final, 12) = Me.txt_CelularContribuyente.Value .Cells(Final, 13) = Me.txt_FaxContribuyente.Value .Cells(Final, 14) = Me.txt_CorreoContribuyente.Value .Cells(Final, 15) = Me.txt_NitPatrono.Value .Cells(Final, 16) = Me.txt_NombrePatrono.Value End If Next Else Exit Sub End If End With Call ControlesFondoBlanco("datos_contribuyente", Me) Call LimpiarControles("datos_contribuyente", Me) LimpiarItems Me.cmb_NitContribuyente.SetFocus End Sub Igualmente dejo el archivo con lo que llevo avanzado hasta el momento para que me hagan el favor de verificar cuál es el problema o dónde es que estoy teniendo el fallo en la programación. De antemano muchas gracias por su ayuda. Plan IVA SAT 2017.xlsm
  13. Prueba el adjunto y nos comentas. Te he agregado 2 botones, uno para generar los recibos, y el otro para ver y ocultar la hoja base. Esto para que no tengas a la vista hojas innecesarias. Recuerda dar por solucionado el tema si te ha sido de utilidad CALCULO UILIDADES.xlsm
  14. Te comento, los formularios tienen propiedades, estas son donde le puedes cambiar nombre al formulario, ponerle un color de fondo, etc., etc., etc., una de esas propiedades dice "ShowModal", y por defecto viene en True, lo que debes hacer es cambiarle para que diga false. La instrucción correcta para que te minimice la ventana es la siguiente: Application.WindowState = xlMinimized Sino, pues sube tu archivo y con gusto te lo modifico para que haga "lo que tu quieras".
  15. Revisa este adjunto. Minimizar y ShowModal.xlsm