0% encontró este documento útil (1 voto)
831 vistas18 páginas

VBA Excel

El documento describe 8 módulos de una guía de Visual Basic para Excel. El Módulo 1 detalla métodos para seleccionar celdas, rangos, filas y columnas, incluyendo seleccionar celdas individuales, rangos, celdas relacionadas a otras y ampliar selecciones. El Módulo 2 cubre copiar, borrar y rellenar celdas. El Módulo 3 trata sobre formato de texto, colores y mostrar u ocultar celdas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
831 vistas18 páginas

VBA Excel

El documento describe 8 módulos de una guía de Visual Basic para Excel. El Módulo 1 detalla métodos para seleccionar celdas, rangos, filas y columnas, incluyendo seleccionar celdas individuales, rangos, celdas relacionadas a otras y ampliar selecciones. El Módulo 2 cubre copiar, borrar y rellenar celdas. El Módulo 3 trata sobre formato de texto, colores y mostrar u ocultar celdas.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 18

En esta guía de Visual Basic para Excel se encontrarán los siguientes temas, clasificados por módulos

Módulo 1: Edición: Seleccionar celdas, rangos, filas, columnas, rangos.

Selecciona una celda


Seleccionar una columna
Seleccionar rangos discontinuos
Seleccionar una celda del valor de una variable
Seleccionar un rango indicado por variables
Seleccionar Columnas, Filas y Celdas independientes
Seleccionar Celdas en relación a otra
Seleccionar y Ampliar un Rango
Seleccionar: combina celdas
Seleccionar: rango de celda activa
Seleccionar: desde hacia abajo
Seleccionar un rango hacia la derecha
Seleccionar un rango hacia la izquierda
Seleccionar un rango hacia arriba
Seleccionar la última celda con datos
Seleccionar la última celda con datos y guarda el número
Seleccionar una celda e indica su posición relativa y absoluta
Seleccionar una hoja, previa a la activa
Seleccionar una hoja, posterior a la activa

Módulo 2: Edición: Copiar, Borrar, Rellenar

Copiar: dada una condición


Borrar: una celda
Borra: una fila
Rellenar celdas
Rellenar en varias hojas

Módulo 3: Formato: Mayúscula - Minúscula - Colores - Mostrar - Ocultar - Nombre

Formato: negrita, cursiva, subrayado, color, alineación


Formato de minúscula a mayúscula
Formato de mayúscula a minúscula
Colores: colorear las celdas de un rango según su valor
Colores: recorre un rango coloreando las celdas según su valor
Colores: Oculta fila con color determinado
Mostrar: columna
Hoja: dar nombre a las hojas

Módulo 4: Insertar: Nombre, Columna, Fila, Comentario

Comentario: Insertar un comentario


Nombre: insertar nombre a la hoja
Nombre: insertar nombre a mas de una hoja
Insertar una columna
Insertar un nombre a una celda

Módulo 5: Datos: Convertir, Ordenar, Comparar

Convertir: números a letras


Ordenar: ordenar datos de un rango por una columna
Comparar: 2 columnas ordenadas ( de distintas hojas)
Comparar: 2 columnas, copiar en otro destino solo registros únicos

Módulo 6: Herramientas: Proteger

Proteger y desproteger: una hoja y copiar los datos en otra

Módulo 7: Archivo: Imprimir, Abrir, Cerrar, Grabar

Imprimir: Hoja activa


Imprimir: seleccionar área de impresión
Imprimir: configurar impresión
Abrir: Libro
Cerrar: cerrar libro sin guardar
Cerrar: cerrar libro y guardar
Guardar: Libro y desactiva alarma de aviso
Seleccionar Celdas en relación a otra
Activa las opciones de alerta

Módulo 8: Objetos: InputBox, MsgBox

InputBox y MsgBox: Ingresar datos y tener resspuesta


Mensaje: estructura simple
Mensaje: con avisos de opciones
Mensaje: Redondeo de valores dentro del mensaje
Botones: barra de herramientas
1.- Edición rango = ("B2" & ":E" & variable)
Range(rango).Select 'selecciona el rango B2:E hasta la fila
indicada en la variable
Módulo 1: Edición: Seleccionar celdas, rangos, End Sub

filas, columnas, rangos.


Seleccionar Columnas, Filas y Celdas independientes

Selecciona una celda


Sub selecciono06()
Range("A:A, D:F").Select 'selecciona las columnas A, D, E y F
Sub selecciono01() End Sub
Range("B7").Select 'selecciona la celda B7 Sub selecciono061()
End Sub Range("2:2, 4:7").Select 'selecciona las filas 2 y desde 4 hasta la
7.
Seleccionar una columna End Sub
Sub selecciono07()
Sheets(1).Range("A1").Offset(2, 3).Select 'selecciona la celda D3
End Sub
Sub selecciono02()
Range("B:B").Select 'selecciona toda la columna B
End Sub Seleccionar Celdas en relación a otra

Seleccionar rangos discontinuos


Sub selecciono08()
Range("D3").Select
ActiveCell.Offset(-2, 1).Select 'selecciona la celda que se
Sub selecciono03() encuentra 2 filas por encima
Range("A4:A10, D10, B5:B20").Select 'selecciona rangos 'y 1 columna a la derecha de la celda activa (=D3)
discontinuos End Sub
End Sub
Seleccionar y Ampliar un Rango
Seleccionar una celda del valor de una variable

Sub selecciono09()
Sub selecciono04() 'ampliar el rango de selección
Dim variable As Integer Range("A1:B5").Select
variable = 5 Selection.Resize(10, 4).Select '(en total serán 10 filas, 4
Range("A" & variable).Select 'selecciona la celda cuya fila será el columnas)
valor de la variable 'el resultado será A1:D10
End Sub End Sub

Seleccionar un rango indicado por variables Seleccionar: combina celdas

Sub selecciono05() Sub selecciono10()


variable = 5 'combina celdas seleccionadas
Range("B1:E1").Select
Selection.Merge
Seleccionar la última celda con datos
End Sub

Seleccionar: rango de celda activa


Seleccionar la última celda con datos y guarda el número

Sub selecciono11()
Sub selecciono17()
'selecciona la región o rango de la celda activa
Dim filalibre As Integer
Range("B2").CurrentRegion.Select
ActiveWorkbook.Sheets(1).Activate 'selecciona la Hoja 1
End Sub
Range("A1").Select
'el control se hará sobre la columna A, a partir de la fila
Seleccionar: desde hacia abajo While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'si la celda contiene datos, pasa a la fila siguiente
Wend
Sub selecciono12()
filalibre = ActiveCell.Row
Range("A2", Range("A2").End(xlDown)).Select 'seleciona desde
'guarda en la variable filalibre el número de la primer fila sin
A2 hacia abajo
datos.
End Sub
'muestra el valor en celda "B2"
Range("B2") = filalibre
Seleccionar un rango hacia la derecha End Sub

Seleccionar la última celda con datos y guarda el nro.


Sub selecciono13()
Range("A2", Range("A2").End(xlToRight)).Select 'selecciona
desde A2 hacia la derecha
Sub selecciono118()
End Sub
Dim filalibre As Integer
Worksheets("Hoja1").Select
Seleccionar un rango hacia la izquierda filalibre = Range("A1").End(xlDown).Offset(1, 0).Row
'la variable filalibre guarda el nro. de la primer celda vacía.
'muestra el valor en celda "B2"
Sub selecciono14() Range("B2") = filalibre
Range("C2", Range("C2").End(xlToLeft)).Select 'selecciona desde End Sub
C2 hacia la izquierda
End Sub Seleccionar la última celda con datos y guarda el nro.

Seleccionar un rango hacia arriba


Sub ActualizaHoja()
'Buscar la última celda con datos, en una columna
Sub selecciono15() Sheets(1).Select
Range("A15", Range("A15").End(xlUp)).Select 'selecciona desde 'selecciona la Hoja 1
A15 hacia arriba Range("A2").Select
End Sub 'el control se hará sobre la columna A, a partir de la fila
While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Select
'si la celda contiene datos, pasa a la fila siguiente
Seleccionar una hoja, posterior a la activa
Wend
fila1 = ActiveCell.Row
'guarda en la variable fila1 el número de la primer fila sin datos.
End Sub Sub seleccion2()
Sheets("Hoja2").Activate
ActiveSheet.Next.Select 'hoja posterior a la activa
Seleccionar: la última celda con datos
End Sub

<< atras Tabla de contenidos ade


Sub buscaultima()
'Buscar la última celda con datos, en una columna
Sheets("Hoja3").Select
If Range("A2").Value <> "" Then
filalibre = Range("A1").End(xlDown).Offset(1, 0).Row + 1
Else
filalibre = 2
End If
'la variable filalibre guarda el nro. de la primer celda vacía.
End Sub

