You are on page 1of 21

A

r
r
i
b
a

Re: Bloquear parte de una hoja

por Israel Garcia 11 Mar 2006 22:38

Siendo 12-Mar-06 las 06:22 PM acabo de responder su mensaje anterior.

Primeramente hoy aprendi algo nuevo, ya que no conocia la instruccion de ScrollArea, y se


lo tengo que agradecer a Usted. Es mas efectivo ya que no tiene que proteger y
desproteger la hoja.

Segundo, puede utilizar el siguiente codigo si el area a restringir sera la misma para todas
las hojas:

Private Sub Workbook_Open()


For i = 1 To Sheets.Count
Worksheets(i).ScrollArea = "a1:j34"
Next i
Sheets("Principal").Select
End Sub

Si el area a restringir es diferente en cada hoja, entonces puede probar escribiendo el


siguiente codigo en cada una de las hojas:

Private Sub Worksheet_Activate()


ActiveSheet.ScrollArea = "a1:a10"
End Sub

No debe colocarlo en ThisWorkBook sino en cada uno de los elementos que aparecen
arriba de ste: Hoja1 (Hoja1), Hoja2 (Hoja2), etc.

Otra forma, puede ser utilizando el siguiente codigo en ThisWorkBook:

Private Sub Workbook_Open()


For i = 1 To Sheets.Count
nombre = Sheets(i).Name
Select Case nombre
Case "P1"
Worksheets(i).ScrollArea = "a1:a10"
Case "P2"
Worksheets(i).ScrollArea = "b1:b10"
Case "P3"
Worksheets(i).ScrollArea = "c1:c10"
End Select
Next i
Sheets("Principal").Select
End Sub

Por cada hoja que exista se deben colocar la palabra Case seguida del nombre de la hoja
entre comillas. En mi ejemplo estoy suponiendo que el libro contiene tres hojas cada una
de las cuales se llama P1, P2 yP3.

Nuevamente espero haberle podido ayudar.

VBA: Macro para abrir y cerrar un libro de Excel - Workbooks.Open.

Explicar hoy una sencilla macro que nos permite trabajar sobre libros de trabajo en Excel
cerrados, pero de los que necesitamos copiar parte de su contenido.
Para ello emplearemos el mtodo Open del objeto Workbooks: WorkBooks.Open; ojo no
confundir con otro objeto que es Workbook.
De igual forma para cerrar un libro podemos emplear el mtodo Close del
objeto Workbooks:WorkBooks.Close.
Estos dos mtodos son la esencia de nuestra futura macro. Macro de Excel que nos permitir
abrir un libro cerrado desde nuestro fichero de trabajo, para seleccionar un rango de celdas,
pegarlo en nuestro destino y finalmente cerrarlo.
Supongamos dos ficheros, uno principal (Principal.xlsm) donde pegaremos el contenido del
segundo fichero origen (Origen.xlsx). Lgicamente el 'Principal' tiene una extensin .xlsm por que
contiene el cdigo de nuestra macro.
Veamos nuestros ficheros de trabajo. El libro 'Origen.xlsx' en su hoja 'Datos' contiene un listado
decursos de Excel:

Por otro lado queremos pegar los datos existentes de esos cursos de Excel en la hoja 'Resumen'
del libro 'Principal.xlsm', pero slo copiaremos los datos de la tabla excluyendo la cabecera de
rtulos, ya que ese dato lo tenemos en nuestro destino.

Adems, para futuros copiados y pegados, la celda destino de nuestro pegado debera ser la
primera sin utilizar; por ejemplo, en este primer caso, la primera celda o fila sin utilizar es la que
est debajo de la cabecera, esto es celda A2, pero en la siguiente sera la celda A22.

Nuestro cdigo VBA deber insertarse en un mdulo del libro 'Principal.xlsm':


view plainprint?

1. Sub CompletarLibro()

2. Dim ruta As String, direccion1 As String

3. Dim celdadestino As Range

4. 'definimos rutas y archivos como variables

5. ruta = "E:\excelforo\"

6. fichero1 = "Origen.xlsx"

7. direccion1 = ruta & fichero1


8.

9. 'identificamos la celda disponible en el archivo Principal, hoja Resumen

