visual_basic_office:principal
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| visual_basic_office:principal [2023/05/15 12:40] – creado alberto | visual_basic_office:principal [2023/05/17 17:06] (actual) – [Manejo de errores] alberto | ||
|---|---|---|---|
| Línea 26: | Línea 26: | ||
| * ValueType | * ValueType | ||
| - | ===== Flujo de datos ===== | + | ===== Estructuras |
| - | ==== Sentencia | + | ==== Sentencia IF ==== |
| La sentencia //if// se declara de la sigiente manera: | La sentencia //if// se declara de la sigiente manera: | ||
| <code vbnet> | <code vbnet> | ||
| Línea 40: | Línea 40: | ||
| End If | End If | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ==== Sentencia Select Case ==== | ||
| + | Evalúa una expresión una vez y ejecuta diferentes conjuntos de instrucciones en función de diferentes valores posibles: | ||
| + | <code vbnet> | ||
| + | Select Case expresionVerdadera | ||
| + | Case resultadoA: | ||
| + | ... Código ... | ||
| + | case resultadoB To ResultadoN | ||
| + | ... Código ... | ||
| + | case resultadoC | ||
| + | ... Código ... | ||
| + | case Else | ||
| + | ... Código ... | ||
| + | End Select | ||
| + | </ | ||
| + | |||
| + | ==== Sentencia de try Catch Finally ==== | ||
| + | Proporciona un medio para controlar una parte o la totalidad de los posibles errores que pueden producirse en un bloque de código determinado, | ||
| + | Puede tener una estructura bastante compleja, puede verse más información en la [[https:// | ||
| + | Se puede considerar como estructura básica: | ||
| + | <code vbnet> | ||
| + | Try | ||
| + | ... Código que puede producir el error ... | ||
| + | |||
| + | Catch error As tipoError | ||
| + | ... Código | ||
| + | |||
| + | Finally | ||
| + | ... Código que se ejecuta haya ocurrido o no un error ... | ||
| + | |||
| + | End Try | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Bucles ===== | ||
| + | ==== While ==== | ||
| + | Ejecuta una serie de instrucciones siempre y cuando una condición dada sea verdadera: | ||
| + | <code vbnet> | ||
| + | While condicionVerdadera | ||
| + | ... Código ... | ||
| + | End While | ||
| + | </ | ||
| + | |||
| + | Se pueden usar las sentencias '' | ||
| + | ==== Do ==== | ||
| + | Repite un bloque de instrucciones mientras una condición es verdadera con la sentencia '' | ||
| + | <code vbnet> | ||
| + | Do While|Until condicion | ||
| + | ... Código ... | ||
| + | Loop | ||
| + | </ | ||
| + | |||
| + | Al igual que ocurre con While, se pueden usar las sentencias '' | ||
| + | Puede tener una estructura más compleja, revisar la [[https:// | ||
| + | ==== For ==== | ||
| + | Se usa para repetir un conjunto de instrucciones un determinado número de veces. Es posible declarar una variable que lleve la cuenta de las interacciones en el mismo bucle. | ||
| + | <code vbnet> | ||
| + | For v_indice As tipoDato = valorInicial To valorFinal Step OpcionalPaso | ||
| + | ... Código ... | ||
| + | Next | ||
| + | </ | ||
| + | También se pueden usar las sentencias '' | ||
| + | |||
| + | |||
| + | ==== For each ==== | ||
| + | Tipo especial de bucle For, que se usa para repetir un conjunto de instrucciones para cada elemento de una colección o matriz. | ||
| + | <code vbnet> | ||
| + | For each v_indice As tipoDato In matrizOcoleccion | ||
| + | ... Código ... | ||
| + | Next | ||
| + | </ | ||
| + | |||
| + | ===== Estructuras de datos ===== | ||
| + | VBA tiene una gran cantidad de estructuras de datos.\\ | ||
| + | Sólo se comentarán las más usadas para trabajar con documentos Excel o Word. | ||
| + | |||
| + | ==== Matrices ==== | ||
| + | Conjunto de valores, denominados elementos, que se agrupan en forma de tabla y están relacionados conceptualmente entre sí.\\Se pueden usar variables individuales para almacenar cada uno de estos elementos de datos.\\ | ||
| + | Con las matrices se puede hacer referencia a estos valores relacionados usando el mismo nombre, así como utilizar un número denominado índice o subíndice para distinguir un elemento individual en función de su posición dentro de la matriz. Los índices de una matriz van de 0 a uno menos que el número total de elementos de la matriz. \\ | ||
| + | Para trabajar con matrices: | ||
| + | <code vbnet> | ||
| + | ' Diferentes formas de declarar matrices | ||
| + | Dim nombreMatriz (n) As tipoElementos | ||
| + | |||
| + | Dim nombreMatriz (numFilas, numColumnas) As tipoElementos | ||
| + | |||
| + | Dim nombreMatriz = New tipoElementos(, | ||
| + | |||
| + | nombreMatriz (n) = valor ' | ||
| + | |||
| + | </ | ||
| + | |||
| + | Las matrices puede ser declaradas, redimensionadas, | ||
| + | |||
| + | |||
| + | ==== Colecciones ==== | ||
| + | Representa grupo de objetos similar a una matriz, pero en este caso pueden aumentar y reducirse de manera dinámica a medida que cambian las necesidades de la aplicación. Para algunas colecciones, | ||
| + | |||
| + | En VBA se le denomina colecciones a diferentes estructuras de datos similares (colecciones, | ||
| + | |||
| + | Las colecciones son un conjunto ordenado de elementos, accesibles mediante un índice numérico o una clave String. Puede agregar elementos especificando o sin especificar clave. Si agrega un elemento sin clave, debe usar su índice numérico para tener acceso a dicho elemento. __El primer elemento de una colección tiene un índice de 1__. | ||
| + | |||
| + | Las Colecciones son objetos, y por lo tanto hay que declararlas como tal: | ||
| + | <code vbnet> | ||
| + | Dim nombreColeccion As New Collection | ||
| + | </ | ||
| + | |||
| + | Para añadir elementos a la colección, acceder a ellos o recuperarlos: | ||
| + | |||
| + | <code vbnet> | ||
| + | nombreColeccion.Add valorNuevo | ||
| + | nombreColeccion.Add valorNuevo, clave ' | ||
| + | miVariable = nombreColeccion(indice) | ||
| + | miVariable = nombreColeccion(" | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | Más información de Colecciones (generales) en la [[https:// | ||
| + | |||
| + | |||
| + | ==== Diccionarios==== | ||
| + | Son colecciones del tipo Dictionary, muy similares a las colecciones, | ||
| + | Recuperar un valor usando su clave es muy rápido porque la clase Dictionary se implementa como una tabla hash. \\ | ||
| + | Para trabajar con diccionarios, | ||
| + | |||
| + | Más información en la [[https:// | ||
| ===== Excel ===== | ===== Excel ===== | ||
| + | ==== Cheat Sheet ==== | ||
| + | [[https:// | ||
| + | |||
| + | ==== Conceptos generales ==== | ||
| + | Para trabajar con Excel, debemos tener presente que entodo momento debemos saber con qué Celda o conjunto de celdas estamos trabajando, qué celda está activa (seleccionada) y qué hoja está activa (seleccionada).\\ | ||
| + | |||
| + | |||
| + | |||
| ==== Variables ==== | ==== Variables ==== | ||
| En Excel las variables se declaran como se vio en un principio. | En Excel las variables se declaran como se vio en un principio. | ||
| Línea 54: | Línea 190: | ||
| + | ===== Word ===== | ||
| + | ==== Macros en Word ==== | ||
| + | Para manejar datos de un documento Word, primero debemos crear una instancia del documento. | ||
| + | <code vbnet> | ||
| + | Dim doc As Document | ||
| + | Set doc = ActiveDocument | ||
| + | </ | ||
| + | |||
| + | ==== Sentencias útiles ==== | ||
| + | === Extraer el número total de páginas de un documento === | ||
| + | <code vbnet> | ||
| + | Dim doc As Document | ||
| + | Dim totalPaginas As Integer | ||
| + | |||
| + | Set doc = ActiveDocument | ||
| + | totalPaginas = doc.ComputeStatistics(wdStatisticPages) | ||
| + | </ | ||
| + | |||
| + | === Guardar un documento o parte de él en PDF === | ||
| + | <code vbnet> | ||
| + | Dim doc As Document | ||
| + | Dim nombreArchivo As String | ||
| + | Dim ruta As String | ||
| + | Dim totalPaginas As Integer | ||
| + | |||
| + | Set doc = ActiveDocument | ||
| + | |||
| + | nombreArchivo = " | ||
| + | ruta = " | ||
| + | totalPaginas = doc.ComputeStatistics(wdStatisticPages) | ||
| + | |||
| + | ' En este caso se guardarán todas las páginas | ||
| + | doc.ExportAsFixedFormat OutputFilename: | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== Manejo de errores ==== | ||
| + | En ocasiones es necesario evitar que se detenga la ejecución del programa si se detecta un error.\\ | ||
| + | Para ello usamos la sentencia | ||
| + | <code vbnet> | ||
| + | On Error Resume Next | ||
| + | </ | ||
| + | |||
| + | De modo que si se produce un error a continuación, | ||
| + | <code vbnet> | ||
| + | If Err.Number <> 0 Then ' Si es 0 es que no se ha producido error. También podría ponerse "= 'nº error' " | ||
| + | Set ExcelApp = CreateObject(" | ||
| + | End If | ||
| + | </ | ||
| + | |||
| + | Para restablecer el manejo normal de errores, se utiliza la sentencia: | ||
| + | <code vbnet> | ||
| + | On Error GoTo 0 | ||
| + | </ | ||
| + | |||
| + | En el siguiente apartado se puede ver un ejemplo práctico al instanciar en Word elementos Excel. | ||
| + | |||
| + | ==== Trabajar con Excel desde Word ==== | ||
| + | Para trabajar con un Documento Excel desde Word, primero hay que fijar las instancias de los objetos de Excel con la que se va a trabajar. \\ | ||
| + | Si no está abierto Excel, se producirá un error. En el siguiente código evitamos que se detenga la ejecución del programa por este motivo, de modo que si éste ocurre, se cree una nueva instancia. Se volverá a retomar el manejo normal de errores a partir de la sentencia "On Error GoTo 0" | ||
| + | <code vbnet> | ||
| + | Function LeerValorCeldaExcel(ByVal RutaArchivo As String, ByVal NombreHoja As String, ByVal Fila As Integer) As Variant | ||
| + | Dim ExcelApp As Object | ||
| + | Dim ExcelLibro As Object | ||
| + | Dim ExcelHoja As Object | ||
| + | Dim ValorCelda As Variant | ||
| + | | ||
| + | On Error Resume Next | ||
| + | ' Crea una instancia de Excel | ||
| + | Set ExcelApp = GetObject(, " | ||
| + | | ||
| + | ' Si Excel no está abierto, crea una nueva instancia de Excel | ||
| + | If Err.Number <> 0 Then | ||
| + | Set ExcelApp = CreateObject(" | ||
| + | End If | ||
| + | | ||
| + | On Error GoTo 0 | ||
| + | ' Abre el archivo de Excel | ||
| + | Set ExcelLibro = ExcelApp.Workbooks.Open(RutaArchivo) | ||
| + | | ||
| + | ' Selecciona la hoja especificada | ||
| + | Set ExcelHoja = ExcelLibro.Worksheets(NombreHoja) | ||
| + | | ||
| + | ' Lee el valor de la celda en la primera columna y la fila especificada | ||
| + | ValorCelda = ExcelHoja.Cells(Fila, | ||
| + | ' En este caso se lee el valor de una Celda que se va a devolver, pero el programa puede hacer cualquier otra cosa | ||
| + | | ||
| + | ' Cierra el archivo de Excel sin guardar cambios | ||
| + | ExcelLibro.Close False | ||
| + | | ||
| + | ' Libera los objetos de Excel | ||
| + | Set ExcelHoja = Nothing | ||
| + | Set ExcelLibro = Nothing | ||
| + | ExcelApp.Quit | ||
| + | Set ExcelApp = Nothing | ||
| + | | ||
| + | ' Devuelve el valor de la celda | ||
| + | LeerValorCeldaExcel = ValorCelda | ||
| + | End Function | ||
| + | </ | ||
| + | Hay que tener en cuenta que hay que cerrar las instancias abiertas para prevenir problemas de memoria. | ||
visual_basic_office/principal.1684147225.txt.gz · Última modificación: por alberto
