Ayuda vba



Comments



Description

INDICE1. USO DE MSGBOX (para capturar el botón pulsado) 2. CAPTURA SELECCIÓN ACTUAL PARA TRABAJAR CON ELLA en la Macro (21) 3. SOLICITA UNO O VARIOS RANGOS DEL MISMO LIBRO U OTROS LIBROS ABIERTOS Y PROCESAR EL RANGO SELECIONADO [Con Inputbox() ] 4. VERIFICA QUE EL RANGO SELECCIONADO SEA DE LA COLUMNA A 5. PONE UNA FORMULA EN LA CELDA ACTIVA 6. PONE UNA FORMULA A PARTIR DE LA CELDA ACTIVA 5 COLUMNAS A LA DERECHA (SUMA HACIA ARRIBA) 7. SELECCIONA FINAL DE LA CELDA ACTIVA, ABAJO, IZQUIERDA, DERECHA Y ARRIBA 7a. PRIMERA CELDA VACIA EN LA COLUMNA DE DATOS 8. SELECCIONA LA LINEA SIGUIENTE 9. PARA RECORRER UN RANGO ESTABLECIDO POR EL USUARIO A TRAVES DE REFEDIT 10. SELECCIONA UNA CELDA O RANGO DE CELDAS 11. AGREGAR NUEVA HOJA Y ESTABLECE NOMBRE DE LA HOJA 11A. COPIA UNA HOJA Y LA RENOMBRA DE ACUERDO AL DIA DE LA FECHA ACTUAL 12. GRABAR ARCHIVO 13. PONE NOMBRE DE RANGO A CELDA ACTIVA BAJA 5 LINEAS, COLOCA “HOLA”, VUELVE A CELDA “NOMBRE” Y ELIMINA “NOMBRE” 14. SELECCIONAR UNA CELDA EN OTRA HOJA DEL MISMO LIBRO 15. SELECCIONAR HOJA DENTRO DEL LIBRO 16. BORRAR CONTENIDO DE LA CELDA 17. SELECCIONAR TODA LA HOJA 18. ELIMINA COLUMNA, FILA, CELDA 19. INSERTAR COLUMNA, FILA, CELDA 20. ACTIVAR UN ARCHIVO ABIERTO 21. CAPTURA SELECCIÓN ACTUAL PARA TRABAJO EN LA MACRO (2) 22. SELECCIONA UNA CARPETA DE UN LIBRO ABIERTO 23. SELECCIONA UN RANGO 24. INSERTA UNA LINEA SI LA FILA SIGUIENTE CUMPLE LA CONDICION 25. IR AL FINAL DE LA SELECCION Y POSESIONARSE EN LA LINEA SIGUIENTE 26. INSERTA LINEA SI DOS FILAS MAS ABAJO DE CELDA ACTIVA TIENE DATOS 27. INGRESA DATOS DE UN LISTVIEW A LA PLANILLA EXCEL 28. SOLICITA RANGO DE OTRO LIBRO QUE NO SEA EL ACTUAL 29. PARA EVITAR QUE LA RUTINA PARE CUANDO HAY UN ERROR EN TIEMPO 30. AL EJECUTAR LA MACRO QUE INVOLUCRA OTRAS HOJAS DEL LIBRO SE FIJE EN LA PANTALLA A LA VISTA 31. CAPTURA EN LA VARIABLE EL CONTENIDO DEL NOMBRE DE LA CELDA 32. CAPTURA EN LA VARIABLE EL CONTENIDO DEL NOMBRE DE UN RANGO DE CELDAS PARA UTILIZAR EN UN FOR EACH en hoja excel 33. SELECCIONA PRIMERA CELDA EN OTRA UBICACION PARA LLENAR UN COMBO O PROCESO DE DATOS COMPARATIVOS 34. CAPTURA LA SELECCIÓN ACTUAL Y LA TRANSFORMA EN UN RANGO PARA TRABAJAR CELDA A CELDA 35. 'DESPLIEGA TODOS LOS NOMBRES DE LAS HOJAS QUE CONTIENE EL LIBRO 35a. OBTENER EL NOMBRE DE LA HOJA ACTIVA 35b. CAMBIAR NOMBRE DE LA HOJA ACTIVA 36. SUMA COLUMNAS 2 A 9 QUE ESTAN A LA DERECHA DE LA CELDA ACTIVA Y ELIMINA LA LINEA QUE SU SUMA ES CERO 37. REDONDEAR CELDAS 38. FORMATEAR FUENTE 39. LÍNEAS DE DIVISIÓN 40. INDICE DE COLORES 41. CAMBIAR ENTRE ESTILOS A1 / RC 42. SELECCIONAR UNA HOJA DEL LIBRO, PONER UNA FORMULA, DARLE 43. PARA TRABAJAR DIRECTO EN LA HOJA EXCEL 44. Pregunta : ¿Cómo puedo anular el efecto de la pulsación de teclas como el RePag, AvPag, 45. Validacion de la fecha ingresada en un textbox 46. PARA CREAR UN ARCHIVO DE TEXTO, SEPARADO POR TAB 47. CARGAR COMBOS CON INFORMACION Y SELECCION PARALELA 48. CAPTURA EN UNA VARIABLE LA SELECCIÓN DE UN COMBOBOX 49. CAMBIAR FOCO EN UN FORMULARIO 50. CAPTURAR 51. Trabajando con Colecciones 52. Trabajando con Objetos 53. Trabajando con Libros 54. Trabajando con Hojas 54a. TRABAJANDO CON RANGOS 55. MACRO: 56. FUNCIONES DE COMPROBACION 57. Evento OnKey: 58. ARREGLO (ARRAY) 58a COMPARANDO DOS ARREGLOS 1. USO DE MSGBOX (para capturar el botón pulsado) resultado = MsgBox("Hola Mundo", vbAbortRetryIgnore + vbQuestion, "Mensaje especial") Dim N As Integer Dim Msg As Integer Msg = MsgBox("Esta seguro de eliminar caracter 160 al final del texto", vbYesNo) If Msg = 7 Then Exit Sub Else {instrucciones} ‘si la opcion es distinta de 7 NO End if 2. CAPTURA SELECCIÓN ACTUAL PARA TRABAJAR CON ELLA en la Macro Dim MiC As String Dim MiP As Range MiC = ActiveWindow.RangeSelection.Address(False, False) For Each MiP In Range(MiC) {instrucciones} Next 3. SOLICITA UNO O VARIOS RANGOS DEL MISMO LIBRO U OTROS LIBROS ABIERTOS Y PROCESAR EL RANGO SELECIONADO [Con Inputbox() ] Dim MiCelda, MiProc as Range Set MiCelda = Application.InputBox(prompt:=”Ingrese Rango “,Type:=8) For Each MiProc In MiCelda [instrucciones] Next 4. VERIFICA QUE EL RANGO SELECCIONADO SEA DE LA COLUMNA A Dim VeriCol as integer If VeriCol.column <> 1 Then Msgbox “El Rango Seleccionado NO es Valido”, VbCritical Exit Sub End if Select Range(“B2”).Offset(0.Next.Offset(0. ABAJO.Select http://trucosycursos.End(xlDown).Name sheetnom = ActiveSheet.select 9.6 & "]c:r[-1]c)" ActiveCell. 12).FormulaR1C1 = ("=subtotal(9.Row .r7c13:r10000c13)") Pone la formula en la celda activa 6.Nam . 'Hacer referencia a una hoja guardando en una variable el nombre de la hoja activa. 5). DERECHA Y ARRIBA Activecell. previa a la activa y posterior a la activa sheetnom = ActiveSheet.5. AGREGAR NUEVA HOJA Y ESTABLECE NOMBRE DE LA HOJA Dim NuevaHoja as Objeto Set NuevaHoja = Worksheets.Name = “Presupuesto” 11ª. PONE UNA FORMULA EN LA CELDA ACTIVA ActiveCell. PONE UNA FORMULA A PARTIR DE LA CELDA ACTIVA 5 COLUMNAS A LA DERECHA (SUMA HACIA ARRIBA) Dim fila as string fila = "=SUM(r[-" & ActiveCell.end(xldown) Activecell end(xltoleft) Activecell end(xltoright) Activecell end(xlup) 7a.Previous.value) 10. PARA RECORRER UN RANGO ESTABLECIDO POR EL USUARIO A TRAVES DE REFEDIT Dim <variable> As Range Set <variable> = Range(Refedit.FormulaR1C1 = fila 7.offset(1.0). SELECCIONA FINAL DE LA CELDA ACTIVA. IZQUIERDA.Offset(1. SELECCIONA LA LINEA SIGUIENTE Activecell.0).Name sheetnom = ActiveSheet. SELECCIONA UNA CELDA O RANGO DE CELDAS Range(“A1:B3”).Add NuevaHoja. previa a la activa y posterior a la activa Dim sheetnom As String 'Se guarda el nombre de la hoja activa.Activate 11. PRIMERA CELDA VACIA EN LA COLUMNA DE DATOS Range(“A1”).FormulaR1C1 = "=r[-1]c+rc[-2]-rc[-1]" Pone la formula a 12 columnas de la posición actual ActiveCell.es/ir-a-la-ultima-celda-con-datos-o-primera-celda-vacia-en-excel/ 8. COPIA UNA HOJA Y LA RENOMBRA DE ACUERDO AL DIA DE LA FECHA ACTUAL Sheets("molde").Sheets(“nombrehoja”).Name = “Nombre” ActiveCell.Select 16. VUELVE A CELDA “NOMBRE” Y ELIMINA “NOMBRE” ActiveCell.Offset(5. BORRAR CONTENIDO DE LA CELDA Selection.col). SELECCIONAR UNA CELDA EN OTRA HOJA DEL MISMO LIBRO Opcion 1 Application.Entirecolumn.Delete 14.0).Range(“E1”)) Opcion 3 Sheets(“nombrehoja”). FILA.Workbook. COLOCA “HOLA”. ELIMINA COLUMNA.Value = “Hola” Application.Count) ActiveSheet.Delete Selection.ClearContents 17. PONE NOMBRE DE RANGO A CELDA ACTIVA BAJA 5 LINEAS. GRABAR ARCHIVO Active.Cells(fila. CELDA Selection. CELDA Selection.Sheets. SELECCIONAR HOJA DENTRO DEL LIBRO Sheets(“Nombre”).Delete Selection.Cells(fila.Names(“Nombre”).Goto ActiveWorkbook.col) Opcion 2 Application.EntireRow.EntireColumn.Goto (ActiveWorkbook.Copy After:=Sheets(ActiveWorkbook.Activate ActiveCell.Select 15.GotoReference:= “Nombre” ActiveWorkbook. SELECCIONAR TODA LA HOJA Cells.Save 13.Insert . INSERTAR COLUMNA.Sheets(“nombrehoja”). FILA.Delete shift := xlup 19.Activate ActiveSheets.Select 18.11A.Name = Day(Now()) 12. EntireRow.ListItem.Insert 25.EntireRow.Select 26.Activate 24.Insert Selection.Count . SELECCIONA UNA CARPETA DE UN LIBRO ABIERTO Worksheets(“nombre carpeta”).Insert shift := XlDown 20.Offset(0.Selection. CAPTURA SELECCIÓN ACTUAL PARA TRABAJO EN LA MACRO Dim MiC As String Dim MiP As Range Dim Verif As Boolean Dim Cc As Range MiC = ActiveWindow.Offset(0.PatternColorIndex = xlAutomatic If MiP.RangeSelection.Value = "*" Then 'AUX ' c1 = True 'AUX With MiP. IR AL FINAL DE LA SELECCION Y POSESIONARSE EN LA LINEA SIGUIENTE ActiveCell.0).TintAndShade = 0 .Offset(2.Address(False. 1). 2).ColorIndex = 15 'gris End If .Value = "" Then .Activate 23.Pattern = xlSolid .Value Then If Cc.Interior .EntireRow. INGRESA DATOS DE UN LISTVIEW A LA PLANILLA EXCEL Dim a as Integer For a= 1 to [nombre userform]. ACTIVAR UN ARCHIVO ABIERTO Windows (“NombreArchivo”).Offset(0.[nombre listview].End(xlDown). False) For Each MiP In Range(MiC) For Each Cc In Range("cuenta") If Cc.0)<>”” then Selection.Value = MiP.PatternTintAndShade = 0 End With End If End if next next 22.Insert End if 27. INSERTA UNA LINEA SI LA FILA SIGUIENTE CUMPLE LA CONDICION If ActiveCell. SELECCIONA UN RANGO Range(“nombre rango”). INSERTA LINEA SI DOS FILAS MAS ABAJO DE CELDA ACTIVA TIENE DATOS If ActiveCell.Value=”contenido celda” then ActiveCell. 1).Activate 21.Offset(1.Color = 65535 'amarillo Else . Range("nom") 32. CAPTURA EN LA VARIABLE EL CONTENIDO DEL NOMBRE DE LA CELDA Donde “Menu” es el nombre de la hoja y “Nom” es el nombre de la celda Dim Vnom As String Vnom = Worksheets("menu").ListItem(a).6).SubItem(2) Next a (2) corresponde a columna del Listview a traspasar.Value <> " " 'MsgBox Dato1.Worksheets("tarifa").ScreenUpdating = False 31.Workbooks("analisis. Type:=8) 29.ActiveCell.Range("tar") Dato2 = 1 Do While Dato1.InputBox(prompt:="Seleccione un Rango en Hoja Imputacion".Range("nom") <commandos> Next 33. PARA EVITAR QUE LA RUTINA PARE CUANDO HAY UN ERROR EN TIEMPO REAL Despues de Public Sub On Error GoTo Error ‘Despues de Exit Sub Error: End End Sub 30. numero variable 28.Offset(Dato2. 0).Value= [nombre userform]. 0).[nombre listview]. SELECCIONA PRIMERA CELDA EN OTRA UBICACION PARA LLENAR UN COMBO O PROCESO DE DATOS COMPARATIVOS Dim Dato1 as Range Dim Dato 2 as Double Set Dato1 = Application.xlsm").Offset(Dato2. AL EJECUTAR LA MACRO QUE INVOLUCRA OTRAS HOJAS DEL LIBRO SE FIJE EN LA PANTALLA A LA VISTA Application. CAPTURA EN LA VARIABLE EL CONTENIDO DEL NOMBRE DE UN RANGO DE CELDAS PARA UTILIZAR EN UN FOR EACH en hoja excel Donde “Menu” es el nombre de la hoja y “Nom” es el nombre de la celda Dim Rg as Range For Each Rg In Worksheets("menu").Offset(0. SOLICITA RANGO DE OTRO LIBRO QUE NO SEA EL ACTUAL Dim MiCelda1 As Range Set MiCelda1 = Application.Value < commandos > Dato2 = Dato2 + 1 Loop . Name 35b. 0).Name celda = celda + 1 Next Hoja End Sub 35a.Name=”nuevonombre” 36.Value = Rg.Value > 0 Then Rg.EntireRow.Cells(celda. i).Offset(0.Value = Hoja. 1).Value Next i If S = 0 Then Selection.RangeSelection.Address(False. 'DESPLIEGA TODOS LOS NOMBRES DE LAS HOJAS QUE CONTIENE EL LIBRO Sub NombredeHojas() Dim celda As Integer Dim Hoja As Worksheet celda = 1 For Each Hoja In Worksheets Sheets(1). CAMBIAR NOMBRE DE LA HOJA ACTIVA ActiveSheet. CAPTURA LA SELECCIÓN ACTUAL Y LA TRANSFORMA EN UN RANGO PARA TRABAJAR CELDA A CELDA Public Sub PositivoNegativo() Dim Rs As String Dim Rg As Range Rs = ActiveWindow. SUMA COLUMNAS 2 A 9 QUE ESTAN A LA DERECHA DE LA CELDA ACTIVA Y ELIMINA LA LINEA QUE SU SUMA ES CERO Public Sub SumaCero() Dim S As Double Dim i As Integer Do While ActiveCell.34.Value * -1 End If Next End Sub 35. OBTENER EL NOMBRE DE LA HOJA ACTIVA Dim Nom as String Nom= ActiveSheet.Delete Else ActiveCell.Value <> "" S=0 For i = 2 To 9 S = S + ActiveCell.Activate End If Loop End Sub . False) For Each Rg In Range(Rs) If Rg.Offset(1. ReferenceStyle = xlR1C1 42.NumberFormat = "#.Select With Selection.ColorIndex = 44 41. DARLE FORMATO A CELDA ACTIVA Sheets("MatrizAnexo").ReferenceStyle = xlA1Application. REDONDEAR CELDAS 'Redondea el contenido numerico de la celda a cero decimal Dim Rr As Range Dim Ss As Range Dim Zz As Double Set Rr = Selection For Each Ss In Rr Zz = Round(Ss. 0) Ss.0)" Selection.Font .DisplayGridlines = False 40.Interior. PONER UNA FORMULA.37.Value = Zz Ss. PARA TRABAJAR DIRECTO EN LA HOJA EXCEL Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Dim Cc. INDICE DE COLORES ActiveWorkbook.FormulaR1C1 = _ "=ROUND(+R[-19]C[14]/COUNTIF(R[-25]C[14]:R[-20]C[15].NumberFormat = "#.Select ActiveCell. Nro As Double Dim Dir As String Dim Aa As Currency Dim Vv As Boolean 'variable verificador de movimiento . 194) 'verde COLOREAR RANGO Range("A1:B10").Size = 10 End With 39. SELECCIONAR UNA HOJA DEL LIBRO. 235. LÍNEAS DE DIVISIÓN ActiveWindow.##0" 43.Name = "MS Sans Serif" . FORMATEAR FUENTE Cells."">0""). CAMBIAR ENTRE ESTILOS A1 / RC Application.##0" Next Ss 38.Colors(44) = RGB(236. solicite Ayuda [CTROL A]. 0).Column = 1 And Target.Offset(Nro.Offset(-1.Value <> "" And Target.Value Loop If Dir = "" Then MsgBox "Valor ingresado no existe.Range(Mm). ". 0).FormulaR1C1 = "=r[-1]c+rc[-2]-rc[-1]" End If '******************************** 'Para verificar tipo de documento ingresado en la celda Nro = 1 Vv = False Dir = Worksheets("datos").Offset(0...Range("tipodoc"). 0).Row 'numero de fila en celda activa Do While Dir <> "" Mm = Worksheets("datos"). Dim Mm As String 'para distribucion en rendicion Dim Rr As Range 'para distribucion en rendicion en rango Dim C As Range Dim Cant As Long For Each C In Target Cant = Cant + 1 Next If Cant = 1 Then '******************************** ‘INSERTA UNA FORMULA EN LA MISMA LINEA 9 COL HACIA LA DERECHA ‘SI LA COL A Y LA FILA > 6 Y LA CELDA DE LA COL IZQ ES VACIA If Target.Offset(Nro. 0).Value <> "" Then Target.Row Vv = False Do While Dir <> "" If Cc = Dir Then Range("F" & Aa).Address If Cc = Dir Then Range("D" & Aa).Range("tipodoc").Range("tipodoc").Row > 4 Then Nro = 1 Dir = Worksheets("datos").Select ActiveCell.Range("auxiliar").Value Exit Sub End If Nro = Nro + 1 Dir = Worksheets("datos"). 0).Offset(0.Select End If End If '********************************** If Target.Column = 5 And ActiveCell. 2).Row > 6 And Target.Offset(Nro.Value 'contenido en la celda activa Aa = Target.Select .Value Cc = Target. vbCritical Range("C" & Aa).Value Cc = Target. 9).Offset(Nro.Value = Worksheets("datos").Offset(0. 12).Value Aa = Target. Offset(Nro.Range("auxiliar").Value Loop If Vv = True Then Exit Sub Else MsgBox "Valor ingresado no existe.Range("auxiliar").. ".Value Vv = True Exit Do End If Nro = Nro + 1 Dir = Worksheets("datos"). Target.Value = Worksheets("datos").Select End If End If '********************************** End If End Sub ******************************************************************* . 1). 1). 0).Offset(Nro. vbCritical 'Range("C" & Aa).Offset(0.. solicite Ayuda [CTROL A]. ParamArray Keys() As Variant) As Integer Dim Key As Variant For Each Key In Keys If KeyCode = Key Then .   Pregunta : ¿Cómo puedo anular el efecto de la pulsación de teclas como el RePag. que. en detrimento del evento Al presionar una tecla (KeyPress) que sólo detecta las teclas típicas de la escritura como son los caracteres alfanuméricos y los símbolos utilizados en los diferentes idiomas. Funcionará de la misma manera que para un formulario. ' En el caso de querer publicarlo en una página Web. AvPag. La función DeleteKeys tiene los siguientes Argumentos Nombre Descripción KeyCode Requerido. el cual tiene un número de elementos indeterminado. Después deberemos utilizar algún tipo de código para detectar la pulsación de la tecla en el evento Al bajar una tecla (KeyDown) y anularla. Shift As Integer) Call HelpKeys(KeyCode. ' Estás autorizado a utilizarlo dentro de una aplicación ' siempre que esta nota de autor permanezca inalterada. Lista separada por comas de los valores ASCII o las constantes Visual Basic (ver estas constantes en este enlace) de las teclas que se quieren anular. primero debes ir a la ventana de propiedades del formulario y poner la propiedad Tecla de vista previa (KeyPreview) a Sí. En nuestro caso. Afán de Ribera ' Function DeleteKeys(KeyCode As Integer. Este evento detecta prácticamente todas las pulsaciones de teclas. ' por favor. De esta manera. Esta función también puede ser utilizada a través del evento KeyDown de un control. se fuerza a que el formulario sea el primero en detectar la pulsación de cualquier tecla.com ' ' Este código se brinda por cortesía de ' Juan M. de otra manera. podemos llamar a una función genérica que he construído y que servirá para anular cualquier tipo de tecla que le pasemos en su segundo parámetro.  Esc o similares al trabajar con formularios? Respuesta : Si quieres anular la pulsación de alguna tecla al trabajar con formularios. vbKeyPageDown) End Sub Pega esta función en un módulo estandar: '--------------------------------------------------------- ' ' DeleteKeys ' ' Código escrito originalmente por Juan M Afán de Ribera. vbKeyPageUp. El valor de la tecla pulsada y que está recogida en el primer argumento del evento KeyDown. sería el primero en hacerlo. antes de que lo haga el control activo en ese momento. del mismo nombre: KeyCode Keys Opcional. contactar con el autor en ' ' accessvbafaq@ya. Un ejemplo de uso: ' esta llamada a la función DeleteKeys anulará la pulsación de las ' teclas RePag y AvPag en el evento KeyDown de un formulario Private Sub Form_KeyDown(KeyCode As Integer. 44. KeyCode = 0 Exit Function End If Next End Function Constantes de tecla Visual Basic Constante Valor Descripción vbKeyLButton 1 botón izquierdo del ratón vbKeyRButton 2 botón derecho del ratón vbKeyCancel 3 tecla CANCEL vbKeyMButton 4 botón central del ratón vbKeyBack 8 tecla Retroceso vbKeyTab 9 tecla Tabulador vbKeyClear 12 tecla CLEAR vbKeyReturn 13 tecla Enter vbKeyShift 16 tecla Mayúsculas vbKeyControl 17 tecla Ctrl vbKeyMenu 18 tecla Menu vbKeyPause 19 tecla Pausa vbKeyCapital 20 tecla Bloq Mayús vbKeyEscape 27 tecla Esc vbKeySpace 32 tecla Espaciador vbKeyPageUp 33 tecla RePág vbKeyPageDown 34 tecla AvPág vbKeyEnd 35 tecla Fin vbKeyHome 36 tecla Inicio vbKeyLeft 37 tecla Flecha Izquierda . vbKeyUp 38 tecla Flecha Arriba vbKeyRight 39 tecla Flecha Derecha vbKeyDown 40 tecla Flecha Abajo vbKeySelect 41 tecla SELECT vbKeyPrint 42 tecla ImprPant vbKeyExecute 43 tecla EXECUTE vbKeySnapshot 44 tecla SNAPSHOT vbKeyInsert 45 tecla Insertar vbKeyDelete 46 tecla Supr vbKeyHelp 47 tecla HELP vbKey0 48 tecla 0 vbKey1 49 tecla 1 vbKey2 50 tecla 2 vbKey3 51 tecla 3 vbKey4 52 tecla 4 vbKey5 53 tecla 5 vbKey6 54 tecla 6 vbKey7 55 tecla 7 vbKey8 56 tecla 8 vbKey9 57 tecla 9 vbKeyA 65 tecla A vbKeyB 66 tecla B vbKeyC 67 tecla C vbKeyD 68 tecla D . vbKeyE 69 tecla E vbKeyF 70 tecla F vbKeyG 71 tecla G vbKeyH 72 tecla H vbKeyI 73 tecla I vbKeyJ 74 tecla J vbKeyK 75 tecla K vbKeyL 76 tecla L vbKeyM 77 tecla M vbKeyN 78 tecla N vbKeyO 79 tecla O vbKeyP 80 tecla P vbKeyQ 81 tecla Q vbKeyR 82 tecla R vbKeyS 83 tecla S vbKeyT 84 tecla T vbKeyU 85 tecla U vbKeyV 86 tecla V vbKeyW 87 tecla W vbKeyX 88 tecla X vbKeyY 89 tecla Y vbKeyZ 90 tecla Z vbKeyNumpad0 96 tecla 0 del teclado numérico vbKeyNumpad1 97 tecla 1 del teclado numérico . vbKeyNumpad2 98 tecla 2 del teclado numérico vbKeyNumpad3 99 tecla 3 del teclado numérico vbKeyNumpad4 100 tecla 4 del teclado numérico vbKeyNumpad5 101 tecla 5 del teclado numérico vbKeyNumpad6 102 tecla 6 del teclado numérico vbKeyNumpad7 103 tecla 7 del teclado numérico vbKeyNumpad8 104 tecla 8 del teclado numérico vbKeyNumpad9 105 tecla 9 del teclado numérico vbKeyMultiply 106 tecla Símbolo Multiplicación (*) del teclado numérico vbKeyAdd 107 tecla Símbolo Suma (+) del teclado numérico vbKeySeparator 108 tecla Intro del teclado numérico vbKeySubtract 109 tecla Símbolo Resta (-) del teclado numérico vbKeyDecimal 110 tecla Símbolo decimal(.) del teclado numérico vbKeyDivide 111 tecla Símbolo División (/) del teclado numérico vbKeyF1 112 tecla F1 vbKeyF2 113 tecla F2 vbKeyF3 114 tecla F3 vbKeyF4 115 tecla F4 vbKeyF5 116 tecla F5 vbKeyF6 117 tecla F6 vbKeyF7 118 tecla F7 vbKeyF8 119 tecla F8 vbKeyF9 120 tecla F9 vbKeyF10 121 tecla F10 . Crea un formulario con un Text. pero lo mejor y más sencillo -y por lo tanto lo más adecuado. Te podría dar una API que detecta tal hecho. dos combobox. PARA CREAR UN ARCHIVO DE TEXTO.text & vbTab & Text2.es emplear el evento KeyDown. SEPARADO POR TAB Print # Text1. Validacion de la fecha ingresada en un textbox Nombre textbox = TxtFechaComp (o el nombre que se asigno al textbox) If Not IsDate(TxtFechaComp.Text 47.Text = "" 46. hacer que se mueva la imagen o cualquier control es bien sencillito En cada "CASE" adiciona o resta más a la propiedad LEFT o TOP del control en cuestión. Shift As Integer) Select Case KeyCode Case vbKeyUp MsgBox "Tecla arriba" Case vbKeyDown MsgBox "Tecla abajo" Case vbKeyRight MsgBox "Tecla derecha" Case vbKeyLeft MsgBox "Tecla izquierda" End Select End Sub Comom verás se trata de capturar las teclas empleando las constantes que Visual Basic provee. CARGAR COMBOS CON INFORMACION Y SELECCION PARALELA (se necesita un userform. en la planilla exel dos columnas con datos la primera columna con nombre asignado al rango “plan” ) . y codifica lo siguiente: Private Sub Text1_KeyDown(KeyCode As Integer. "Fecha Erronea" TxtFechaComp. un boton comando. ****************************************************************************************************** 45. Una vez capturadas las teclas.Text) Then 'validacion fecha MsgBox "Fecha Incorrecta !!!". vbCritical + vbOKOnly.vbKeyF11 122 tecla F11 vbKeyF12 123 tecla F12 vbKeyF13 124 tecla F13 vbKeyF14 125 tecla F14 vbKeyF15 126 tecla F15 vbKeyF16 127 tecla F16 vbKeyNumlock 144 tecla BloqNum Vamos a ello. AddItem c.list(combo.‘Private Sub <nombrecombo1>_Change() ‘ <nombrecombo2>. Range(rango).Select 'selecciona toda la columna B Range("A4:A10.Select .AddItem c.Value 'Agregamos el nombre de la cuenta ‘Next ‘Set c = Nothing 'Limpiamos el objeto 'c' ‘End Sub 47a LIMPIAR EL COMBOBOX <Nombre del combobox>. D10.ListIndex ‘End Sub ‘Private Sub CmdSalir_Click() ‘ End ‘End Sub ‘Private Sub UserForm_Initialize() ‘'Cargamos los nros de cuentas con sus nombres ‘Dim c As Range ‘For Each c In Range("plan") ‘ <nombrecombo1>.Formas de seleccionar una celda o un rango de celdas: Range("B7").Select 'selecciona rangos discontinuos Range("A" & variable).Clear 47b BLOQUEAR ESCRITURA EN COMBOBOX Usar la propiedad: Style = 2-fmstyleDropDownList 48.listindex) 49.ListIndex = <nombrecombo2>.setfocus 50.Select 'selecciona la celda cuya fila será el valor de la variable Si definimos una variable que contiene la última fila a considerar: rango=("B2:E" & variable) .ListIndex ‘End Sub ‘Private Sub <nombrecombo2>_Change() ‘ <nombrecombo1>.Select 'selecciona la celda B7 Range("B:B"). CAMBIAR FOCO EN UN FORMULARIO <NombreFormulario>. entonces la siguiente instrucción selecciona el rango B2:E hasta la fila indicada en la variable. B5:B20"). CAPTURAR 1.<NombreControl>.Offset(0. 1)..Value 'Agregamos el nro de cuenta ‘ <nombrecombo2>. CAPTURA EN UNA VARIABLE LA SELECCIÓN DE UN COMBOBOX <var> = combo.ListIndex = <nombrecombo1>. Ampliar un rango seleccionado Selection.Resize(10.Select 'selecciona el rango y le aplica los siguientes formatos With Selection . 4 columnas) ' si el rango seleccionado fue A1:B5 ahora será: A1:D10 8.Merge Para quitar la combinación: Unmerge 9. De igual manera puede establecerse el rango de inicio: rango = "B" & ini & ":E" & fini Range(rango).Select Selection.Font.Select *.Asignar Formato a celdas o rangos: Range("B2:D10").Color = RGB(255.Value = ActiveCell.Select 'selecciona 2 filas hacia abajo y 3 col a derecha de A1 = D3 ActiveCell.Copiar un comentario en otra celda: ActiveCell. Left=izquierda) End With 4.Underline=xlUnderlineStyleSingle 'subrayado simple . 4:7"). D.Font.Offset(2.Combinar celdas selecccionadas: Range("B1:E1").Font.Select 'selecciona la celda que se encuentra 10 filas por encima y 1 columna a la derecha de la celda activa.Offset(0.0) 'color de fuente (para estos valores será rojo) . por ej: $E$2 lugar= ActiveCell.Nótese que las variables NO llevan comillas Range("A:A.Address(False. por ej: E2 5. 6-Seleccionar celdas y borrarlas: Range(rango).4). 7.Address 'guarda la referencia absoluta.Font.Select ' (10 filas.Guardar la dirección de una celda en una variable: lugar= ActiveCell.Select 'selecciona las columnas A.Select 'selecciona las filas 2 y desde 4 hasta la 7 Nota: al inicio de la sección Macros se encuentran otras instrucciones de selección 2.1).Italic=True 'formato cursiva . Select 'previamente se asignó a la variable rango una ref Selection.Bold=True 'formato negrita .HorizontalAlignment=xlCenter 'alineación central (Right=derecha. E y F Range("2:2.Seleccionar el rango donde se encuenra la celda activa: .0.Text 'copia el comentario de la celda activa en la celda que se encuentra en la columna siguiente.Seleccionar celdas a cierta distancia de la celda activa: Sheets(1).3). False) 'guarda la referencia relativa.Range("A1").1).Clearcontents borrará el contenido del total de celdas de la hoja activa Utilizando solamente Clear se borrarán formatos también.Comment. 3.ClearContents La expresión Cells.Offset(-10. D:F"). Una colección es un conjunto de objetos del mismo tipo: hojas.Row + 1 'o Range("A65536").Next Ejemplo1: introducir un nombre para cada hoja del libro activo.Range("F3").Range("E3").End(xlDown).Select 11. Esta rutina se coloca en un módulo: Sub nombraHojas() Dim MiNombre As String Dim hoja As Worksheet For Each hoja In Worksheets MiNombre = InputBox("Ingrese nombre de hoja: ") hoja.Select 'selecciona desde D2 hacia la izquierda Range("A20".Value = InputBox("Ingrese valor: ") Next celdita End Sub Ejemplo3: introducir los mismos valores en celdas de todas las hojas (se coloca en un módulo) Sub valoresHoja() Dim hoja as Sheets For Each hoja in Sheets hoja. A continuación algunos ejemplos del bucle: For Each.Select 'selecciona desde A20 hacia arriba En cambio. controles o Shapes. celdas. con: Range("A65536").Select 'selecciona desde A2 hacia la derecha Range("D2"..End(xlup).. Una vez copiada en el Editor. Range("A2"). imágenes.End(xlUp)).Range("A1:B10") celdita. Range("A20"). Trabajando con Colecciones En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con COLECCIONES. Range("A2"). Range("B2").Name = MiNombre Next hoja End Sub Ejemplo2: introducir valores para cada celda de un rango (se coloca en un módulo) Sub colocaValores() Dim celdita as Range For Each celdita in ActiveSheet. en col A: Range("A2").End(xlup).End(xlToRight)).Seleccionar hasta la última celda no vacía: Range("A2".Row + 1 51.Select Nota: Esta instrucción dará error si la celda A3 se encuentra vacía.End(xlToLeft)).Select 10.Value = Time Next hoja End Sub .. para seleccionar solo la última celda con datos será: Range("A2").Value = Date hoja. Para trabajar con una colección se programa un bucle: es decir repetir la misma instrucción para cada elemento de la colección. colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel. Es preferible en ese caso realizar la búsqueda de 'abajo hacia arriba'.CurrentRegion. Allí se encontrarán más explicaciones y ejemplos para esa instrucción.Obtener la primer celda vacía.Select 'seleciona desde A2 hacia abajo Range("A2".End(xlDown).End(xlDown)). Range("D2"). como la del ejemplo. Trabajando con Objetos A continuación algunos ejemplos de cómo llamar a objetos insertados en hoja.Llamando a un Userform. 0). Puede colocarse o no. Ejemplo: Private Sub CommandButton1_Click() UserForm1.Value TextBox2 = Range("C1").Value 4.col) Cells(fila.Value + Range("C2"). col) Sheets("Hoja1"). Listas o Cuadros combinados y también un Userform. los botones que lanzan una acción.Name Next End Sub En este ejemplo se muestra el nombre de cada hoja.Value Notese que en Textbox2 se omitió la expresión 'value' ya que esa es su propiedad predeterminada. Ejemplo: Sub mostrando () UserForm1.Value = "CANCELADO" TextBox2 = Sheets("Hoja3"). 3. 1. como puede ser un botón para guardar o aceptar. opción Ver código y escribir la rutina (ésta se habilita en la hoja donde aparecerá el control). Nota: Estas instrucciones como las del punto 3 y 4. desde un botón: En una hoja de Excel.Volcar datos de un control Textbox y Combobox a la hoja: Estos controles han sido dibujados con la barra 'Cuadro de controles' 'pasar datos de un control Textbox a la celda indicada en Cells(fila. col).Offset(1. a.Value + 1 Wend End Sub 52.Asignar rango a un control Listbox y Combobox: Estos controles han sido dibujados en la hoja con la barra 'Formularios' .Cells(fila.Value = TextBox1.Range("A5"). que previamente se escribió en un módulo en el Editor de Visual Basic.Asignando valores a los Cuadros de texto: Ejemplos de cómo registrar datos en los textbox dibujados en hoja con la barra 'Cuadro de controles'. col). pueden ser colocados con la barra de Formularios o Cuadro de Controles.Value = Combobox1.Value = ActiveCell.Show 'nombre del Userform que se desea mostrar End Sub b. TextBox1.Select While Activecell.Value <> "" ActiveCell. desde la nro 1 a la 5 Ejemplo2: realizar una acción mientras se cumpla una condición (se coloca en un módulo) Sub recorreRango() 'Se recorre la col A a partir de la fila 2 hasta encontrar una celda vacía. clic derecho. Botón del Cuadro de controles: una vez dibujado en la hoja.Value 'pasar el valor de un combo a la fila siguiente de la indicada en Cells(fil. se colocan dentro de alguna rutina general. 'El valor de cada celda se incrementa en 1 Range("A2"). como ser Cuadros de texto. Botón de formulario: se asigna una macro.Show End Sub 2.OTRO TIPO DE BUCLES: Ejemplo1: realizar una acción por cada valor que tome una variable i (se coloca en un módulo) Sub muestraNombre() Dim i as Byte Dim hoja as Worksheet For i=1 to 5 Msgbox WorkSheets(i). Una vez copiada en el Editor.Workbooks.. Hojas y Rangos o celdas. escribir la coma.. FileFormat:=xlNormal.Close False 'o ActiveWorkbook.Shapes("List Box 1").ListFillRange = "$K$1:$K$7" End With * Otra manera de asignar rango.xls".Select With Selection . Password:="clave".xls".SaveAs Filename:="C:\Mis doc\Libro1. La variable 'libro2' contiene el nombre y la extensión) Workbooks.Shapes("Drop Down 1"). como en este ej: ruta = ThisWorkbook.Activate .Open "C:\.Cargar datos a un control ListBox de un UserForm: Private Sub UserForm_Activate() Dim item As Variant For Each item In Range("F1:F6") ListBox1.xls es el 2do libro abierto 3-Cerrar un libro (sin guardar): Workbooks("Libro1.Close 'o en 1 sola línea: ActiveWorkBook.AddItem item.Select With Selection . 'asignar rango de entrada al control Lista ActiveSheet. Nota: Al inicio de esta sección Macros hemos visto las distintas maneras de hacer referencia a Libros.Value Next item End Sub 53. Si se omiten.. Allí se encontrarán más explicaciones y ejemplos para cada instrucción.xls").ListFillRange = "$F$1:$F$4" End With 'asignar rango de entrada al control Combobox ActiveSheet.xlsb" Si el nombre se encuentra en una varible NO lleva comillas (aquí se abre un libro que se encuentra en la misma carpeta que el libro activo.xls").xlsb" ' o también: Application.SaveAs Filename:="C:\Mis doc\Libro.Save ActiveWorkbook.Open ThisWorkBook.ListBox1. colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel...Close True 5-Guardar un libro con otro nombre: ActiveWorkbook.Path & "\" & libro2 2-Activar un segundo libro: Workbooks("Libro2.Activate 'o también: Workbooks(2). ReadOnlyRecommended:=False *. en este caso Libro2. Trabajando con Libros En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con LIBROS. ReadOnlyRecommended:=False Estas son algunas de las opciones.Close False 4-Cerrar un libro (guardando los cambios): ActiveWorkbook.\Libro1. En este caso el control se dibujó con la barra ActiveX o Cuadro de Controles: ActiveSheet. A partir de aquí usaré solo el objeto activo considerando que puede usarse algunas de las otras expresiones 1-Abrir un segundo libro: Workbooks.ListFillRange = "$F$1:$F$4" 5..Open "C:\Mis docu\Libro1. como en el siguiente ejemplo: ActiveWorkbook.La carpeta y el nombre del libro pueden guardarse en variables.Path & "\" . Capturar en una variable el nombre del archivo activo <variable string> = activeworkbook.Select 'hoja posterior a la activa 2-Datos de la hoja: ActiveSheet.Value 7-No mostrar aviso al salir.SaveAs Filename:=Range("A2"). Una vez copiada en el Editor. 'o quizás: ruta = "C:\" libro = "LibroCopia.DisplayAlerts= False 'volverla a True al finalizar la macro WorkBooks.Name 'nombre de la hoja ActiveSheet.xlsm" ActiveWorkbook. colocar el cursor sobre la palabra en negrita y presionar F1 para acceder a la Ayuda Excel.EntireRow.ScreenUpdating = False 'volverla a True al finalizar la macro 10-Ejecutar una macro al abrir un libro: Insertar un módulo y allí escribir una rutina: Ejemplo: Sub Nuevamacro () 'instrucciones. 1-Seleccionar la hoja anterior o siguiente: ActiveSheet.Open Filename:= "C:\Mis docu\pruebas.Index 'número de hoja 3-Copiar datos de una hoja a la siguiente: Selection.xls".Hidden= True 'col 5-Proteger o desproteger una hoja: ActiveSheet.Range("B2") 4.Paste Destination:=ActiveSheet.SaveAs ruta & libro 6-Guardar un libro cuyo nombre será el valor de una celda: ActiveWorkbook.Hidden=True ' filas ActiveCell.Protect "contraseña" 'proteger con contraseña ActiveSheet. Allí se encontrarán más explicaciones y ejemplos para esa instrucción.EntireColumn.Previous.Copy 'previamente se habrá seleccionado algo ActiveSheet.name 54.Select 'hoja anterior a la activa ActiveSheet.Ocultar filas o columnas: ActiveCell.Next. Trabajando con Hojas En esta sección aparecerán algunas de las instrucciones 'básicas' para utilizar con HOJAS.DisplayAlerts= False 'volverla a True al finalizar la macro 8-Deshabilitar la opción de actualizar vínculos al abrir un libro: Application.Next. al eliminar hoja. o cualquier aviso que queremos omitir: Application.Unprotect "contraseña" 'quitar la protección 6-Insertar filas o columnas a partir de cierta ubicación: 'reemplazar i por el nro de columna . UpdateLinks:= 0 9-No mostrar la ejecución de la macro (movimiento de pantalla): Application. por ej: MsgBox "Bienvenid@" End Sub Y agregar esta otra en el objeto ThisWorkbook: Private Sub Workbook_Open () Nuevamacro 'o también puede llamarse utilizando la expresión Call 'Call Nuevamacro End Sub 11. Delete 9-Insertar una imagen en una hoja: ActiveSheet.Count 54a. Collate:=True 'o ActiveSheet.Column End Sub 8-Eliminar filas o columnas: ActiveSheet. por ej: "C:\Mis docu\Foto1.Cells(7. Como casi siempre hay más de una forma de programar un evento.Select 'Hacer referencia a la hoja de la pestaña anterior a la activa ActiveSheet.Insert(ruta). previa a la activa y posterior a la activa Dim sheetnom As String 'Se guarda el nombre de la hoja activa.Next.Select 'Hacer referencia a la hoja de la pestaña posterior a la activa ActiveSheet. Esta página intenta ser una guía no solo para el que se inicia en el tema VBA sino también para aquellos que. ActiveSheet.SelectedSheet. Quiere decir que puedo utilizar cualquiera de las 2.Previous.xlsm").col) y queremos hacer referencia a la celda AB5 por ej. previa a la activa y posterior a la activa sheetnom = ActiveSheet.EntireRow. con varios ejemplos en cada una. hasta macros más desarrolladas. Para eso podemos solicitarla en un mensaje con: Sub nrocol() Msgbox Range("AB1"). desde un repaso por las instrucciones básicas.Sheets("Sheet1"). podrán observar que a veces se escribe una línea O la otra. TRABAJANDO CON RANGOS 'Hacer referencia a todas las hojas del libro activo ActiveWorkbook.Name .Row(n).Column(i). necesitamos conocer cuál es el nro de columna.jpg" 10-Imprimir la hoja seleccionada: ActiveWindow.Select 'Hacer referencia a una celda de otro libro Application.com/a/clk/2mhvGX 'Hacer referencia a la hoja2 Sheets("Hoja2"). Los temas se encuentran separados en categorías.Name sheetnom = ActiveSheet.Select Selection.Previous.payoneer-affiliates.Select 'Hacer referencia a la hoja que se encuentra en la posición 2 sin importar el nombre Sheets(2). no recuerdan tal o cual instrucción o buscan ampliar sus conocimientos con otros ejemplos. conociendo el tema.PrintOut Copies:=1. (¡Nunca las 2 juntas!) Los temas están divididos en 2 grupos principales: Conceptos e Instrucciones básicas (ver índice de contenidos en margen izquierdo) 11 –Pasar a una variable la cantidad de hojas en el libro activo Dim <Variable> as Integer <variable> = Sheets.Select 'reemplazar n por el nro de fila Selection.Sheets.EntireColumn.Select 'la ruta va entre comillas.Select http://share. 6) 'Hacer referencia a una hoja guardando en una variable el nombre de la hoja activa.Pictures.PrintOut Reemplazar PrintOut por PrintPreview para realizar solo una vista preliminar. 7-Conocer el nro de columna de cierta referencia: Cuando utilizamos la expresión: Cells(fila.Goto Workbooks("Libro1.Insert 'reemplazar Column por Row en caso de filas. Font. 3).Select Cells(8.A6.Cells(8.End(xlDown)) Set b = Range("E1". b).sheetnom = ActiveSheet.F3:H3.Index 'Selecciona la celda b8 de la hoja 1 Sheets("hoja1").End(xlDown)) Union(a.Select 'Seleccionar todas las columnas desde la columna A hasta la columna C Range("A:C").Select 'Seleccionar dos más columnas de columnas no contiguas de longitud variable Set a = Range("A1".Next.Select 'Seleccionar la unión de dos o más rangos especificados.Select 'Seleccionar un rango mayor al anteriormente seleccionado. previa a la actual y siguiente Dim sheetnumb As Byte sheetnumb = ActiveSheet.Index sheetnumb = ActiveSheet. 4). el rango se amplía a 10 filas. a6.Resize(10. Range("F6: H12")). similar a seleccionar y tener apretado tecla ctrl Application.Next.Select 'Selecciona el rango continuo c2 a d10 Range("C2:D10"). Range("A1").Select .Select 'ActiveSheet. 3). 4)).Row.Select 'Fijarse porque no funciona 'Selecciona el rango discontinuo c5 a g5. 3). "D10").Range("A1") 'Referencia de otra forma el rango c2:d10 Range(Cells(2.Select 'Selecciona todas las celdas de la hoja Cells.Previous.Select 'Seleccionar toda la fila 4 Range("4:4"). 1). 4 columnas Range("D10").Union(Range("A2: C5"). 2).Cells(ActiveCell. f3 a h3 y c24 Range("C5:G5. actual.Select 'Copiar todas las celdas de la hoja1 a la hoja2 Sheets("hoja1").Select Selection.Bold = True 'Se puede seleccionar la celda c8 de la hoja activa mediante ActiveSheet.Index sheetnumb = ActiveSheet.Name 'Hacer referencia a una hoja guardando en una variable el número de hoja.Copy Destination:=Sheets("hoja1").Select 'Hacer referencia de otra forma a la misma celda c8 Cells(8.Resize(1. Cells(10. Range("E1").Select 'Seleccionar toda la columna B Range("A:A").Select Selection. 3).Select Range("C8").Select 'También podemos hacer referencia a la celda C8 pero de la hoja 2 Sheets("hoja2").Cells.Select ‘Amplia selección actual (1) hast columna 2 (2) y ennegrecer Selection.Select 'Seleccionar todas las filas desde la fila 1 hasta la fila 5 Range("1:5").C24").Select 'Referenciar de otra forma el rango c2:c10 Range("C2". Otros casos: completar alguna tarea cada vez que se ingresa un valor en una celda o rango de celdas. .End(xlDown)).Goto Workbooks("BOOK2. A continuación se muestra un ejemplo de cómo utilizar el método CurrentRegion: ActiveSheet. El rango seleccionado mediante el método CurrentRegion es un área limitada por cualquier combinación de filas en blanco y columnas vacías.Cells(7. realizar un cierto control antes de imprimir. Son todas tareas que pueden ser automatizadas mediante rutinas o macros.Range("a1"). _ ActiveSheet. si necesitamos que se inserten automáticamente 2 hojas nuevas al abrir un libro. (*) El lenguaje utilizado en Excel es VBA (Visual Basic for Applications) Cómo se crea una macro: para automatizar una tarea mediante una macro básicamente se necesitan los siguientes elementos: 1. estableciendo la cantidad de fila y columnas adicionales a seleccionar Range("C2:D10").Rows. MACRO: Una macro es un conjunto de instrucciones escritas en lenguaje Visual Basic (*). Range("E2").Range("a1").Range("a1").End(xlDown).End(xlToRight).Sheets("Sheet1").Select 'Seleccionar desde la celda E2 hasta la última celda con datos hacia abajo. activar la opción Programador de la Cinta de Opciones.Count).Range("a1". Editor o con el atajo de teclado Alt+F11.Row MsgBox ultimaFila End Sub Para seleccionar la celda F7 en una hoja de cálculo de un libro diferente.Select Identificar la última fila que contiene datos (i) Sub ultimaFila1() 'Identifica la última fila que contiene datos Dim ultimaFila As Long ultimaFila = Range("A" & Rows.End(xlDown). Por ejemplo.End(xlUp).End(xlToRight)).un espacio de trabajo donde escribir las instrucciones o rutinas que harán esas tareas: el Editor de Macros.Select Selection. similar a ctrl + shift + flecha hacia la derecha Range("E2".Select 'Otra forma de seleccionar Range("E2:" & Range("E2").End(xlToRight).'Seleccionar un rango mayor al anteriormente seleccionado.Select 55.Select o bien ActiveSheet. Macros.Count + 5. A continuación se enumeran más ejemplos de selección de celdas del mismo rango: ActiveSheet.End(xlToRight)).Select 'Seleccionar desde la celda E2 hasta la última celda con datos hacia la derecha.End(xlDown). guardar o cerrar el libro. A este espacio se accede desde menú Herramientas. Range("E2"). En versión 2007.CurrentRegion. etc. recurriremos a una macro.Range("a1:" & _ ActiveSheet. similar a ctrl + shift + flecha hacia abajo Range("E2".Columns.Select 'Otra forma de seleccionar Range("E2:" & Range("E2"). Selection.Address).Resize(Selection. puede utilizar cualquiera de los ejemplos siguientes: Application.Address).XLS"). 6) 21: Seleccionar un rango rectangular de celdas Para seleccionar un rango de celdas rectangular alrededor de una celda. que nos permite automatizar ciertas tareas que la aplicación no contempla desde las herramientas de la hoja.Address).Select Este código seleccionará las celdas A1 a C4. utilice el método CurrentRegion.Count + 4). al seleccionar o cambiar valores en celda …Son las que se colocan en el objeto HOJA o ThisWorkbook. cambios o selección de celdas. hoja.Una vez en ese 'espacio'. se colocará en un módulo (estando en el Editor. b. Módulo). Al hacer clic derecho sobre el control optamos por 'Ver código' o 'Asignar macro' según qué barra de herramientas hemos utilizado. En Excel utilizamos VBA (Visual Basic para Aplicaciones) 4.Ocasionalmente un formulario donde trabajar para luego volcar los resultados en las hojas: llamados Userforms. entrar o salir de una hoja. por ejemplo. y otros más. antes de imprimir o guardar. Podemos utilizar botones de la barra 'Cuadro de controles o ActiveX' o de la barra 'Formularios'. rango o celda En este grupo se encuentran las rutinas que se ejecutan en la apertura o cierre de libro. Cómo ejecutar una macro: En el punto anterior se menciona que se necesita una 'acción' que dispare o ejecute una macro grabada. se colocan en el objeto ThisWorkbook (o EsteLibro según la versión). Veamos los distintos casos: 1. En versión 2007 desde la ficha Programador Dibujamos el control en la hoja. Las instrucciones para los controles de un formulario o Userforms se colocan en la sección Código del mismo formulario. al abrir o cerrar un libro.Al presionar un botón dibujado en la hoja. Si las instrucciones se deben ejecutar al entrar o salir de una hoja o al seleccionar o modificar una celda. a. 2. En versión 2003 se encuentra en Menú Ver. escribiremos o copiaremos las rutinas en: a. Barras de Herramientas. como se menciona en tema anterior 2. se colocan en el objeto Hoja.Una acción automática resultado de un evento. Si las instrucciones se deben ejecutar. el 'clic' en un botón de comando. atajo de teclado o desde otra rutina.insertando módulos c. menú Insertar. ya sea a nivel libro. 3. al presionar un atajo de teclado.una acción que hará que la tarea programada se ejecute. Estos objetos se encuentran en el margen izquierdo del Editor. A esto llamamos 'Eventos' que inician una macro y pueden ser: abrir o cerrar un libro.o insertando formularios personales o Userforms. ajustamos algunas propiedades como texto.Cuadro de controles: al optar por 'Ver código' nos llevará al Editor. al entrar o salir de una hoja.un lenguaje de programación.alguno de los objetos (hoja o libro) que seleccionemos con doble clic en el panel de Objetos que se encuentra a la izquierda del Editor. Dónde colocar o escribir la macro: esto dependerá de lo que deba ejecutar nuestra rutina. tamaño. al objeto HOJA donde se generará automáticamente una rutina con estas 2 instrucciones: Private Sub CommandButton1_click() 'aquí escribiremos nuestras instrucciones End Sub . en la ventana Proyecto-VBAProyect Si nuestra rutina será llamada con un botón. ubicación. Comprueba si expresión tiene un valor que se puede interpretar como numérico. Las rutinas para este caso son como el siguiente ejemplo: Sub nombre_rutina() 'nuestras instrucciones End Sub 3.Formularios: ya debemos tener lista la rutina en un módulo del Editor y la asignaremos cuando optemos por 'Asignar macro'. hojas y celdas: Workbook : Libro de trabajo. b. . activar la opción Programador de la Cinta de Opciones. IsDate(Expresión). NO lleva comillas Previamente asignamos nombre. Presionar el botón 'Avanzadas' e ingresar una letra. menú Herramientas.name WorkSheet : Hoja de trabajo ActiveSheet : Hoja activa Sheets("Enero") : Hoja de nombre 'Enero' Sheets(3) : Número de hoja según el orden de las pestañas.Fila. la ejecutaremos desde este menú de Excel. Macros. *-Nótese que mientras en Range se introduce la celda en el orden Col. en Cells es a la inversa: Cells(fila.1) : la celda A2 . En versión 2007. ActiveWorkbook : Libro activo Workbooks(2) : El segundo libro abierto Workbooks("Libro1. Macros seleccionarla de la lista. por ejemplo 't' (sin las comillas) Nota: Si Excel ya tiene asignada esta letra la reemplazará por Ctrl+Mayúsc +t Esto significa que en el momento que necesitemos que la macro se ejecute presionaremos juntas las teclas Ctrl + t (o Ctrl+Mayusc+t) 4.Desde el menú Herramientas: si no hemos asignado la rutina que se encuentra en un módulo a ningún botón ni a atajo de teclado. [Hoja2] : La 2da hoja según orden de las pestañas Range o Cells : rango o celda Activecell : la celda activa Range("A2") : la celda A2 Cells(2.Ejecutar un atajo de teclado: En estos casos tendremos una rutina como la del punto anterior (b) en un módulo del Editor. Referencias: Veamos los diferentes modos de referirnos a libros.xls") : Llamada al libro de nombre Libro1 Workbooks(milibro) *-Si el nombre del libro se encuenta en una variable. por ej: milibro=ActiveWorkbook. FUNCIONES DE COMPROBACION IsNuméric(Expresión). Comprueba si expresión tiene un valor que se puede interpretar como tipo fecha. Desde la hoja Excel.col) Range("A5:B10") : rango de celdas desde A5 hasta B10 inclusive Range("E:E") : columna E Range("2:2") : fila 2 [A3] : la celda A3 Range("A" & fila) : celda de la col A y fila según valor de variable ************************** 56. Range(“B1″)) Then MsgBox Prompt:=”la casilla B1 está vacía”. que se haya inicializado. no hay datos. ya que la función IsEmpty se utiliza para determinar si las variables individuales están inicializadas. el argumento expresión es generalmente un único nombre de variable. IsError(Expresión). Comprueba que expresión tenga algún valor. Comprueba si expresión devuelve algún valor de error. Para entenderlo mejor modifique el código anterior por este otro: Sub ejemplo2() Dim mensaje mensaje = InputBox(“Usuario”) If IsEmpty(mensaje) Then MsgBox Prompt:=”usuario?”. Title:=”ERROR” Else MsgBox “Hola ” & mensaje End If End Sub Como comprobará la función IsEmpty no evalúa la cadena vacía. Sintaxis IsEmpty(expresión) El argumento expresión requerido es un tipo de datos Variant que contiene una expresión de cadena o una expresión numérica.IsEmpty(Expresión). para IsNumeric o fecha para IsDate Por ejemplo evaluamos si en la celda activa hay valores numéricos: Sub comprueba() If Not IsNumeric(ActiveCell. IsObject(Expresión). Sin embargo. Y ello es así porque esta función devuelve datos de tipo variant o sea cualquier expresión que se pueda evaluar a datos numéricos. Ejemplo: Comprobamos si en la celda B1 de la hoja activa hay datos: Sub ejemplo() Dim mensaje As String If IsEmpty(ActiveSheet. Función IsNumeric/Función IsDate Nos comprueba si una expresión se evalúa como un número. IsArray(Expresión).Range(“B1″) MsgBox “En la casila B1 hay este dato : ” & mensaje End If End Sub Es complicado utilizar utilizar IsEmpty con datos recogidos por teclado mediante la función InputBox. ya que InputBox en ese caso devolvería un cero.Value) Then MsgBox “Error” Else MsgBox “Los valores son numéricos” End If End Sub . Comprueba si expresión contiene un valor nulo debido a datos no válidos. Función IsEmpty Nos comprueba si una celda o rango está vacío. de cadena o de fecha. Comprueba si expresión (una variable) representa una variable tipo objeto. IsNull(Expresión). Title:=”ERROR” Else mensaje = ActiveSheet. Comprueba si expresión (una variable) es un array o no. A continuación os relaciono una matriz con los códigos que representa cada tecla en el teclado. Clave Código RETROCESO {RETROCESO} o {BS} BREAK {PAUSA} CAPS LOCK {} BLOQ MAYÚS CLEAR {CLEAR} SUPR o DEL {DELETE} o {DEL} FLECHA ABAJO {DOWN} FIN {END} ENTER (teclado numérico) {ENTER} ENTER ~ (tilde) . no se puede trabajar con ella If R Is Nothing Then MsgBox Prompt:=”La variable Objeto no ha sido asignada”.Value If IsEmpty(cadena) Then MsgBox “La celda no contiene datos” ElseIf IsNumeric(cadena) Then MsgBox “La celda contiene datos numéricos” ElseIf IsDate(cadena) Then MsgBox “La celda contiene datos tipo fecha” ElseIf Not IsArray(cadena) Then MsgBox “La celda no es un array” Else MsgBox “No hay nada para evaluar” End If End Sub 57. _ Title:=”Error” Else R.Value = “Hola” End If End Sub Aquí un ejemplo resumen: Sub comprueba() Dim cadena As Variant cadena = ActiveCell. Buttons:=vbOK. Ejemplo: Sub Obj() Dim R As Range ‘ Si la variable R es Nothing es que no ha sido asignada. Evento OnKey: El evento OnKey ejecuta un procedimiento específico cuando una tecla o combinación de teclas se pulsan.Función IsObject La función IsObject es útil solamente para determinar si un tipo de datos Variant es de VarType vbObject. End(xlDown)).Cells(i + 1.CES { Salir} o {ESC} AYUDA {AYUDA} INICIO {HOME} INS {INSERT} FLECHA A LA IZQUIERDA {Left} BLOQ NUM {BLOQ NUM} PÁG {} PGDN PÁG {} PGUP REGRESAR {Return} FLECHA A LA DERECHA {Derecha} SCROLL LOCK {} ScrollLock TAB {TAB} FLECHA ARRIBA {UP} F1 a F15 {F1} a través {F15} También se pueden especificar en combinación con las teclas SHIFT . Para combinar con las teclas Precede el código clave por SHIFT + (signo más) CTRL ^ (acento circunflejo) ALT % (signo de porcentaje) Pegue las siguientes instrucciones en un módulo: Sub DemoOnKey() Application. 1). CTRL y ALT. 1) As Variant 'En caso de error. ARREGLO (ARRAY) Rutina de un arreglo variable del contenido en hoja1 celda A2 (A1 Titulo colulmna) y traspasa los datos a un combobox Private Sub ComboBox1_gotfocus() Dim clientes As Long 'cuenta el número de elementos en la Hoja1 clientes = Sheets("Hoja1").Rows. "Message" End Sub Sub Message() MsgBox "Hola" End Sub 58.Range(Range("A2"). 1) = Worksheets("Hoja1").Count 'definimos una Matriz sin dimensiones determinadas Dim MyArray() As Variant 'sabiendo el número de elementos a incluir.Value . que continúe On Error Resume Next 'limpiamos el ComboBox ComboBox1.OnKey "{TAB}".Clear 'añadimos cada valor del rango definido de la Hoja1 como elemento de la Matriz For i = 1 To clientes MyArray(i. redimensionamos nuestra Matriz ReDim MyArray(1 To clientes. Range("A2"). . 1) y = thatarray(counter.ScreenUpdating = False Application. y que no se ha quedado atascada.ScreenUpdating = True Application. es bueno que el usuario sepa que la macro está trabajando..StatusBar = "Ejecución terminada.StatusBar = "Iniciando." Y este código al final. Application. 'incluímos cada elemento de la Matriz dentro del Cuadro combinado ComboBox1.AddItem MyArray(i. Application. 1) Next i End Sub 58a COMPARANDO DOS ARREGLOS Sub compare_two_array() Dim thisarray As Variant Dim thatarray As Variant thisarray = Range("range1"). . Application. Acelerar la ejecución Cuando un programa corre. y lo mejor es desconectar toda actualización de video." Application.Value counter = 1 While counter <= UBound(thisarray) x = thisarray(counter. todo lo que tiene que ver con actualización de pantalla es sumamente lento. La idea de usar la barra de estado es que si la ejecución de la macro tarda mucho. Para ello debes agregar el siguiente código al inicio de la macro.ScreenUpdating se encarga de encender y apagar la actualización de video. 1) If x = y Then MsgBox "yes" Else MsgBox "no" End If counter = counter + 1 Wend End Sub 58b ARREGLO MULTIDIMENSIONAL 59. y allí despliegas mensajes asignando una hilera a Application.DisplayStatusBar = True habilita la barra de estado que está en la parte inferior de la ventana de Excel.DisplayStatusBar = True Application.StatusBar.Value thatarray = Range("range2"). porque como dijimos. Por eso sería bueno que dentro de la macro agregues otros mensajes donde el usuario pueda ver que la macro va caminando. 60.No hay nada que fastidie más que tener un programa atascado frente a uno. la actualización de video consume mucho tiempo de la máquina. . pero si pones mensajes con demasiada frecuencia eso ralentizará la ejecución. Esto es especialmente útil cuando vas a correr una macro que pasa de un libro de Excel a otro o que se mueve mucho a lo largo de las páginas o celdas de manera muy intensiva.
Copyright © 2024 DOKUMEN.SITE Inc.