Todo Access EHU
Blog creado Por Joseba Velez y Francisco José Quintana con la intención de recuperar experiencias de Visual Basic y Access.
Entradas
Contribuye
Enlaces de interes
miércoles, 19 de septiembre de 2012
llenar los campos de una plantilla de word
la de "Microsoft Word X.X Object Library"
En la plantilla deberás insertar "marcadores" que serán sustituidos
cuando se ejecute el procedimiento por el contenido del campo en la
base de datos.
En el procedimiento se hace uso tanto del "nombre" del marcador, como
del nombre del cuadro de texto del formulario.
-------------Inicio de copia del
procedimiento-------------------------------
Private Sub CmdCombinar_Click()
On Error GoTo Err_cmdCombinar
Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim Resp As Long
'
' Variable con el nombre completo del fax a guardar.
'
Dim FileName As String
'
'Variable en la que se tiene u obtiene el nombre de la plantilla.
'
Dim Plantilla As String
'
' Variable en la que se tiene u obtiene el nombre del directorio de
los fax.
'
Dim DirFax As String
Plantilla = "C:\Plantillas\Plantilla.dot"
DirFax = "C:\Faxes\
'
' Abrir el Word utilizando la plantilla.
'
AppWord.Documents.Add Template:=Plantilla, NewTemplate:=False
Set DocWord = AppWord.ActiveDocument
'
' Comprobar existencia de un marcador llamado 'PersonaContacto', si
existe
' y el contenido del cuadro de texto del formulario no es nulo se
introduce
' en el documento.
If DocWord.Bookmarks.Exists("PersonaContacto") Then
If Not IsNull(PersonaContacto) Then
DocWord.Bookmarks("PersonaContacto").Select
Texto = PersonaContacto
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("CabeceraFax") Then
If Not IsNull(CabeceraFax) Then
DocWord.Bookmarks("CabeceraFax").Select
Texto = CabeceraFax
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Fax") Then
If Not IsNull(Fax) Then
DocWord.Bookmarks("Fax").Select
Texto = Fax
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Remite") Then
If Not IsNull(Remite) Then
DocWord.Bookmarks("Remite").Select
Texto = Remite
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Remite2") Then
If Not IsNull(Remite) Then
DocWord.Bookmarks("Remite2").Select
Texto = Remite
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Direccion1") Then
If Not IsNull(Direccion1) Then
DocWord.Bookmarks("Direccion1").Select
Texto = Direccion1
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Direccion2") Then
If Not IsNull(Direccion2) Then
DocWord.Bookmarks("Direccion2").Select
Texto = Direccion2
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("Tlf") Then
If Not IsNull(Rs!Tlf) Then
DocWord.Bookmarks("Tlf").Select
Texto = Rs!Tlf
DocWord.Application.Selection.TypeText Text:=Texto
End If
End If
If DocWord.Bookmarks.Exists("FechaFax") Then
DocWord.Bookmarks("FechaFax").Select
Texto = Format(Date, "dd/mm/yyyy")
DocWord.Application.Selection.TypeText Text:=Texto
End If
AppWord.Visible = True
AppWord.ActiveDocument.SaveAs FileName
AppWord.WindowState = wdWindowStateMaximize
Exit_cmdCombinar:
DoCmd.Hourglass False
Exit Sub
Err_cmdCombinar:
If Err = 91 Or Err = -2147023174 Then
Set AppWord = New Word.Application
Resume
End If
MsgBox Err & " " & Err.Description & Chr$(13) & Chr$(13) &
Plantilla
Resume Exit_cmdCombinar
End Sub
-------------------Fin del procedimiento
copiado-----------------------------
En este ejemplo el nombre que se puso a los marcadores en la plantilla
Word es el mismo que el que tenían los cuadros de texto en el
formulario pero pueden ser diferentes.
Si se necesita introducir la misma información en dos lugares
diferentes del fax, como ocurre en éste caso, debes definir dos
marcadores con dos nombres diferentes, aunque incluyas la misma
información.
miércoles, 6 de abril de 2011
Función para copiar el path de un archivo y utilizarlo en un formulario o en una varialble
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Function LaunchCD(strform As Form) As String
Dim OpenFile As OPENFILENAME
Dim lReturn As Long
Dim sFilter As String
OpenFile.lStructSize = Len(OpenFile)
OpenFile.hwndOwner = strform.Hwnd
sFilter = "All Files (*.*)" & Chr(0) & "*.*" & Chr(0) & _
"JPEG Files (*.JPG)" & Chr(0) & "*.JPG" & Chr(0)
OpenFile.lpstrFilter = sFilter
OpenFile.nFilterIndex = 1
OpenFile.lpstrFile = String(257, 0)
OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
OpenFile.lpstrFileTitle = OpenFile.lpstrFile
OpenFile.nMaxFileTitle = OpenFile.nMaxFile
OpenFile.lpstrInitialDir = "C:\"
OpenFile.lpstrTitle = "Select a file using the Common Dialog DLL"
OpenFile.flags = 0
lReturn = GetOpenFileName(OpenFile)
If lReturn = 0 Then
MsgBox "A file was not selected!", vbInformation, _
"Select a file using the Common Dialog DLL"
Else
LaunchCD = Trim(Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, vbNullChar) - 1))
End If
End Function
En el odigo del botón:
Private Sub Comando0_Click()
Fichero = LaunchCD(Me)
domingo, 27 de febrero de 2011
Reiniciar campo autonumerico Access
Public strNombreTabla As String
Public strNombreCampo As String
Public ValorInicial As Integer
Function ReiniciarAutonumerico(strNombreTabla, strNombreCampo, ValorInicial)
Dim cat As Object
Dim t As Object
Dim col As Object
Dim p As Object
Set cat = CreateObject("ADOX.Catalog")
Set cat.ActiveConnection = CurrentProject.Connection
Set t = cat.Tables(strNombreTabla)
Set col = t.Columns(strNombreCampo)
Set p = col.Properties("Seed")
If IsMissing(ValorInicial) Then
p.Value = Nz(DMax(strNombreCampo, strNombreTabla), 1)
Else
p.Value = ValorInicial
End If
Set p = Nothing
Set col = Nothing
Set t = Nothing
Set cat = Nothing
End Function
Código del botón que llama función:
Private Sub Comando0_Click()
Dim strNombreTabla As String
Dim strNombreCampo As String
strNombreTabla = Me.strNombreTabla
strNombreCampo = Me.strNombreCampo
retorno = Módulo1.ReiniciarAutonumerico(strNombreTabla, strNombreCampo, 1)
End Sub
miércoles, 30 de junio de 2010
RV: Crear hojas Excel
'****** Crear Hoja Excel
'******************************
Dim H As Long
Dim V As Long
Dim MiBase As Database
Dim MiTabla As Recordset
Dim objExcel As Excel.Application
On Error GoTo ErrorExcel
'Set MiBase = OpenDatabase(CurrentProject.Path & "\db1.mdb")
'Esta linea anterior, por si deseamos abrir una tabla de cualquier
'otra MDB. En este ejemplo abrimos una tabla Local (Excel).
Set MiBase = CurrentDb
Set MiTabla = MiBase.OpenRecordset(SQL)
If MiTabla.RecordCount = 0 Then
MsgBox "La base de datos esta vacia", vbCritical + vbOKOnly, "AVISO"
Exit Sub
End If
Set objExcel = New Excel.Application
objExcel.Visible = False 'Ocultamos la aplicación excell
objExcel.SheetsInNewWorkbook = 1 'determina el numero de hojas
‘que se mostrara en el Excel
objExcel.Workbooks.Add 'Crea el Libro
With objExcel.ActiveSheet 'cogemos la hoja activa de Excel
'Definimos un rango y pintamos una linea alrededor
.Range(.Cells(1, 1), .Cells(1, 4)).Borders.LineStyle = xlContinuous
'Llenamos celdas con texto fijo
.Cells(3, 1) = "ANO"
.Range(.Cells(3, 1), .Cells(3, 13)).Font.Bold = True ' definimos un rango
‘y ponemos el texto en negrita
‘Definimos formato de columnas
.Columns("D").HorizontalAlignment = xlHAlignRight
.Columns("A").ColumnWidth = 30
.Columns("B").ColumnWidth = 30
.Columns("C").ColumnWidth = 30
.Columns("D").ColumnWidth = 15
.Columns("E").NumberFormat = "dd/mm/yyyy"
.Columns("M").NumberFormat = "dd/mm/yyyy"
End With
objExcel.ActiveSheet.Cells(1, 1) = "Titulo de Cabecera"
objExcel.ActiveSheet.Range(objExcel.ActiveSheet.Cells(1, 1), _
objExcel.ActiveSheet.Cells(1, 4)).HorizontalAlignment = xlHAlignCenterAcrossSelection
With objExcel.ActiveSheet.Cells(1, 1).Font
.Color = vbRed
.Size = 14
.Bold = True
End With
V = 4
H = 1
Do While Not MiTabla.EOF
DoEvents
objExcel.ActiveSheet.Cells(V, H) = MiTabla.Fields!ANO_PRESUP
objExcel.ActiveSheet.Cells(V, H + 1) = MiTabla.Fields!campo1
objExcel.ActiveSheet.Cells(V, H + 2) = MiTabla.Fields!campo2
‘……………………………………………………………………
objExcel.ActiveSheet.Cells(V, H + 11) = MiTabla.Fields!campoN
MiTabla.Edit
MiTabla.Fields![Fecha de asignación] = Date
MiTabla.Update
objExcel.ActiveSheet.Cells(V, H + 12) = MiTabla.Fields![Fecha de asignación]
V = V + 1
MiTabla.MoveNext
Loop
'V = V + 3
'objExcel.Range(objExcel.Cells(V, 1), objExcel.Cells(V, 4)).Borders.LineStyle = xlContinuous
'objExcel.ActiveSheet.Range(objExcel.ActiveSheet.Cells(V, 1), objExcel.ActiveSheet.Cells(V, 4)).HorizontalAlignment = xlHAlignCenterAcrossSelection
'objExcel.ActiveSheet.Cells(V, 1) = "Fec: Código Web del Programador"
objExcel.DisplayAlerts = False
Fecha = Replace(Date, "/", "_")
Filename = "Tareas_" & Fecha
objExcel.ActiveWorkbook.SaveAs Filename, , , , , , , xlLocalSessionChanges
objExcel.ActiveWorkbook.Close
MiBase.Close
objExcel.Quit
Set objExcel = Nothing
Me.Estado.Caption = "Se ha creado el fichero "
MsgBox ("Se ha creado el fichero ")
Me.Estado.Caption = ""
Exit Sub
ErrorExcel:
MsgBox "Ha ocurrido un error de conexión con Excel." _
& Chr(13) & Chr(13) & "Error : " & Err.Number _
& Chr(13) & "Info : " & Err.Description _
& Chr(13) & "Objeto : " & Err.Source _
& Chr(13) & Chr(13) & "Revisa las referencias y la ruta de la base de datos. ", vbCritical, "Paco Avisa: Error al conectar con Excel"
End Sub
martes, 29 de junio de 2010
Function Modificar Mayusculas Minusculas (texto)
'Esta función devuelve la cadena (texto) convertida en palabras
'que empiezan con mayuscula
Dim CadenA As String
Dim ANSI As Variant
Dim Numero As Integer
CadenA = LCase(texto)
Mid(CadenA, 1, 1) = UCase(Left(CadenA, 1))
For Numero = 2 To Len(CadenA) - 1
ANSI = Asc(Mid(CadenA, Numero, 1))
If ANSI < 65 Or ANSI > 122 Or (ANSI > 90 And ANSI < 97) Then
If ANSI <> 241 Then
Mid(CadenA, Numero + 1, 1) = UCase(Mid(CadenA, Numero + 1, 1))
End If
End If
Next Numero
Mayusculas = CadenA
End Function
viernes, 25 de junio de 2010
Control de errores para aplicaciones robustas
On Error
Resume
Exit
On Error:
La instrucción On Error tiene variables utilizadas para direccionar.
On Error Goto: tiene dos opciones :
Numero Línea, que puede ser un número situado en el procedimiento
Etiqueta Línea, que es una etiqueta que especifica el inicio de una sección de un procedimiento.
Este procedimiento muestra un mensaje de error “Ha ocurrido un error” y sale del mismo. Es mejor que el presentado en la figura anterior. Después de recibir el usuario este mensaje, la ejecución del programa sale directamente debido al error producido.
Se utiliza cuando el programa necesita continuar en la línea que sigue inmediatamente a la que originó el error. Un ejemplo sucede cuando se intenta eliminar una tabla que ya ha sido eliminada. El código para éste ejemplo es el siguiente:
El siguiente código utiliza la instrucción Exit Sub para salir del procedimiento después de mostrar el error.
Las instrucciones Resume, Resume Next y Resume Etiqueta línea se utilizan dentro del controlador de errores para continuar con el procedimiento después de tratar el error.
La instrucción Resume devuelve la ejecución del procedimiento a la línea en la que ocurrió el error.
Sub ResumeExample(intNumerator As Integer, intDenominator As Integer)
La instrucción Resume Next proporciona la capacidad de dar un mensaje, tratar el error y desplazarse a la siguiente línea de código posterior a la que originó el error.
Error_ResumeLineLabelExample: