Mensajes recientes

Páginas: [1] 2 3 ... 10
1
API / Nombre corto, nombre largo
« Último mensaje por xavi en Enero 18, 2021, 07:37:20 pm »
Palabras clave: carpeta, directorio, fichero, archivo, nombre, corto, largo API
Autor: Happy
Extraído de: Access y VBA

Objetivo:
Rescato estos procedimientos de Happy para obtener el nombre corto de fichero a partir del nombre largo y viceversa.


En un módulo independiente:
Código: [Seleccionar]
Option Compare Database
Option Explicit

Private Declare Function GetLongPathName Lib "kernel32" _
                Alias "GetLongPathNameA" _
                (ByVal lpszShortPath As String, _
                ByVal lpszLongPath As String, _
                ByVal cchBuffer As Long) As Long

Private Declare Function GetShortPathName Lib "kernel32" _
                Alias "GetShortPathNameA" _
                (ByVal lpszLongPath As String, _
                ByVal lpszShortPath As String, _
                ByVal lBuffer As Long) As Long

Function GetLongName(ShortPath As String) As String
Dim LenLongName As Long
Dim buffer As String * 1000

    LenLongName = GetLongPathName(ShortPath, _
                          buffer, Len(buffer))
    If LenLongName Then
        GetLongName = Left$(buffer, LenLongName)
    End If

End Function

Function GetShortName(LongPath As String) As String
Dim LenShortName As Long
Dim buffer As String * 1000

    LenShortName = GetShortPathName(LongPath, _
                          buffer, Len(LongPath))
    If LenShortName Then
        GetShortName = Left$(buffer, LenShortName)
    End If

End Function

2
Varias / Obtener lenguaje de Office
« Último mensaje por xavi en Enero 08, 2021, 12:56:12 pm »
Palabras clave: lenguaje, idioma
Autor: xavi
Extraído de: Web de Microsoft

Por necesidades del parámetro Format de la función PasteSpecial de Excel, me he visto forzado a buscar si existía una forma de averiguar el idioma de Excel. Y me he topado con esto:

Código: [Seleccionar]
Application.LanguageSettings.LanguageID(msoLanguageIDUI)


El valor que devuelve es un numérico.

URL's dónde obtener valores y códigos
MsoLanguageID (enumeración) (Office)
Identificadores de idioma y valores de identificador de OptionState en Office 2016

3
Excel / Última fila con datos de un fichero Excel
« Último mensaje por xavi en Octubre 22, 2020, 06:51:09 pm »
Palabras clave: Excel, automatización, registros
Autor: Jesus Mansilla (Mihura)

En ocasiones necesitamos leer un fichero Excel mediante automatización y, para poder mostrar "algo" que nos de idea del progreso, es necesario averiguar la cantidad de registros afectados,

Una opción es insertar una fórmula en una celda "lejana" que nos haga un COUNTA (CONTARA) de los registros de una columna que sepamos debe estar toda rellena.

xls.ActiveSheet.Cells(1, 255).FormulaR1C1 = "=COUNTA(C1)

Leer el resultado (restarle 1 si existe una fila de titulos) y eliminar el contenido de la celda. Hay que acordarse de que, al cerrar el Excel, no se guarden los cambios.

Jesus presenta una alternativa:

UltimaFila = xls.ActiveSheet.Cells(xls.ActiveSheet.Rows.Count, 1).End(xlUp).Row

Traducido: posicionarse en la ultima fila de la hoja (ActiveSheet.Rows.Count) en su primera columna (1) y "tirar p'arriba" con .End(xlUp)  (equivalente a Ctrl + flecha arriba). Ello posiciona en la ultima celda escrita de la columna. Y de allí tomamos la fila (.Row)

Lo mismo para las columnas
UltimaColumna = xls.ActiveSheet.Cells(1, xls.ActiveSheet.Columns.Count).End(xlToLeft).Column

Ingenioso.
4
Excel / Deshabilitar eventos de Excel
« Último mensaje por xavi en Octubre 15, 2020, 04:27:47 pm »
Palabras clave: Excel, Autoexec, eventos
Autor: Xavi
Extraído de: Experiencia propia

En ocasiones es necesario abrir por automatización un fichero Excel pero este, al hacerlo, lanza los eventos de apertura que pueden interferir en la automatización (si se abre un UserForm, por ejemplo).

Después de probar con DoEvents desde Access para que el código siga ejecutándose (sin éxito) descubro que puedo utilizar EnableEvents para la instancia de Excel (justo después de crearla) para establecerla a False y que en la apertura del libro no se lance nada.


Código: [Seleccionar]
Set xlsApp = CreateObject("Excel.Application")
xlsApp.EnableEvents = False
xlsApp.Workbooks.Open "ElFichero"
5
Formularios / Ítems seleccionados de un ListBox
« Último mensaje por xavi en Octubre 10, 2020, 10:50:29 am »
Palabras clave: listbox, recorrer, multiselección
Autor: Xavi
Extraído de: Harto de buscarlo cuando lo necesito, lo cuelgo aqui

Pregunta
¿Cómo puedo recorrer los ítems seleccionados de un cuadro de lista de selección múltiple?

Respuesta
Habitualmente tratamos con los ListBox en modo de selección simple pero, cuando se trata de un ListBox de multiselección, el modo de obtener la lista de valores seleccionados es ligeramente distinto.

Lo que haremos será imaginar un ListBox de 2 columnas dónde la primera está oculta (es el índice) y la segunda es la que muestra la descripción.
Deseamos obtener la lista de índices que se han seleccionado (da lo mismo que sea selección extendida o no) para almacenarlos en una cadena de texto que utilizaremos, por ejemplo, en una cláusula IN de una SQL.