Seleccionar una celda e indica su posición relativa y absoluta

Sub guardadirecc()
Dim lugar1 As String, lugar2 As String
Range("B3").Select
lugar1 = ActiveCell.Address
'guarda la referencia absoluta
lugar2 = ActiveCell.Address(False, False)
'guarda la referencia relativa
'devuelve en C3 las 2 direcciones concatenadas
Range("C3").Value = lugar1 & "-" & lugar2
End Sub

Seleccionar una hoja, previa a la activa

Sub seleccion1()
Sheets("Hoja2").Select
ActiveSheet.Previous.Select 'hoja anterior a la activa
Range("A2") = ActiveSheet.Name 'nombre de la hoja
Range("A3") = ActiveSheet.Index 'número de hoja
End Sub
Módulo 2: Edición: Copiar, Borrar, Range("C2").Select
Selection.ClearContents
Rellenar End Sub

Copiar: dada una condición Borra: una fila

Sub Copiando() Sub eliminando()


'copia los registros de la hoja Hoja2 cuyo mes = 'elimina las filas seleccionadas
celda A1 de la Hoja3 Selection.EntireRow.Delete
Dim nromes As Integer, mes As Integer End Sub
Dim filadestino As Integer
Dim dato As String
'la variable nromes indica el mes de los registros Rellenar celdas
a copiar
nromes = Sheets("Hoja3").Range("A1").Value
'variable que indica a partir de qué fila se copiará Sub llenando_celdas()
filadestino = 2 Dim valor As String
'busca registros cuya fecha tiene por mes el valor Dim celdita As Range
de la variable nromes For Each celdita In ActiveSheet.Range("A10:B13")
Sheets("Hoja2").Activate valor = InputBox("Ingrese valor: ")
Range("A1").Select celdita.Value = valor
While ActiveCell.Value <> "" Next celdita
dato = ActiveCell.Value End Sub
'obtiene el número de mes del campo fecha
mes = Month(dato) Rellenar en varias hojas
If mes = nromes Then
Selection.EntireRow.Copy
ActiveSheet.Paste
Sub llenando_hojas()
Destination:=Worksheets(3).Cells(filadestino, 1)
Dim hoja As Worksheet
filadestino = filadestino + 1
For Each hoja In Sheets
End If
hoja.Range("E13").Value = Date
ActiveCell.Offset(1, 0).Select
hoja.Range("F13").Value = Time
Wend
Next hoja
Application.CutCopyMode = False
End Sub
End Sub

Borrar: una celda

Sub borrando()
'borra el contenido de las celdas selecciondas
Módulo 3: Formato: Mayúscula - Minúscula - Colores - Sub menorAmayor()
'Pasar de minúsculas a mayúsculas
Mostrar - Ocultar - Nombre Set rango = Range("a1:a3")
For Each Cell In rango
Formato a las celdas del rango seleccionado Cell.Value = UCase(Cell.Value)
(negrita, cursiva, subrayado, color, alineación) Next
End Sub

Sub formato() Formato de mayúscula a minúscula


'dando formato a las celdas del rango seleccionado
Range("A1:D10").Select
With Selection Sub mayorAmenor()
Font.Bold = True Dim cell As Range
'formato negrita Dim rango As Object
Font.Italic = True 'convierte texto en minúsculas
'formato cursiva Set rango = Selection
Font.Underline = xlUnderlineStyleSingle For Each cell In rango
'subrayado simple cell.Value = LCase(cell.Value)
Font.Color = RGB(255, 0, 0) Next
'color de fuente (para estos valores será rojo) End Sub
HorizontalAlignment = xlCenter
'alineación central (Right=derecha, Left=izquierda)
End With Formato de mayúscula a minúscula
End Sub

