Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los formularios en VBA no son ms que un cuadro de dilogo de Excel donde podremos colocar controles que nos ayudarn a solicitar informacin del usuario. Podremos colocar cajas de texto, etiquetas, cuadros combinados, botones de comando, etc.
Inmediatamente se mostrar un formulario en blanco y de igual manera podrs observar el Cuadro de herramientas:
Si no ves el Cuadro de herramientas puedes seleccionar el men Ver y la opcin Cuadro de herramientas.
El texto de las etiquetas se modifica en la propiedad llamada Caption. Para realizar este cambio solamente selecciona el control y se mostrar la ventana de Propiedades donde podrs hacer la modificacin. De igual manera el texto desplegado en los botones de comando se modifica en su propiedad Caption.
Para agregar este cdigo puedes hacer doble clic sobre el control. La sentencia Unload Me cerrar el formulario.
Al pulsar el botn Aceptar se transferirn los valores de los controles TextBox hacia las celdas de la Hoja1.
Para facilitar la apertura del formulario puedes colocar un botn ActiveX en la hoja con el siguiente cdigo:
Private Sub CommandButton1_Click() UserForm1.Show End Sub
Probar el formulario
Observa cmo cada uno de los botones realiza la accin correcta al pulsarlos:
Es conocido que en el actual mercado laboral uno de los softwares contables ms utilizados es el CONCAR de la empresa Real System. Por ello, este primer ejemplo estar relacionado a este software.
Ms adelante en este mismo blog publicare conexiones al SAP, Siscont, Starsoft, etc. Todo en ello fines didcticos y en base a la experiencia acumulada en las diferentes empresas en donde he laborado. Obviamente estas empresas cuentan con las licencias originales correspondientes y el cdigo de programacin expuesto en este blog es creacin particular de quien suscribe.
Para quienes tienen experiencia utilizando CONCAR saben que los reportes que genera en formato Excel contiene los datos columnados pero muchas veces con espacios adicionales, por ejemplo: Si el nmero de la cuenta de caja chica chica es "10201" el reporte en excel muestra "10201 ".
Para quienes desean analizar cuentas, efectuar consistencias antes de declaraciones de impuestos o revisar los reportes antes de presentarlos, tratar de cruzar los datos usando frmulas de bsqueda, tablas dinmicas, etc; y llegar al formato correcto, puede significar un tiempo adicional.
Adems para generar el libro Mayor de 2 ms empresas y/o para generar reportes de 2 ms periodos es necesario abrir 2 ms instancias (Ventanas) del CONCAR.
Por otro lado, el CONCAR muestra el plan de cuentas sin los saldos, es decir cuentas con movimientos y sin movimientos, resulta ms til para el usuario mostrar slo las cuentas que tienen registros y luego proceder a generar el libro Mayor.
Tambin es conocido si Ud. cuenta con la versin DBase del CONCAR primero tiene que Consolidar, tal vez primero haya tenido que Reindexar, etc.
Pues con cuatro Controles Active X y una conexin SQL puede obtener los movimientos de cuenta bien columnados sin la necesidad de formatear, reindexar, consolidar, abrir varias instancias del CONCAR y todo ello En segundos!
1.
Ejecuta Excel e inserta un libro vacio, guarda el archivo con el nombre MAYOR (Aplicacin) [Si trabajas con Excel 2007 o superior debes de guardar el archivo como Libro de Excel habilitado para Macros]
2.
3.
Digita los encabezados desde las celda A8 hasta la celda O8, tal como se muestra en la siguiente figura:
4.
Desde la ficha Programador (para la versin Excel 2007 o superior) o desde la barra de herramientas Cuadro de Controles (para la versin Excel 2003 o inferior) inserta 3 cuadros combinados y 1 botn de comando en la hoja de clculo MAYOR
5.
Selecciona el 1er. cuadro combinado, Presiona el botn derecho del mouse, Seleccione Propiedades, Cambie el valor de la propiedad (Name) ComboBox1 por cbo_Empresa
6.
Selecciona el 2do. cuadro combinado, Presiona el botn derecho del mouse, Selecciona Propiedades, Cambia el valor de la propiedad (Name) ComboBox2 por cbo_Ao
7.
Selecciona el 3er. cuadro combinado, Presiona el botn derecho del mouse, Selecciona Propiedades, Cambia el valor de la propiedad (Name) ComboBox3 por cbo_Cta
8.
Seleccione el botn de comando, Presiona el botn derecho del mouse, Selecciona Propiedades, Cambia el valor de la propiedad (Name) CommandButton1 por cmd_Mayor y el valor de la propiedad Caption CommandButton1 por EJECUTAR
9.
10.
11.
12. Presiona Doble Click sobre ThisWorkbook (Este libro), asegrese de presionar doble click sobre el objeto ThisWorkbook del libro MAYOR (Aplicacin) [Cada libro de Excel contiene un objeto ThisWorkbook]. Copia el siguiente cdigo y pegalo en el mdulo que acaba de abrir al presionar doble click sobre ThisWorkbook:
Private Sub Workbook_Open() Sheets("MAYOR").cbo_Empresa.Clear Sheets("MAYOR").cbo_Ao.Clear Sheets("MAYOR").cbo_Cta.Clear Sheets("MAYOR").cbo_Empresa Sheets("MAYOR").cbo_Ao Sheets("MAYOR").cbo_Cta = "" Set con = CreateObject("adodb.connection") Set rs = CreateObject("adodb.recordset") con.Open "Provider=Microsoft.Jet.OLEDB.4.0; Source=C:\Concar80;Extended Properties = dBase 5.0;" Data
= =
"" ""
rs.Open "SELECT CT_CIA, CT_NOMBRE FROM CTCIAS ORDER BY CT_CIA", con Do While Not rs.EOF Sheets("MAYOR").cbo_Empresa.AddItem Right(rs![CT_CIA].Value, 2) & " " & rs![CT_NOMBRE].Value rs.MoveNext Loop
13.
Presiona Doble Click sobre Hoja1 (MAYOR). Copia el siguiente cdigo y pegalo en el mdulo que acaba de abrir al presionar doble click sobre Sheet1 (MAYOR):
Private Sub cbo_Empresa_Change() If Sheets("MAYOR").cbo_Empresa <> "" Then Sheets("MAYOR").cbo_Ao.Clear Dim Archivo As String Archivo = Dir("C:\Concar80\CCO*.dbf") Do Until Archivo = "" If Left(Archivo, 5) = "CCO" & Left(Sheets("MAYOR").cbo_Empresa, 2)Then Sheets("MAYOR").cbo_Ao.AddItem Left(Right(Archivo, 6), 2) End If
Private Sub cbo_Ao_Change() If Sheets("MAYOR").cbo_Ao <> "" Then Sheets("MAYOR").cbo_Cta.Clear Set con = CreateObject("adodb.connection") Set rs = CreateObject("adodb.recordset") con.Open "Provider=Microsoft.Jet.OLEDB.4.0; Source=C:\Concar80;Extended Properties = dBase 5.0;" Data
rs.Open "SELECT CT_FILE FROM CTCIAS WHERE CT_NOMBRE = '" & Right(Sheets("MAYOR").cbo_Empresa, Len(Sheets("MAYOR").cbo_Empresa) - 3) & "'", con Plan_de_Cuentas = Right(rs![CT_FILE], 2) rs.Close Correlativo = Sheets("MAYOR").cbo_Ao Left(Sheets("MAYOR").cbo_Empresa, 2) &
rs.Open "SELECT DCUENTA, CPL" & Plan_de_Cuentas & ".PDESCRI, SUM(IIF(CCD" & Correlativo & ".DDH='D',CCD" & Correlativo & ".DMNIMPOR,-CCD" & Correlativo & ".DMNIMPOR)) AS 'SALDO MN', SUM(IIF(CCD" & Correlativo & ".DDH='D',CCD" & Correlativo & ".DUSIMPOR,-CCD" & Correlativo & ".DUSIMPOR)) AS 'SALDO US' FROM CCD" & Correlativo & ", CPL" & Plan_de_Cuentas & " WHERE DSUBDIA <> '99' AND CCD" & Correlativo & ".DCUENTA = CPL" & Plan_de_Cuentas & ".PCUENTA GROUP BY DCUENTA, CPL" & Plan_de_Cuentas & ".PDESCRI", con Do While Not rs.EOF Soles = Format(rs!['SALDO MN'].Value, "#,##0.00") Dolares = Format(rs!['SALDO US'].Value, "#,##0.00") Sheets("MAYOR").cbo_Cta.AddItem rs![DCUENTA].Value rs![PDESCRI].Value & " S/. " & Soles & " US$ " & Dolares rs.MoveNext Loop Set rs = Nothing & " " &
Private Sub cmd_Mayor_Click() If Sheets("MAYOR").cbo_Empresa <> "" And Sheets("MAYOR").cbo_Ao "" And Sheets("MAYOR").cbo_Cta <> "" Then Range("A9:IV65536").ClearContents If ActiveSheet.AutoFilterMode = True Then Range("A4").AutoFilter End If Set con = CreateObject("adodb.connection") Set rs = CreateObject("adodb.recordset") con.Open "Provider=Microsoft.Jet.OLEDB.4.0; Source=C:\Concar80;Extended Properties = dBase 5.0;" Data <>
rs.Open "SELECT CT_FILE FROM CTCIAS WHERE CT_NOMBRE = '" & Right(Sheets("MAYOR").cbo_Empresa, Len(Sheets("MAYOR").cbo_Empresa) - 3) & "'", con Plan_de_Cuentas = Right(rs![CT_FILE], 2) rs.Close Correlativo = Sheets("MAYOR").cbo_Ao Left(Sheets("MAYOR").cbo_Empresa, 2) &
rs.Open "SELECT DSUBDIA, DCOMPRO, DSECUE, DFECCOM2, DCUENTA, CPL" & Plan_de_Cuentas & ".PDESCRI, DCODANE, DCENCOS, DCODMON, DTIPDOC, DNUMDOC, DXGLOSA, IIF(CCD" & Correlativo & ".DDH='D',CCD" & Correlativo & ".DMNIMPOR,-CCD" & Correlativo & ".DMNIMPOR) AS 'SALDO MN', IIF(CCD" & Correlativo & ".DDH='D',CCD" & Correlativo & ".DUSIMPOR,-CCD" & Correlativo & ".DUSIMPOR) AS 'SALDO US', (YEAR(CCD" & Correlativo & ".DFECCOM2) & '-' & FORMAT(MONTH(CCD" & Correlativo & ".DFECCOM2),'00')) AS 'PERIODO' FROM CCD" & Correlativo & ", CPL" & Plan_de_Cuentas & " WHERE CCD" & Correlativo & ".DCUENTA = CPL" & Plan_de_Cuentas & ".PCUENTA AND DCUENTA = '" & Left(Sheets("MAYOR").cbo_Cta, Application.WorksheetFunction.Search(" ", Sheets("MAYOR").cbo_Cta) - 1) & "'", con Range("A9").CopyFromRecordset rs Set rs = Nothing
Set con = Nothing Cells.Columns.AutoFit Range("F1").ColumnWidth = 28 Range("A9").Select Else MsgBox "Complete los datos y Ejecute", vbInformation End If End Sub
14.
Importante: Desde el Editor de Visual Basic presiona Ctrl + H y reemplaza la ruta C:\Concar80 por la ubicacin de tu sistema contable (Por ejemplo W:\Concar80\REAL), en todo el Proyecto actual, algo similar a la siguiente figura:
15.
16.
17.
Cierre el libro y vuelva a abrirlo para probar su funcionamiento Si Ud. procedi con orden en todos los pasos anteriores y logro funcionar correctamente el aplicativo: FELICITACIONES! Eres ordenado! Sin embargo para quienes nunca han visto el editor de Visual Basic o han grabado una macro en su vida, esto puede parecer demasiado abrumador. La idea es que sigas los pasos mecnicamente para luego interesarte en el manejo de base de datos y la programacin aplicada al entorno contable.
Hasta aqu, y de golpe! Has podido conocer lo potente que resultaba Excel y el Editor de Visual Basic. Has interactuado con mdulos, el explorador de proyectos, Controles Active X, copiado y pegado sentencias que utilizan Manejadores de Eventos, Declaracin de variables Dim, Estructuras: If End If, Bucles o Ciclos: Do Until Loop y Do While Not Loop, Funcin Dir, programacin sobre la biblioteca de objetos de Excel, Conexiones ADO y para colmo Consultas SQL. Si te ha resultado interesante, deseas desarrollarte es este campo y adquirir una ventaja competitiva frente a tus colegas, te recomiendo participes del curso de Excel Avanzado, Macros y VBA que dictan varias Universidades e Institutos del pas. Asimismo, la lectura de bibliografa relacionada como por ejemplo: Microsoft Excel Visual Basic para Aplicaciones Paso a Paso de Reed Jacobson Microsoft Press. La siguiente entrada del blog tratar de exponer un aplicativo para: Calcular Detracciones Imprimir la constancia de clculo Migrar de manera masiva los lotes de detracciones hacia el portal web de SUNAT Luego de pagar las detracciones, registrarlas masivamente hacia el sistema contable Ello en concordancia con las normas tributarias, poltica contable, evitando errores en el clculo, minimizando costos (El pago de la detraccin individual es de S/. 3.50 por cada una) (El pago por n detracciones, a travs del pago masivo, es de S/. 10.50) y mejorando el proceso de registro contable: Sin errores y ms rpido!
Hola necesito intertar filas automaticamente en excel despues de terminar de rellenar una primera columna,no quisiera perder los enlaces a las demas hojas libro mayor y balance de sumas y saldo y plan general contable. el archivo no lo pude subir porque es de 258kb o algo asi. pero bueno intento explicarlo.el formato del libro diario es de la siguiente manera. n asiento...fecha....grupo...subgrupo...subcuenta.....concepto....debe....haber 1...............13-5....... 4....... 43.............430.............clientes.....300 2................14-5...... 4........40.............400.............proveedor.............300 ahora explico: -n de asiento es automatico donde a1 =1 y a2 = 1+a1 y asi sucesivamente para que se pongan automaticamente -subcuenta es el numero que pongo y luego automaticamente se rellena grupo,subgrupo y concepto(estan enlazadas con la hoja plan general contable) -luego debe y haber tambien los pongo yo - al final del todo hay un total de deb y total del haber que se utiliza para saber si el libro diario esta bien pues si el total del debe = al total del haber significa que esta bien. con lo cual las unicas celdas que no estan protegidas serian fecha,subcuenta,debe y haber bien pues me gustaria que al terminar de rellenar la primera fila automaticamente se inserte una para seguir rellenando datos de tal manera que guarde las formulas,asi solo usaria filas que necesite y teniendo en cuenta que hay veces que solo se rellenara la fila hasta el debe y otras veces hasta el haber