10. Set celdadestino = Workbooks("Principal.xlsm").Sheets("Resumen").Cells(Rows.Count, "A


").End(xlUp).Offset(1, 0)

11. 'abrimos el fichero desde donde copiar... con el mtodo .Open

12. Workbooks.Open Filename:=direccion1

13. Worksheets("Datos").Activate

14. 'seleccionamos qu copiar y donde

15. Set tbl = Range("A1").CurrentRegion

16. 'con este cdigo nicamente copiamos la tabla excepto la primera fila

17. 'y lo pegamos en la celda destino correcta del libro Principal.xlsm

18. tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, tbl.Columns.Count).Copy _

19. Destination:=Workbooks("Principal.xlsm").Sheets("Resumen").Range(celdadestino.Addres
s)

20. 'limpiamos el Portapapeles

21. Application.CutCopyMode = False

22. 'cerramos fichero origen con el mtodo .Close, sin guardar cambios (nos aseguramos...)

23. Workbooks(fichero1).Close savechanges:=False

24.

25. End Sub

Podemos probar nuestra macro de Excel. Para ello cerramos el libor 'Origen.xlsx' y ejecutamos la
macro 'CompletarLibro' desde 'Principla.xlsm'. Con ello conseguimos lo esperado, hemos
seleccionado del libro 'Origen.xlsx' todas las filas menos la cabecera de la tabla de Cursos y se ha
pegado en el libro 'Principal.xlsm' a partir de la primera celda libre:
CERRAR UN LIBRO DE EXCEL CON VBA

1) Cierra un libro de Excel llamado "Libro1.xlsx" (comprueba primero que est


abierto). Si ha habido cambios en dicho libro, pregunta si se desea guardarlos.

Sub CerrarLibro1()
Dim TestWorkbook As Workbook
Set TestWorkbook = Nothing
On Error Resume Next
Set TestWorkbook = Workbooks("Libro1.xlsx")
On Error GoTo 0
If TestWorkbook Is Nothing Then
MsgBox "El archivo no estaba abierto"
Else
Workbooks("Libro1.xlsx").Close
End If
End Sub

2) Cierra el libro de Excel que esta activo en este momento (pregunta si guarda los
cambios).

Sub CerrarLibroActivo()
ActiveWorkbook.Close
End sub

3) Cierra el libro de Excel que esta activo en este momento y guarda los cambios.
Sub CerrarYGuardar()
ActiveWorkbook.Close savechanges:=True
End Sub

ABRIR UN LIBRO DE EXCEL CON VBA

4) Abrir un libro de Excel llamado "Libro1.xlsx" que est en la misma carpeta o


ruta que el libro en el que estamos trabajando.

Sub AbrirLibro1MismaRuta()
Dim TestWorkbook As Workbook

Set TestWorkbook = Nothing

On Error Resume Next

Set TestWorkbook = Workbooks("Libro1.xlsx")

On Error GoTo 0

If TestWorkbook Is Nothing Then


ruta = ActiveWorkbook.Path
Workbooks.Open Filename:=ruta & "\Libro1.xlsx"
Else

MsgBox "El archivo ya estaba abierto"

End If

End sub

5) Abre un libro de Excel llamado "Libro1.xlsx" que est en la ruta :


C:\Carpeta1\Carpeta2\Carpeta3

Sub AbrirLibro1RutaConcreta()

Dim TestWorkbook As Workbook

Set TestWorkbook = Nothing

On Error Resume Next

Set TestWorkbook = Workbooks("Libro1.xlsx")

On Error GoTo 0

If TestWorkbook Is Nothing Then


ruta = "C:\Carpeta1\Carpeta2\Carpeta3"
Workbooks.Open Filename:=ruta & "\Libro1.xlsx"
Else

MsgBox "El archivo ya estaba abierto"

End If

End sub
6) Abrir cualquier libro de Excel (se abre el cuadro de dilogo "Abrir
archivo" para elegirlo).

Sub AbrirArchivo()
Application.Dialogs(xlDialogOpen).Show
End Sub

GUARDAR UN LIBRO DE EXCEL CON VBA

7) Guarda los cambios en el libro de Excel activo.


Sub GuardarArchivo()
ActiveWorkbook.Save
End sub