Sub mayorAmenor()
Formato de minúscula a mayúscula 'Pasar de mayúsculas a minúsculas
Set rango = Range("a1:a3")
For Each Cell In rango
Cell.Value = LCase(Cell.Value)
Sub menorAmayor() Next
Dim cell As Range End Sub
Dim rango As Object
'convierte texto en mayúsculas
Set rango = Selection Colores: colorear las celdas de un rango según su valor
For Each cell In rango
cell.Value = UCase(cell.Value)
Next Sub colores1()
End Sub Dim fila1 As Integer, fila2 As Integer
Dim col1 As Integer, col2 As Integer
Formato de minúscula a mayúscula Dim fila As Integer, columna As Integer
'recorre el rango A1:E20 de la hoja activa coloreando las celdas según su
valor
fila1 = 1 Case 2000 To 2999
fila2 = 20 Cells(fila, columna).Font.ColorIndex = 7 'fucsia
col1 = 1 Case Else
col2 = 5 Cells(fila, columna).Font.ColorIndex = 6 'amarillo
For fila = fila1 To fila2 End Select
For columna = col1 To col2 Next columna
If Cells(fila, columna).Value < 1000 Then Next fila
Cells(fila, columna).Font.ColorIndex = 5 'azul End Sub
Else
If Cells(fila, columna).Value < 1500 Then Colores: Oculta fila con color determinado
Cells(fila, columna).Font.ColorIndex = 3 'rojo
Else
Cells(fila, columna).Font.ColorIndex = 9 'marrón
Sub OcultaPorColor()
End If
End If
'recorre la col A de la hoja activa, si encuentra celda con color de fuente
Next columna
automática oculta la fila
Next fila
Range("A3").Select
End Sub
While ActiveCell.Value <> ""
If ActiveCell.Font.ColorIndex = xlColorIndexAutomatic Then
Colores: recorre un rango coloreando las celdas según su valor ActiveCell.EntireRow.Hidden = True
End If
ActiveCell.Offset(1, 0).Select
Sub colores2() Wend
Dim fila1 As Integer, fila2 As Integer 'para ocultar filas con color de fuente rojo será:
Dim col1 As Integer, col2 As Integer 'If ActiveCell.Font.ColorIndex = 3 Then
Dim fila As Integer, columna As Integer, valor As Integer 'buscar la lista de colores en la Ayuda
'recorre el rango A1:E20 de la hoja activa coloreando las celdas según su End Sub
valor
fila1 = 4 Mostrar: columna
fila2 = 20
col1 = 1
col2 = 5
Sub MuestraTodas()
For fila = fila1 To fila2
'muestra filas ocultas de la hoja Colores
For columna = col1 To col2
Application.ScreenUpdating = False
valor = Cells(fila, columna).Value
'Desactive la actualización de la pantalla para acelerar el código de la
Select Case valor
macro
Case Is < 1000
Sheets("Hoja1").Select
Cells(fila, columna).Font.ColorIndex = 5 'azul
Rows("2:1000").Select
Case 1000 To 1499
Selection.EntireRow.Hidden = False
Cells(fila, columna).Font.ColorIndex = 3 'rojo
Range("C3").Select
Case 1500 To 1999
Application.ScreenUpdating = True
Cells(fila, columna).Font.ColorIndex = 9 'marrón
'Recuerde que debe volver a establecer la propiedad ScreenUpdating como
True cuando finalice la macro.
End Sub

Hoja: dar nombre a las hojas

Sub nombre_hoja()
Dim MiNombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja")
hoja.Name = MiNombre
Next hoja
End Sub
Módulo 4: Insertar: Nombre, Columna, Fila, Selection.EntireColumn.Insert
End Sub
Comentario
Insertar un nombre a una celda
Comentario: Insertar un comentario

Sub nominar()
Sub comentarios() Worksheets("BALANCE").Range("e3").Name = "AC"
Range("B2").Select 'previamente inserte un comentario en la celda "B2" Worksheets("BALANCE").Range("e19").Name = "PC"
ActiveCell.Offset(0, 1).Value = ActiveCell.Comment.Text Worksheets("BALANCE").Range("e4").Name = "AC_Disponibilides"
'copia el comentario de la celda activa en la celda que Worksheets("BALANCE").Range("e5").Name = "AC_Inversiones"
'se encuentra en la columna siguiente. Worksheets("BALANCE").Range("e7").Name = "AC_Cred_Ventas"
End Sub Worksheets("METODO").Range("C14").Name = "r_1"
End Sub
Nombre: insertar nombre a la hoja

Sub nombre_hoja()
Dim MiNombre As String
MiNombre = InputBox("Ingrese nombre de hoja")
ActiveSheet.Name = MiNombre
End Sub

Nombre: insertar nombre a mas de una hoja

Sub nombres_hojas()
Dim MiNombre As String
Dim hoja As Worksheet
For Each hoja In Worksheets
MiNombre = InputBox("Ingrese nombre de hoja")
hoja.Name = MiNombre
Next hoja
End Sub

Insertar una columna

