|
121
|
Programación / Programación Visual Basic / Re: Exportar a EXCEL
|
en: 18 Septiembre 2009, 06:03 am
|
Vuelvo a comentar... Finalmente pude lograrlo. Costó pero con esfuerzo se pudo. Parece que hay que aplicarlo de esta manera: Sheet.Range("A1:J1") .Font.Bold = TrueSheet.Range("A1:J1") .HorizontalAlignment = xlCenterSheet.Range("A1:J1") .Interior.ColorIndex = 33Sheet.Range("A1:J1") .Interior.Pattern = xlSolidPara la parte que sigue después del rango, lo saqué con el código de VBA que obtuve antes. Pero la verdad que es rarísimo, como dije antes, es la primera vez que me pasa que el VB no me ayuda cuando voy escribiendo el código o poniendo el . (punto) para que me aparezca la propiedad a utilizar. Les dejo imágen que como va quedando: Muchas gracias igualmente. Cualquier duda, pregunten si no entendieron como usarla.
|
|
|
122
|
Programación / Programación Visual Basic / Re: Exportar a EXCEL
|
en: 18 Septiembre 2009, 05:50 am
|
Gente, pude poner en negrita. Pero más de eso no pude avanzar. La verdad es rarísimo. No es como los otros componentes que vos agregas y te vas GUIANDO PORQUE EL VB TE VA AYUDANDO A MEDIDA QUE VAS TIPEANDO. En este no te arroja ninguna ayuda y no sabes si lo que escribis está bien o mal :S. La verdad rarísimo. El que sepa poner alguna cosa más me avisa por favor. rivate Sub GridAExcel() Dim Excel As Excel.Application Dim i As Integer, j As Integer Dim Sheet As Object Dim Book As Object Screen.MousePointer = vbHourglass Set Excel = CreateObject("Excel.Application") Set Book = Excel.Workbooks.Add Set Sheet = Book.Worksheets(1) 'INSERTA LOS DATOS DE LA GRILLA EN EL EXCEL With grilla For i = 0 To .Rows - 1 For j = 0 To .Cols - 1 Excel.Cells(i + 1, j + 1) = .TextMatrix(i, j) Next j Next i 'PONE EN NEGRITA Sheet.Range("A1:J1").Font.Bold = True End With Excel.Visible = True Screen.MousePointer = vbDefault End Sub
Saludos!
|
|
|
123
|
Programación / Programación Visual Basic / Re: Exportar a EXCEL
|
en: 18 Septiembre 2009, 00:33 am
|
Sobre esa planilla de excel que tienes, Herramientas > Macros > Grabar nueva macro, y realiza los cambios que quieras, bordes, negrita, colores, etc, y al final termina la grabación. Luego ve al editor de VBA, Herramientas > Macros > Editor de Visual Basic o ALT+F11, en el explorador de proyectos ve al nuevo MÓDULO que se te ha creado, y ya tendrás código de ejemplo bastante acorde a tu caso Saludos Gracias por responder Novlucker. Pero igualmente mucho no me sirvió, hice lo que me dijiste pero había cosas que no encontré. Deben tener otro nombre las propiedades o no sé. El VBA lo que me formó a mi fue: Range("A1:J1").Select Range("J1").Activate Selection.Font.Bold = True With Selection .HorizontalAlignment = xlLeft .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Range("A2:J3").Select Range("J3").Activate With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With Range("A1:J1").Select Range("J1").Activate With Selection.Interior .ColorIndex = 33 .Pattern = xlSolid End With Columns("A:A").ColumnWidth = 4.57 Columns("B:B").ColumnWidth = 15.71 Columns("B:B").ColumnWidth = 18 Columns("C:C").ColumnWidth = 18 Columns("D:D").ColumnWidth = 4.71 Columns("E:E").ColumnWidth = 16.14 Columns("F:F").ColumnWidth = 12.29 Columns("F:F").ColumnWidth = 13 Columns("F:F").ColumnWidth = 13.14 Columns("F:F").ColumnWidth = 13.29 Columns("I:I").ColumnWidth = 12.71 Columns("J:J").ColumnWidth = 23.71 End Sub y cuando quise hacerlo no encontré en el VB HorizontalAlignment, Font bold, entre otras. Así que no sé como puedo hacerlo. Por ahi algo entendi mal, pero no creo. Desde ya muchas gracias!
|
|
|
124
|
Programación / Programación Visual Basic / Exportar a EXCEL
|
en: 17 Septiembre 2009, 22:16 pm
|
Hola gente, encontré un código para poder exportar un Flexgrid a Excel y me funciona perfectamente. El problema es que me gustaría que quede un poco más atractivo con respecto al nombre de las columnas. Busqué propiedades para cambiar el formato y esas cosas pero la verdad no encontré nada. Private Sub GridAExcel() Dim oExcel As Excel.Application Dim i As Integer, j As Integer Screen.MousePointer = vbHourglass Set oExcel = CreateObject("Excel.Application") oExcel.Workbooks.Add With grilla For i = 0 To .Rows - 1 For j = 0 To .Cols - 1 oExcel.Cells(i + 1, j + 1) = .TextMatrix(i, j) Next j Next i End With oExcel.Visible = True Screen.MousePointer = vbDefault End Sub Private Sub Command1_Click() Call GridAExcel End Sub
Ese es el código que uso y así es como me lo exporta a EXCEL y queda horrible. Lo que me gustaría hacer es centrar todo y ponerle negrita y otro fondo a las columnas. Espero que me puedan dar una mano. Muchas gracias!!!
|
|
|
126
|
Programación / Programación Visual Basic / Re: Problema con LOGIN
|
en: 14 Septiembre 2009, 20:00 pm
|
Hola, lo que pasa es que no deberias hacerlo asi como lo haces, lo ideal no seria crear un recordset, abrirlo haciendo "select * from usuarios" y recorrerlo con find y si no lo encuentra...etc. aca te paso un ejemplo de login que es re-facil, consulta la base de datos con un recodset que se usa solo para eso...por ejemplo te creas un recordset en ese form local llamado rsLogin total lo usas en ese form y despues no lo usas mas. aca te paso un ejemplo de login de esa forma: Option Explicit Private rsLogin As ADODB.Rcordset Private Sub Form_Load() Set rsLogin = New ADODB.Recordset End Sub Private Sub cmdlogin_Click() Call Login End Sub Private Sub Login() If txtusuario.Text = "" Then MsgBox "Debe Ingresar un Usuario", 16 txtusuario.SetFocus Exit Sub End If If txtpassword.Text = "" Then MsgBox "Debe Ingresar un Password", 16 txtpassword.SetFocus Exit Sub End If rsLogin.Open "SELECT login,password FROM usuarios WHERE login='" & txtusuario & "'", cn, adOpenKeyset, adLockOptimistic If rsLogin.EOF Then MsgBox "No Existe el Usuario Indicado", vbCritical rsLogin.Close Exit Sub Else If LCase(rsLogin("login")) = LCase(txtusuario) And LCase(rsLogin("password")) = LCase(txtpassword) Then ' si entra aca es porque accedio correctamente Else MsgBox "La Password es incorrecta", vbCritical rsLogin.Close Exit Sub End If End If rsLogin.Close Unload Me frmgym.Show End Sub
obviamente adapta los nombres de los campos a los que tengas en tu base de datos, pero eso debe funcionar bien...si queres despues ponele esos detalles de que si no escribio un usuario o password que ponga el color de los textbox en rojo como lo estas haciendo. saludos. de 10 como siempre. Muchas gracias Seba!!!
|
|
|
127
|
Programación / Programación Visual Basic / Problema con LOGIN
|
en: 14 Septiembre 2009, 05:44 am
|
Gente, acá molestando again . Descubrí que tengo un ERROR con el login. Lo que sucede es lo siguiente: Si yo ingreso de usuario: ADMIN y password ADMIN apenas inicio el programa, loguea perfectamente. Si me equivoco y escribo por ejemplo ADMIN2 que no existe me colorea el textbox a ROJO avisando que nos equivocamos. Pero que pasa, cuando ingresás nuevamente USUARIO: ADMIN, CONTRASEÑA: ADMIN ahí YA NO LO TOMA MÁS. Siempre indica que el usuario no existe... Esto lo había arreglado usando RST.MOVEFIRST, pero me di cuenta que si la grilla (MSFlexGrid) que está en el siguiente formulario está vacía, GENERA ERROR. "El valor de BOF O EOF ES TRUE, O EL ACTUAL REGISTRO SE ELIMINÓ, LA OPERACION SOLICITADA REQUIERE UN REGISTRO ACTUAL." Les dejo el código del LOGIN. Private Sub cmdlogin_Click() '-------------LOGIN DE USUARIO------------- 'Busca en la tabla si existe el usuario. RST.Find "Id ='" & Trim(txtusuario.Text) & "'" 'Si no existe If RST.EOF Then txtusuario.BackColorSelect = &H8080FF txtusuario.SetFocus Else 'Si existe, verifica los passwords y si es correcto nos lleva al formulario Principal If RST!Password = txtpassword.Text Then Unload frmlogin Load frmgym frmgym.Show Else 'Sino, muestra mensaje de error txtpassword.BackColorSelect = &H8080FF txtpassword.SetFocus End If End If 'Vuelve al principio, sino siempre sigue en EOF y nunca vuelve 'a la primera opcion y no loguea más... RST.MoveFirst End Sub Desde ya muchas gracias!
|
|
|
128
|
Programación / Programación Visual Basic / Re: Trabajar con FECHAS
|
en: 12 Septiembre 2009, 04:41 am
|
claro, lo que tenes que evaluar en el IF es si la fecha de hoy (Date) es mayor o igual a la fecha del pago del cliente, si es mayor o igual es porque le toca pagar y sino es porque todavia no llego a la fecha de pago.la fecha de inscripcion practicamente no importa es un dato mas solamente.ahora lo que tenes que hacer (no se si lo hiciste) es hacer una pantallita mas, donde puedas hacerle pagar al cliente (solo a los clientes que tienen que pagar) y asi aumentarle + 1 mes la fecha de pago, en algun lado tambien seria bueno que registres los pagos...en una tabla aparte podes hacerlo y registrar el id cliente, la fecha de pago, y demas datos que quieras, asi te queda un historial de pagos y hasta podes hacerte una pantalla para consultar los pagos de cada cliente.
saludos.
Algo que no comprendo es porque dicen que HAY QUE EVALUARLO CON LA FECHA DE HOY si la fecha de hoy no la requiero :S Como puse en el codigo de arriba, yo lo que hago es: INSCRIPCION PROXIMOPAGO If grilla.TextMatrix(i, 7) >= grilla.TextMatrix(i, 8) Then grilla.CellBackColor = vbRed nunca uso la fecha de hoy como ustedes dicen :S
|
|
|
129
|
Programación / Programación Visual Basic / Re: Trabajar con FECHAS
|
en: 11 Septiembre 2009, 19:41 pm
|
Gente, finalmente un amigo me pudo solucionar el problema que tenía con el codigo de seba Acá se los dejo como me quedó y funciono perfectamente. Dim vFechaPago As String Dim i As Integer Dim vColumna As Integer grilla.Redraw = False For i = 1 To grilla.Rows - 1 For vColumna = 0 To grilla.Cols - 1 grilla.Row = i grilla.Col = vColumna If grilla.TextMatrix(i, 7) >= grilla.TextMatrix(i, 8) Then grilla.CellBackColor = vbRed Else grilla.CellBackColor = vbGreen End If Next vColumna Next i grilla.Redraw = True Les dejo la imágen: MUCHAS GRACIAS SEBA POR TODO!!
|
|
|
130
|
Programación / Programación Visual Basic / Re: Trabajar con FECHAS
|
en: 11 Septiembre 2009, 06:06 am
|
tenes que poner el numero de la columna donde esta la fecha de pago..quedaria algo asi en tu caso es la columna 7. Private Sub ColorearFecha() Dim vFechaPago As String Dim i As Integer Dim vColumna As Integer MSHFlexGrid1.Redraw = False For i = 2 To MSHFlexGrid1.Rows - 1 For vColumna = 0 To MSHFlexGrid1.Cols - 1 MSHFlexGrid1.Row = i MSHFlexGrid1.Col = vColumna vFechaPago = CDate(Format(MSHFlexGrid1.TextMatrix(i, 7), "dd/MM/yyyy")) If Date > CDate(vFechaPago) Then MSHFlexGrid1.CellBackColor = vbRed Else MSHFlexGrid1.CellBackColor = vbGreen End If Next vColumna Next i MSHFlexGrid1.Redraw = True End Sub
proba eso, y fijate que hay algo mal ahi, porque el primer registro tiene la misma fecha de pago que la fecha de inscripcion, y deberia tener 1 mes mas o sea 09/11/2009, cuando das de alta debes guardar en ese campo 1 mes mas.en realidad te tendrian que salir todas en verde porque la fecha de hoy no es mayor a la fecha de 09/10/2009 saludos. Me sigue sin funcionar Seba. O sea lo que vos me dijiste arriba de que algo esta mal por lo del MES yo lo hice así A PROPÓSITO. Modifiqué LA BASE DE DATOS MANUALMENTE para que me muestre uno en ROJO y el resto en VERDE para corroborar el código. Por otro lado probé lo que me dijiste pero no me funcionó. Me ponía todos en VERDE y como dije antes UNO LO MODIFIQUE A PROPÓSITO PARA VERLO EN ROJO pero lo sigue mostrando VERDE. Y una cosa más, de tu código no se para que usas la variable FechadePago y tratás de obtenerla con TextMatrix si yo ya la tengo haciendo RST!ProximoPago. Te dejo el código tuyo, modificado de nuevo: Private Sub ColorearFecha() Dim i As Integer Dim vColumna As Integer grilla.Redraw = False For i = 1 To grilla.Rows - 1 For vColumna = 1 To grilla.Cols - 1 grilla.Row = i grilla.Col = vColumna If RST!inscripcion >= CDate(RST!proximopago) Then grilla.CellBackColor = vbRed Else grilla.CellBackColor = vbGreen End If Next vColumna Next i grilla.Redraw = True End Sub O sea si mirás bien, esta todo tal cual lo pusiste vos, SALVO QUE EN VEZ DE USAR LAS VARIABLES FECHAALTA Y FECHADEPAGO LO SACO DIRECTAMENTE CON RST!INSCRIPCION Y RST!PROXIMOPAGOEspero que haya quedado claro, y desde ya muchas gracias por prestarle atención a esto
|
|
|
|
|
|
|