8) Guarda los cambios en el libro de Excel activo y abre el dilogo


"Guardar como" para hacer una copia de seguridad en una ubicacin a
elegir.

Sub GuardarComo()
ActiveWorkbook.Save
Application.Dialogs(xlDialogSaveAs).Show
End sub
Aadir o Eliminar Elementos de un ListBox
16/06/2012 by Fernando Santos | 0 comments

Para agregar o eliminar los elementos de un Listbox emplearemos el


siguiente mtodo:

Crearemos dentro de la hoja Ventas una lista de elementos:

Luego creamos nuestro Userform adicionando un listbox y emplearemos


el siguiente cdigo para que al cargar el userform automticamente los
elementos ingresados en la lista presentada anteriormente, se adicionen
al listbox que hemos creado.

1) Le indicamos al sistema que una vez activado el userform se


seleccione la hoja Ventas

Private Sub UserForm_Activate()


Sheets(Ventas).Select

2) Una vez en la hoja Ventas el cdigo ordena ir hasta la fila 80000 de


la columna A y desde ah regresar hasta la ultima fila llena perteneciente
a dicha columna

ultimaFila = Columns(A:A).Range(A65000).End(xlUp).Row

3) Finalmente el cdigo a indica que tome el numero de la ultima fila


llena y a travs de un contador adicione uno a uno los elementos
presentes en dicha lista a partir de la fila 2, dado que asumimos que la
lista tiene encabezado.

For cont = 2 To ultimaFila

If Cells(cont, 1) <> Then

ListBox1.AddItem (Cells(cont, 1))

End If

Next

Sheets(Inicio).Select

End Sub

4) Entonces cada vez que carguemos el userform aparecer las lista en


nuestro listbox
Ejemplo de uso de un ListBox

Elaborado por: Luis Agustin Gaitan Murillo

Identificar la ltima fila en uso con VBA


09/06/2012 by Fernando Santos | 19 Comments

En qu nos ayudara identificar la ltima fila en uso?

Usualmente las bases de datos en Excel tienen mucha informacin; por


eso, perderiamos tiempo buscando el ltimo dato con la barra de
desplazamiento.
Sin embargo, esto se puede solucionar, haciendo uso de las macros.

Qu cdigo podemos usar para buscar la ltima fila?

Sub BuscarUltimaFila()

Dim ult As Integer


ult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox ult

End Sub

Ahora entendamos el cdigo:

Cells(Rows.Count,1) = Al usar Rows.Count estamos contando todas las


filas disponibles en excel cuyo valor seria 1048576. Como lo usamos en
un Cells, estaremos seleccionando la fila 1048576. El 1 indica la
columna en la cul se esta trabajando (A) .

End(xlUp) = Estamos indicando que desde la fila indicada (1048576),


suba hasta que encuentre un valor.

Row = Indicamos que grabe el nmero de la fila ocupada encontrada.

MsgBox ult = Mostramos ese valor en un cuadro de texto.

Seleccionar esa ltima fila

Ahora, si queremos seleccionar esa celda podemos agregar el siguiente


cdigo:

Sub BuscarUltimaFila()

Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Select

End Sub
Como podemos observar, en vez de .Row , le ponemos .Select

ltima fila libre

Alternativamente, si queremos buscar la ltima fila libre, haremos uso


del Offset:

Sub BuscarUltimaFila()

Dim n As Long
countult = Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Row
MsgBox countult
Cells(Rows.Count, 1).End(xlUp).Offset(1,0).Select

End Sub

Con Offset(1,0) , al encontrar la ltima fila en uso, saltamos 1 fila ms la


cual sera la ltima fila libre.

Descargar ejemplos de identificacin de ltima fila

Generar un archivo de Word desde VBA Excel


06/05/2012 by Fernando Santos | 4 Comments
Si bien los clculos y tablas se realizan en Excel, algunos informes o
resmenes deben ser presentados en Word, y si se trata de cientos o
miles de clientes o items, de nada serviria haber optimizado el tiempo
durante los clculos utilizando una macro si se debe ingresar los datos
del excel en el word de manera manual. El siguiente cdigo permite leer
una tabla ubicada en este caso en la hoja 1, con una relacin de todos
los cursos de la curricula de la PUCP. Tambien se incluyen la fecha, hora y
nota promedio de los exmenes parciales, y generar un archivo de word
individual por cada curso, indicando la nota promedio del mismo,
algunos datos propios del da del examen y finalmente indica la fecha en
que se gener el reporte.