Sub insertando()
'inserta una columna por delante de la selección
Módulo 5: Datos: Convertir, Ordenar, Comparar digito = "cinco"
Case 6
digito = "seis"
Convertir: Número a Letras
Case 7
digito = "siete"
Case 8
Son dos macros del tipo function, para ejecutarlas se debe convocar a la digito = "ocho"
función clasificada en definida por el usuario y seleccionar np [=np(cell)]. Case 9
digito = "nueve"
Case 0
digito = "cero"
Public Function np(R As Single) As String End Select
Dim d1 As String
Dim d2 As String End Function
Dim i, k As Integer
Dim R2, dif As Single Convertir: Número a Letras (función)
R2 = R * 10
dif = R2 - Fix(R2)
If dif >= 0.5 Then R2 = R2 + 1 Son dos macros del tipo function
R = Fix(R2) / 10
d1 = Format$(R, "0.0")
Option Explicit
i = Val(Left$(d1, 1))
'Argumentos:
k = Val(Right$(d1, 1))
'Numero = Valor que deseamos convertir en texto
d1 = digito(i)
'Moneda = es el nombre de la moneda a mostrar
d2 = digito(k)
'Fraccion_Letras = Verdadero para que la fraccion de la moneda
np = d1 + " coma " + d2
' tambien la convierta a letras
End Function
'Fraccion = Es el nombre de la fraccion de la moneda
'Texto_Inicial = Cualquier texto que quieras al principio del resultado
'Texto_Final = Cualquier texto que quieras al finla del resultado
'Estilo = Formato de salida
' 1 = MAYUSCULAS
Function digito(ByVal j As Integer) As String ' 2 = minusculas
Select Case j ' 3 = Tipo Titulo
Case 1 'Los valores negativos los convierte a positivos
digito = "uno" 'El valor minimo en 0, el valor maximo es 9,999,999,999,999.99
Case 2
digito = "dos" Public Function Numeros_Letras(ByVal Numero As Double, _
Case 3 ByVal Moneda As String, _
digito = "tres" Optional Fraccion_Letras As Boolean = False, _
Case 4 Optional Fraccion As String = "", _
digito = "cuatro" Optional Texto_Inicial As String = "", _
Case 5 Optional Texto_Final As String = "", _
Optional Estilo As Integer = 1) As String End Select
Dim strLetras As String
Dim NumTmp As String Numeros_Letras = strLetras
Dim intFraccion As Integer
End Function
strLetras = Texto_Inicial
'Convertimos a positivo si es negativo Public Function NumLet(ByVal Numero As Double) As String
Numero = Abs(Numero) Dim NumTmp As String
NumTmp = Format(Numero, "000000000000000.00") Dim co1 As Integer
If Numero < 1 Then Dim co2 As Integer
strLetras = strLetras & "cero " & Plural(Moneda) & " " Dim pos As Integer
Else Dim dig As Integer
strLetras = strLetras & NumLet(Val(Left(NumTmp, 15))) Dim cen As Integer
If Val(NumTmp) = 1 Or Val(NumTmp) < 2 Then Dim dec As Integer
strLetras = strLetras & Moneda & " " Dim uni As Integer
ElseIf Val(Mid(NumTmp, 4, 12)) = 0 Or Val(Mid(NumTmp, 10, 6)) = 0 Then Dim letra1 As String
strLetras = strLetras & "de " & Plural(Moneda) & " " Dim letra2 As String
Else Dim letra3 As String
strLetras = strLetras & Plural(Moneda) & " " Dim Leyenda As String
End If Dim TFNumero As String
End If
If Fraccion_Letras Then NumTmp = Format(Numero, "000000000000000") 'Le da un formato fijo
intFraccion = Val(Right(NumTmp, 2)) co1 = 1
Select Case intFraccion pos = 1
Case 0 TFNumero = ""
strLetras = strLetras & "con cero " & Plural(Fraccion) 'Para extraer tres digitos cada vez
Case 1 Do While co1 <= 5
strLetras = strLetras & "con un " & Fraccion co2 = 1
Case Else Do While co2 <= 3
strLetras = strLetras & "con " & NumLet(Val(Right(NumTmp, 2))) & 'Extrae un digito cada vez de izquierda a derecha
Plural(Fraccion) dig = Val(Mid(NumTmp, pos, 1))
End Select Select Case co2
Else Case 1: cen = dig
strLetras = strLetras & Right(NumTmp, 2) Case 2: dec = dig
End If Case 3: uni = dig
strLetras = strLetras & Texto_Final End Select
Select Case Estilo co2 = co2 + 1
Case 1 pos = pos + 1
strLetras = StrConv(strLetras, vbUpperCase) Loop
Case 2 letra3 = Centena(uni, dec, cen)
strLetras = StrConv(strLetras, vbLowerCase) letra2 = Decena(uni, dec)
Case 3 letra1 = Unidad(uni, dec)
strLetras = StrConv(strLetras, vbProperCase)
Select Case co1 ByVal cen As Integer) As String
Case 1 Dim cTexto As String
If cen + dec + uni = 1 Then
Leyenda = "billon " Select Case cen
ElseIf cen + dec + uni > 1 Then Case 1
Leyenda = "billones " If dec + uni = 0 Then
End If cTexto = "cien "
Case 2 Else
If cen + dec + uni >= 1 And Val(Mid(NumTmp, 7, 3)) = 0 Then cTexto = "ciento "
Leyenda = "mil millones " End If
ElseIf cen + dec + uni >= 1 Then Case 2: cTexto = "doscientos "
Leyenda = "mil " Case 3: cTexto = "trescientos "
End If Case 4: cTexto = "cuatrocientos "
Case 3 Case 5: cTexto = "quinientos "
If cen + dec = 0 And uni = 1 Then Case 6: cTexto = "seiscientos "
Leyenda = "millon " Case 7: cTexto = "setecientos "
ElseIf cen > 0 Or dec > 0 Or uni > 1 Then Case 8: cTexto = "ochocientos "
Leyenda = "millones " Case 9: cTexto = "novecientos "
End If Case Else: cTexto = ""
Case 4 End Select
If cen + dec + uni >= 1 Then Centena = cTexto
Leyenda = "mil "
End If End Function
Case 5
If cen + dec + uni >= 1 Then Private Function Decena(ByVal uni As Integer, ByVal dec As Integer) As
Leyenda = "" String
End If Dim cTexto As String
End Select
Select Case dec
co1 = co1 + 1 Case 1:
TFNumero = TFNumero + letra3 + letra2 + letra1 + Leyenda Select Case uni
Case 0: cTexto = "diez "
Leyenda = "" Case 1: cTexto = "once "
letra1 = "" Case 2: cTexto = "doce "
letra2 = "" Case 3: cTexto = "trece "
letra3 = "" Case 4: cTexto = "catorce "
Loop Case 5: cTexto = "quince "
Case 6 To 9: cTexto = "dieci"
NumLet = TFNumero End Select
Case 2:
End Function If uni = 0 Then
cTexto = "veinte "
Private Function Centena(ByVal uni As Integer, ByVal dec As Integer, _ ElseIf uni > 0 Then
cTexto = "veinti" Private Function Plural(ByVal Palabra As String) As String
End If Dim pos As Integer
Case 3: cTexto = "treinta " Dim strPal As String
Case 4: cTexto = "cuarenta " If Len(Trim(Palabra)) > 0 Then
Case 5: cTexto = "cincuenta " pos = InStr(1, "aeiou", Right(Palabra, 1), vbTextCompare)
Case 6: cTexto = "sesenta " If pos > 0 Then
Case 7: cTexto = "setenta " strPal = Palabra & "s"
Case 8: cTexto = "ochenta " Else
Case 9: cTexto = "noventa " strPal = Palabra & "es"
Case Else: cTexto = "" End If
End Select End If
Plural = strPal
If uni > 0 And dec > 2 Then cTexto = cTexto + "y "
End Function
Decena = cTexto ver archivo adjunto: numeros_a_letras.xls

End Function Ordenar: ordenar datos de un rango por una columna

Private Function Unidad(ByVal uni As Integer, ByVal dec As Integer) As


String
Sub Ordenando()
Dim cTexto As String
'ordena la hoja Orden por la col A en forma ascendente teniendo la
primera fila como encabezado
If dec <> 1 Then
Sheets("Hoja1").Range("A1").Select
Select Case uni
Selection.Sort key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
Case 1: cTexto = "un "
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Case 2: cTexto = "dos "
End Sub
Case 3: cTexto = "tres "
Case 4: cTexto = "cuatro "
Case 5: cTexto = "cinco " Comparar: 2 columnas ordenadas ( de distintas hojas)
End Select
End If
Select Case uni Sub comparando()
Case 6: cTexto = "seis " ‘Si las celdas coinciden se copia toda la fila en una tercer hoja.
Case 7: cTexto = "siete " copiada = 2
Case 8: cTexto = "ocho " Sheets("Hoja1").Range("A2").Select
Case 9: cTexto = "nueve " final = Range("A2").End(xlDown).Row
End Select For fila = 2 To final
'compara la col 1 de la hoja1 y la col 2 de la hoja 2
Unidad = cTexto If Cells(fila, 1) = ActiveSheet.Next.Cells(fila, 2).Value Then
ActiveCell.EntireRow.Copy Destination:=Sheets("Hoja3").Cells(copiada, 1)
End Function ActiveSheet.Next.Cells(fila, 1).EntireRow.Copy
Destination:=Sheets("Hoja3")._
'Funcion que convierte al plural el argumento pasado Cells(copiada + 1, 1)
'quitar si no se copia lo de la hoja2 fila3 = fila3 + 1
copiada = copiada + 2 fila2 = fila2 + 1
'más 1 si no se copia lo de la hoja 2 Cells(fila2, 2).Select
End If Wend
ActiveCell.Offset(1, 0).Select End Sub
Next
End Sub
Módulo 6: Herramientas: Proteger
Comparar: 2 columnas, copiar en otro destino solo registros únicos
Proteger y desproteger: una hoja y copiar los datos en otra

Sub comparando()
Sub copiandoYprotegiendo()
‘Cada columna debe estar ordenada de menor a mayor
'protege la hoja
Dim fila1 As Integer, fila2 As Integer, fila3 As Integer
ActiveSheet.Protect "contraseña"
'compara a partir de la fila2, las columnas 1 y 2 de una misma hoja
'copia el contenido del rango en la hoja siguiente, en rango D1
fila1 = 2
Range("A2:A3").Select
fila2 = 2
Selection.Copy 'previamente se habrá seleccionado algo
fila3 = 2
ActiveSheet.Paste Destination:=ActiveSheet.Next.Cells(1, 4)
Range("A2").Select
Application.CutCopyMode = False
While Cells(fila1, 1).Value <> ""
'desprotege la hoja para poder ocultar una columna
'compara las col 1 y 2, copiando en la 4
ActiveSheet.Unprotect "contraseña"
If Cells(fila1, 1).Value = Cells(fila2, 2).Value Then
'oculta la col 1 de la hoja activa
fila1 = fila1 + 1
ActiveCell.EntireColumn.Hidden = True
fila2 = fila2 + 1
End Sub
Cells(fila1, 1).Select
Else
If Cells(fila1, 1).Value < Cells(fila2, 2).Value Or Cells(fila2, 2).Value = "" Then
Cells(fila1, 1).Copy Destination:=Cells(fila3, 4)
fila3 = fila3 + 1
fila1 = fila1 + 1
Cells(fila1, 1).Select
Else
If Cells(fila2, 2).Value <> "" Then
Cells(fila2, 2).Copy Destination:=Cells(fila3, 4)
fila3 = fila3 + 1
fila2 = fila2 + 1
End If
End If
End If
Wend
While Cells(fila2, 2).Value <> ""
Cells(fila2, 2).Copy Destination:=Cells(fila3, 4)
Módulo 7: Archivo: Imprimir, Abrir, Cerrar, Grabar End With
End Sub
Imprimir: Hoja activa
Abrir: Libro

Sub imprimiendo()
'vista previa de la hoja activa Sub AbriendoLibros()
ActiveSheet.PrintPreview 'oculta la ejecución de los siguientes pasos de la macro
'imprime la hoja activa Application.ScreenUpdating = False
ActiveSheet.PrintOut Copies:=1, Collate:=True 'abre un segundo librolibro (ajustar la ruta)
End Sub Application.Workbooks.Open "C:\Mis documentos\Libro2.xls"
'activa el segundo libro
Workbooks("Libro2.xls").Worksheets("Hoja2").Activate
Imprimir: seleccionar área de impresión 'abriendo un libro y deshabilitando la actualización de vínculos
'Workbooks.Open Filename:="C:\Mis documentos\Vinculado.xls",
UpdateLinks:=0
Sub AreaImpresion() 'se vuelve al estado normal de ejecución
Dim primera, ultima As Variant Application.ScreenUpdating = True
Range("A1").Select End Sub
If ActiveCell.Value = "" Then
Selection.End(xlToRight).Select Cerrar: cerrar libro sin guardar
End If
primera = ActiveCell.Address
ActiveCell.SpecialCells(xlLastCell).Select
ultima = ActiveCell.Address Sub CerrandoLibros_1()
ActiveSheet.PageSetup.PrintArea = (primera & ":" & ultima) 'cierra el libro sin guardar los cambios
End Sub Workbooks("Libro2.xls").Close False
End Sub
Imprimir: configurar impresión
Cerrar: cerrar libro y guardar

Sub Configurando()
With ActiveSheet.PageSetup Sub CerrandoLibros_2()
'para el encabezado 'guarda y cierra el libro activo
LeftHeader = "Nombre Empresa" 'ingresar un texto ActiveWorkbook.Save
CenterHeader = "&T" 'Time u hora ActiveWorkbook.Close
RightHeader = "&D" 'Date o fecha End Sub
'para el pie de página
LeftFooter = "&A" 'nombre de hoja Guardar: Libro y desactiva alarma de aviso
CenterFooter = "&F" 'File o nombre de libro
RightFooter = "&P" 'Page o número de página
Sub GuardandoLibros()
'oculta mensajes de alerta, ejecutando la opción predeterminada
Application.DisplayAlerts = False
'guardando el segundo libro
Workbooks("Libro2.xls").SaveAs Filename:="C:\Mis
documentos\Libro2.xls", FileFormat:=xlNormal, Password:="clave",
ReadOnlyRecommended:=False
'omitiendo algunas opciones
Workbooks("Vinculado.xls").SaveAs Filename:="C:\Mis
documentos\Vinculado.xls"
'cerrando un libro guardado
Workbooks("Vinculado.xls").Close
'guardando el libro activo con nombre = valor de celda
ActiveWorkbook.SaveAs Filename:=Range("A2").Value
End Sub

Seleccionar Celdas en relación a otra

Sub selecciono08()
Range("D3").Select
ActiveCell.Offset(-2, 1).Select 'selecciona la celda que se encuentra 2 filas
por encima
'y 1 columna a la derecha de la celda activa (=D3)
End Sub

Activa las opciones de alerta

Sub avisos()
'volver al estado normal la ejecución de los mensajes de alerta
Application.DisplayAlerts = True
End Sub
Módulo 8: Objetos: InputBox, MsgBox Sub redondeado()
Dim Fraccion As Single
Fraccion = 3.8
InputBox y MsgBox: Ingresar datos y tener resspuesta MsgBox "El número redondeado es: " & CInt(Fraccion), vbOKOnly,
"Ejemplo"
End Sub
Sub Main()
Dim strNombre As String Botones: barra de herramientas
Dim strApellido As String
Dim strMsg As String
strNombre = InputBox("Ingrese su nombre:", "Datos Personales")
strApellido = InputBox("Ingrese su nombre:", "Datos Personales") Sub Herramientas()
strMsg = "Bienvenido " & strNombre & " " & strApellido Dim EnMenu As CommandBar
MsgBox strMsg Dim miboton As CommandBarButton
End Sub Dim micontrol As CommandBarControl
'estas son para los botones de la barra de herramientas o Standard
Set EnMenu = Application.CommandBars("Standard")
Mensaje: estructura simple For Each miboton In EnMenu.Controls
On Error Resume Next
'para conocer los números de cada botón
Sub mensaje() MsgBox miboton.Caption & " - " & miboton.ID 'esto es para saber el
MsgBox "Texto del mensaje", vbOKOnly + vbInformation, "Titulo del número de control
Mensaje" 'If miboton.ID = 3 Then miboton.Enabled = False 'inhabilita el botón de
End Sub Guardar
'volverla a True antes de cerrar el libro
Mensaje: con avisos de opciones Next
Set EnMenu = Nothing
'estas son para las opciones del menú Edición
Set EnMenu = Application.CommandBars("Edit")
Sub pregunta()
For Each micontrol In EnMenu.Controls
intRespuesta = MsgBox("Desea terminar el proceso?", vbYesNo +
On Error Resume Next
vbQuestion, "MsgBox como función")
'para conocer los números de cada opción del menú
If intRespuesta = vbYes Then
MsgBox micontrol.Caption & " - " & micontrol.ID 'esto es para saber el
MsgBox ("guarde previamente la planilla") ' Terminar el proceso
número de control
Else
'If micontrol.ID = 19 Then micontrol.Enabled = false 'inhabilita la opción
MsgBox ("guarde la planilla y luego salga del sistema") ' Continuar con el
Copiar
proceso
'volverla a True antes de cerrar el libro
End If
Next
End Sub
Set EnMenu = Nothing
End Sub
Mensaje: Redondeo de valores dentro del mensaje

También podría gustarte