Código: [Seleccionar]
    Dim varitem
    Dim strTmp As String
    Dim strIN    As String
    For Each varitem In Me!cboEjemplo.ItemsSelected
        strTmp = strTmp & ", " & Me!cboEjemplo.Column(0, varitem)
    Next
    strIN = "IN (" & Mid(strTmp, 3) & ")"
6
Consejos, técnicas, artículos / Re:Asignación de funciones a eventos
« Último mensaje por matasl en Agosto 28, 2020, 05:29:41 pm »
Buenos días.

Muchas gracias por los artículos que publicas, para los que estamos en pañales en access, nos son de mucha utilidad.

He llegado hasta acá buscando y leyendo información respecto a la consulta que hice y que muy amablemente atendiste en:

http://www.mvp-access.com/foro/topic85459_post514181.html#514181

Cada momento estoy un paso mas adelante en lograr ese procedimiento para asignar una función a un boton y utilizar una variable pública para almacenar el valor en el momento de pedir el informe (no es nada fácil, pues en una escala de 1 a 10 yo estoy en 2 y eso de strUnaVariable = Me!UnCampo me cuesta mucho interpretarlo).

Bendiciones


7
WSH / Emular SendKeys
« Último mensaje por xavi en Julio 28, 2020, 08:48:47 pm »
Palabras clave: sendkeys, bloqnum
Autor: A mi me lo pasó Mihura

Objetivo:
Emular el funcionamiento de SendKeys de Access pero sin el problema reconocido de activar/desactivar la tecla de bloqueo numérico.

Código: [Seleccionar]
Function fSendKeys(strKey as String)
  Dim ws As Object
  Set ws = CreateObject("WScript.shell")
  ws.SendKeys strKey
  Set ws = Nothing
End Function

8
Consejos, técnicas, artículos / Expandir hojas secundarias con teclado
« Último mensaje por xavi en Julio 21, 2020, 12:02:58 pm »
Palabras clave: tablas, vista, hoja de datos, expandir
Autor: xavi
Extraído de: experiencia propia

Después de mucho buscar como se expande una hoja secundaria en la vista hoja de datos de una tabla, un error de tecleo me ha dado la respuesta: Control + Mayúsculas + Flecha abajo.
Para contraer, flecha arriba.

Después ha resultado que si que estaba en alguna página web  :-\

En cualquier caso aquí me lo dejo para acordarme
9
Formularios / Colores en cuadro combinado y cuadro de lista
« Último mensaje por xavi en Junio 09, 2020, 08:14:37 pm »
Palabras clave: formulario, cuadro combinado, combobox, cuadro de lista, listbox, color, formato
Autor: Neckkito
Extraído de: Web de Neckkito

A raíz de una pregunta en el Foro de Access y VBA sobre como colorear registros en ComboBox y ListBox descubro esta pequeña joya.

El truco es utilizar los argumentos de la propiedad Formato que acostumbramos a "despreciar" (obviamente de forma prepotente)

Link al ejemplo (incluye PDF y ejemplo)

¡Gracias Miquel!
10
Formularios / Propiedades personalizadas en formularios
« Último mensaje por xavi en Junio 04, 2020, 12:59:43 pm »
Palabras clave: formulario, propiedad, personalizada
Autor: Chea
Extraído de: Hilo de MVP-Access + Teams AUGE

Antecedentes
El usuario Dabellaso pregunta en el foro sobre la posibilidad de asignar propiedades personalizadas a un formulario.

Al mirar la ayuda de Microsoft se lee que solo se pueden definir para los objetos Index, QueryDef y TableDef.

Posteriormente en el Teams de AUGE, Chea nos explicó que si que existe una forma de asignar propiedades a formularios.

Cita de: Chea
En realidad las propiedades no se guardan en los formularios, sino en el objeto correspondiente de la colección AllForms. Se usa de la misma manera que haríamos para una propiedad personalizada de la base de datos, pero haciendo referencia a AllForms("miformulario"). Por ejemplo:
 
Para añadir la propiedad:
CurrentProject.AllForms("frmVisorFacturae").Properties.Add "InterfazFirma", True
 
Para cambiarle el valor:
 
CurrentProject.AllForms("frmVisorFacturae").Properties("InterfazFirma") = blnNewValue
 
Para leer el valor:
UsarInterfazFirma = CurrentProject.AllForms("frmVisorFacturae").Properties("InterfazFirma")
 
Yo lo que hago para que el manejo final me resulte más sencillo es crearme una pareja de procedimientos Property en el módulo del formulario para leer y escribir esa Propiedad.

Al meterlo en los procedimientos Property el resultado es como si usáramos una variable persistente entre sesiones. Le decimos dentro del formulario InterfazFirma = True y ahí se queda hasta que no lo cambiemos aunque cerremos la aplicación.

Horus pregunta: Tengo una duda. Si lo hacemos así, en realidad la propiedad es del formulario en el que la hayamos agregado, no es común para todos los formularios. ¿Es correcto?

Respuesta:En puridad no es una propiedad del formulario, porque no se encuentra en el propio formulario, sino en el AccessObject correspondiente a ese formulario en la colección AllForms. Sin embargo, como esos objetos contienen información de cada formulario, en cierto modo podríamos decir que es una propiedad del formulario. No podemos decir Forms!Miformulario.Mipropiedad, pero sí podemos decir CurrentProject.AllForms("Miformulario").Mipropiedad. Y, efectivamente, la propiedad es para un formulario concreto, no para todos.
Páginas: [1] 2 3 ... 10