Al inicio se declar el option explicit, en vista que se programara


utilizando word y excel, esta opcion nos obliga a declarar todas las
variables, asi que es util al momento de depurar la macro.

Ademas se seleccionan las siguientes referencias del menu


Herramientas: Microsoft Scripting RunTime y Microsof Word Object
Library, ya que se citaran archivos externos. Luego se definen las
siguientes variables : wordapp que se refiere al archivo creado para cada
curso donde se grabara la informacion y fs que como filesystem object
permitira guardar el archivo de word generado en una determinada
direccin.
Option Explicit

Private Sub CommandButton1_Click()


Dim wordapp As Word.Application
Dim fs As FileSystemObject
Dim documento As Document, objselection As Selection
Dim camino As String
Dim fila, i As Integer
Const minimo As Integer = 13
Set wordapp = New Word.Application
Set fs = New FileSystemObject

Range(A2).Select
fila = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To fila
Dim nota As Integer
Dim curso, fecha, dia, aula As String

nota = ThisWorkbook.Worksheets(1).Cells(i, 8).Value


If nota <= minimo Then
Else
curso = ThisWorkbook.Worksheets(1).Cells(i, 1).Value
fecha = ThisWorkbook.Worksheets(1).Cells(i, 3).Value
dia = ThisWorkbook.Worksheets(1).Cells(i, 4).Value
aula = ThisWorkbook.Worksheets(1).Cells(i, 5).Value
Set documento = wordapp.Documents.Add
Set objselection = wordapp.Selection

objselection.Font.Bold = True
objselection.TypeText Comunicado Promedio De Curso

Call espacios(objselection, 1)
objselection.TypeText COMUNICADO DE FACULTAD
objselection.Font.Bold = False
Call espacios(objselection, 1)
objselection.TypeText El promedio del examen del curso de & curso &
realizado el dia & dia & & fecha & en el aula & aula
objselection.Font.Bold = True
objselection.TypeText fue de & nota
Call espacios(objselection, 10)
objselection.TypeText Lima a fecha & Date & .

camino = ThisWorkbook.Path & \ & curso


If fs.FolderExists(camino) = False Then
fs.CreateFolder (camino)
End If

documento.SaveAs Filename:=camino & \ & curso & .doc, _


FileFormat:=wdFormatDocument
documento.Close savechanges:=True
End If
Next i
wordapp.Application.Quit
Set fs = Nothing
Set objselection = Nothing
Set documento = Nothing
Set wordapp = Nothing

End Sub

Public Sub espacios(seleccion As Selection, lineas As Integer)


Dim i As Integer
For i = 1 To lineas
seleccion.TypeParagraph
Next
End Sub

El modulo de espacios sirve para generar lineas entre parrafos. Tambien


se consideran formatos como negrita. Solo se elige generar el archivo de
word para aquellos cursos cuyo promedio es mayor a 13. Los archivos se
crean en la misma carpeta que se encuentra el libro de excel en donde
se trabaja

Ejemplo de adicin y eliminacin de elementos de un


Combobox
21/04/2012 by Fernando Santos | 3 Comments
El control del ComboBox se usa para aadir elementos al cuadro
de combinaciones y para que el usuario pueda elegir entre ellas.
Dependiendo del valor (si est activo o no) se realiza una accin u otra.

Ejemplo: Un ejemplo que invulucre la adicin y eliminacin de


elementos seria en una situacion en la que un cine tiene que poner en su
cartelera las peliculas de la semana. Los titulos de las peliculas van
cambiando cada semana por ello creamos el siguiente procedimiento en
un formulario:

Private Sub UserForm_Activate()


ult = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To ult
ComboBox1.AddItem (Cells(i, 1))
Next
End Sub

Private Sub CommandButton1_Click()


TextBox1.Text = ComboBox1.Value
End Sub

Este codigo permite que cuando se agregan o se quitan peliculas en la


hoja excel, inmediatamente se aade o se elimina del cuadro de
combinaciones. Como se muestra:

ANTES:
DESPUES: (Se ha eliminado una pelicula y se ha puesto otra)
Elaborado por: Juan Carlos Castillo

Funciones en VBA
Las siguientes Funciones en VBA o Macros podran ser de mucha ayuda
para las diversas tareas en las que nos veamos involucrados en resolver,
en esta relacin tenemos un acercamiento a las funciones en VBA mas
usuales que podramos llegar a emplear.

A la fecha en la web no encontramos una relacin lo suficientemente


exhaustiva de las funciones en VBA disponibles as que desde el blog
hemos comenzado, paso a paso, a establecer nuestra propia relacin de
funciones, prestando especial inters a los ejemplos de uso de cada
funcin que desarrollemos, si desean que agreguemos alguna en
particular o han encontrado alguna observacin sobre algunas de las
funciones descritas, por favor avsennos a info@exel-avanzado.com a fin
de realizar las revisiones y adecuaciones que sean necesarias.

Debe tenerse en cuenta que estas funciones en VBA pueden emplearse


desde cualquier parte del proyecto, es decir ya sea desde los mdulos,
hojas, ThisWorkbook, y formularios.

Algunas de las funciones en VBA revisadas:

1. Funcin WorksheetFunction.IsText
2. WorksheetFunction.Median
3. Funcin ISERROR
4. Funcin FILEDATETIME
5. Funcin WorksheetFunction.Roman
6. Aplicar Trim a un rango de celdas con Macros
7. 5 Funciones en VBA imprescindibles
8. Funcin MonthName
9. WorksheetFunction.CountA
10. Funcin WorksheetFunction.IsLogical
11. Funcin MKDIR
12. Funcin WorksheetFunction.SumProduct
13. Funcin WorksheetFunction.IsOdd
14. Funcin WorksheetFunction.And
15. Funcin Worksheet.IsNumber
16. Funcin RGB en VBA
17. Funcin HOUR
18. Funcin GETATTR
19. Funcin WorksheetFunction.Sum
20. Funcin RTRIM
21. Funcin WorksheetFunction.Or
22. Funcin WorksheetFunction.Fact
23. Funcin ChDir
24. Evaluacion del dia con la Funcin Day
25. Funcin Month en VBA
26. WORKSHEETFUNCTION.MAX para el promedio de notas
27. Funcin Right en VBA
28. Funcin WorksheetFunction.Average
29. Uso de WorksheetFunction.CountBlank
30. Uso de WorksheetFunction.CountA
31. Funcin CINT
32. Funcin Mid para calificacin crediticia
33. Funcin Abs
34. Funcin Now en VBA
35. Funcin Formatpercent
36. Funcin DateAdd (Teora Nagele)
37. Funcin FileLen en VBA
38. Funcin IsEmpty en VBA
39. Funcin Len en VBA
40. Funcin Left
41. Funcin Space en BVA
42. Uso de WorksheetFunction.RandBetween
43. Funcin Rnd
44. Funcion IsNumeric
45. Funcin FormatCurrency en VBA
46. Funcin IsNull en VBA
47. Funcin Cbyte en VBA
48. Funcin StrConv
49. Funcin Replace
50. Funcin Val en VBA
51. Funcin CLng en VBA
52. Uso de WorksheetFunction.Vlookup
53. Funcin Cdec
54. Funcin "Choose" en VBA
55. Funcin CStr
56. Funcin CurDir
57. Funcin CVAR en VBA
58. Funcin InputBox en VBA
59. Funcin CCur en VBA
60. Funcin DateSerial en VBA
61. Funcin WeekdayName
62. Funcin LCase con VBA
63. Funcin ROUND
64. Funcin Sgn
65. Funcin Date
66. Funcin INT
67. Funcin DateDiff
68. Funcin CDate con VBA
69. Funcin Fix con VBA
70. Funcin LTrim
71. Funcin CHR
72. Funcin DateSerial
73. Funcion Cbool
74. Funcin TimeSerial
75. Funcion Ucase
76. Funcin InStr
77. Funcin Format
78. Funcin CDbl
79. Funcin IsDate
80. Funcin Asc
81. Funcin InStrRev

http://www.excel-avanzado.com/1446/elementos-combobox.html

You might also like