Saltar al contenido
macrosenexcel.com

Como Filtrar por Cliente Rango de Fechas Enviar Mail con Gmail y PDF Adjunto # 488

En esta macro de ejemplo se muestra Como Filtrar por Cliente Rango de Fechas y Enviar Reporte con PDF Adjunto Usando Gmail, si así como leíste usando el popular correo Gmail.

Existen en programarexcel.com muchos ejemplos que permite enviar mail con Excel, si requieres profundizar en el tema, haz click en el link.

Para manejar Excel en forma eficiente haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet, te lo recomiendo no te arrepentirás.  

Mira la Macro en acción Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.

 

 

Que hace exactamente la macro de ejemplo Como Filtrar por Cliente y Entre Dos Fechas, Enviando PDF Adjunto del Reporte Utilizando Gmail

Antes que nada conviene descargar el Libro Excel con la Macro, lo cual lo puedes hacer desde el link del final en forma gratis, una vez abierto el Libro de Excel se observará un botón el cual presionándolo se ejecutará un formulario de Excel, el cual tiene tres botones, uno para Filtrar por cliente, el segundo para enviar mail y el tercero para salir del formulario vba excel, además de textbox que se utilizan para ingresar el nombre del cliente, producto, proveedor o lo que se que quisiéramos listar.

El listbox de Excel que también se encuentra en el userform, permite mostrar los datos filtrados, es decir al ingresar el cliente en el primer Textbox y a medida que se va introduciendo el texto, se van buscando los datos coincidentes en la base de datos, que en este caso está en la hoja 1.Si quisiéramos agregarle un filtro por rango de fecha al filtro anterior, se debe ingresar la fecha en los Textbox destinados para ello y luego apretar el primer botón para ejecutar el filtro por fecha, en este caso el filtro incorporará el nombre del cliente más el rango de fechas, es decir se mostrarán registros que coincidan con el rango de fecha y cliente seleccionado.

Filtrados los datos o no, tal vez se requiere enviar todos los datos del listbox, presionando el icono que alude a Gmail, se procede a generar un reporte con dos datos filtrados, creando un pdf, enviando un mail utilizando GMAIL, adjuntando el archivo PDF creado, este PDF como es temporal se elimina, conjuntamente con la hoja de Excel que se usa para armar el reporte.

 

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Quizá sea de utilidad también

Como Enviar Mail con Firma e Imagen Guardada en Nuestra PC
Como Enviar Mail con Tabla en el Cuerpo del Mensaje Con Excel desde Outlook

Código de Excel VBA para Filtrar por Cliente una Base de Datos Excel Filtrar por Fecha y Enviar Mail con PDF adjunto.

El filtro por cliente y fecha se explica con detalle en los siguientes post por lo que no vamos a detenernos en ello:Como filtrar Por Cliente y Rango de FechasComo filtrar Por Cliente y Rango de Fechas y totalizar en listboxSe explicará con mayor detalle como crear un PDF y el envió de mail usando GMAIL, pero antes debes tener habilitadas las refeerencias que se muestran a continuación, para ello debes ir al Editor de VBA (Alt + F11), seleccionar el menú Herramientas luego Referencias y constata que tengas las mismas referencias que la imagen siguiente, si no las tienes búscalas y tilda para habilitar la referencia.

 

Al presionar el botón para enviar mail con el logo de Gmail, la macro se ejecuta y en primer lugar determina si se ingresó el mail en la casilla correspondiente en caso negativo avisa que debe ingresar mail y termina la macro sin ejecutar nada, en caso que se hay ingresado sigue, los códigos usados son:

If TextBox4 = Empty Then

MsgBox («Debe ingresar mail»), vbCritical, «AVISO»

Exit Sub

End If

Luego se procede a crear una hoja temporal que es donde la macro creará el reporte de Excel, los códigos siguientes crean una hoja al final le otorgan el nombre reporte, debe tener la precaución que si usted tiene una hoja reporte dará error, cambié en el código el nombre de la hoja que crea a temporal, temp o la que se le ocurra ya que la macro la eliminará al final, los códigos son:

ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

ActiveSheet.name = «Reporte»

Set a = Sheets(«Reporte»)

Luego se crea y se arregla un poco el reporte, que es lo que se enviará por mail, acá queda a criterio de cada uno poner lo que necesiten, lo principal es que pasa los datos del listbox a la hoja de Excel, usando los siguientes códigos VBA Excel:

 

For x = 1 To UserForm1.ListBox1.ListCount – 5

a.Cells(x + 2, «A») = ListBox1.List(x, 0)

a.Cells(x + 2, «B») = CDate(ListBox1.List(x, 1))

a.Cells(x + 2, «C») = ListBox1.List(x, 2)

a.Cells(x + 2, «D») = ListBox1.List(x, 3)

a.Cells(x + 2, «E») = ListBox1.List(x, 4)

a.Cells(x + 2, «F») = ListBox1.List(x, 5)

a.Cells(x + 2, «G») = CDec(ListBox1.List(x, 6))

Next

Luego se crea el nombre del archivo con el que se guardará el PDF que se creará y enviará como adjunto, la macro lo elimina al final, si se requiere dejarlo en la PC comentar o eliminar el comando Kill del final:

sn = ActiveSheet.name

mydoc = ThisWorkbook.Path & «» & sn & «.pdf»

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mydoc, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Ahora la macro envía el mail con GMAIL, para ello establece el destinatario que lo obtiene del textbox donde ingresamos el mail, establece el servidor SMTP saliente para poder enviar el mail, se configura el puerto, es importante que en la parte de autenticación modifiques la macro agregando tu nombre de correo y contraseña, debes modificar lo resaltado en azúl y dice «TU CORREO GMAIL» Y «TU CLAVE«

Dest = Me.TextBox4

Set Email = New CDO.Message

Email.Configuration.Fields(cdoSMTPServer) = «smtp.gmail.com» ‘Gmail

Email.Configuration.Fields(cdoSendUsingMethod) = 2

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = CLng(465) ‘gmail

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/» & «configuration/smtpauthenticate») = Abs(1)

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout») = 30

Auten = True

If Auten Then

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = «TUCorreoGMAIL» ‘ ej «marcrodos@gmail.com» debes ingresar correo desde donde envias el mail

                    Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = «TuCLAVE«

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

End If

Email.To = Dest

Email.From = «TuCORREO» ‘Es el mismo que usas para loguearte

Email.Subject = «Reporte de Movimientos»

Email.TextBody = «Estimado, en el archivo adjunto se encuentra el reporte de los últimos movimientos de su cuenta, confirmar recepción»

Email.AddAttachment mydoc

Email.Configuration.Fields.Update

Email.Send

If Err.Number = 0 Then

MsgBox «El mail con archivo adjunto fue enviado con éxito», vbInformation, «AVISO»

Else

MsgBox «Se produjo el siguiente error: » & Err.Description, vbCritical, «Error nro » & Err.Number

End If

Enviado el mail se procede a eliminar el documento PDF adjuntado, con el comando KILL si se quiere dejar el archivo en la PC se debe eliminar o comentar el código ( Poner un apostrofe ‘), luego se elimina la hoja temporal que creo el reporte, si no se desea eliminar se debe borrar o comentar el código:

Kill mydoc

a.Delete

El código completo del ejemplo Filtrar en Excel por Rango de Fechas y Enviar Mail con GMAIL, se muestra a continuación y en forma posterior se encuentra el link para descargar el ejemplo en forma GRATUITA como todos los ejemplos de esta página WEB.

Código que se inserta en un Formulario de VBAPrivate Sub CommandButton1_Click()Unload MeEnd Sub
Private Sub CommandButton2_Click()On Error Resume NextSet b = Sheets(«Hoja1»)uf = b.Range(«A» & Rows.Count).End(xlUp).Rowdato1 = CDate(TextBox2)dato2 = CDate(TextBox3)If dato2 = Empty Or dato1 = emtpy ThenMsgBox («Debe ingresar datos para consulta entre rango de fechas»), vbCritical, «AVISO»Exit SubEnd IfIf dato2 < dato1 ThenMsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»Exit SubEnd If
b.AutoFilterMode = FalseMe.ListBox1 = ClearMe.ListBox1.RowSource = Clear
‘Adiciona un item al listbox reservado para la cabeceraUserForm1.ListBox1.AddItem
For i = 2 To uf   strg = b.Cells(i, 1).Value   dato0 = CDate(b.Cells(i, 2).Value)   If UCase(strg) Like UCase(TextBox1.Value) & «*» And dato0 >= dato1 And dato0 <= dato2 Then       Me.ListBox1.AddItem b.Cells(i, 1)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)   End IfNext i’Carga los datos de la cabecera en listboxFor ii = 0 To 7UserForm1.ListBox1.List(0, ii) = Sheets(«Hoja1»).Cells(1, ii + 1)Next iiUserForm1.ListBox1.AddItemUserForm1.ListBox1.AddItemUserForm1.ListBox1.AddItemUserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 0) = «Total Importe»For x = 0 To UserForm1.ListBox1.ListCount – 1t = CDec(UserForm1.ListBox1.List(x, 6))tot = tot + tt = 0Next xUserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = Format(tot, » «»U$S»» #,##0.00 «)UserForm1.ListBox1.AddItemUserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 0) = «Total de registros:»UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = UserForm1.ListBox1.ListCount – 5Me.ListBox1.ColumnWidths = «170 pt;70 pt;50 pt;50 pt;50 pt;50 pt;50 pt»End Sub
Private Sub CommandButton3_Click()Unload UserForm1End Sub
Private Sub CommandButton4_Click()Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseOn Error Resume Next
Dim Email As CDO.Message, Auten As Boolean, Dest As String, mydoc As String
If TextBox4 = Empty ThenMsgBox («Debe ingresar mail»), vbCritical, «AVISO»Exit SubEnd If
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)ActiveSheet.name = «Reporte»Set a = Sheets(«Reporte»)
For x = 1 To UserForm1.ListBox1.ListCount – 5a.Cells(x + 2, «A») = ListBox1.List(x, 0)a.Cells(x + 2, «B») = CDate(ListBox1.List(x, 1))a.Cells(x + 2, «C») = ListBox1.List(x, 2)a.Cells(x + 2, «D») = ListBox1.List(x, 3)a.Cells(x + 2, «E») = ListBox1.List(x, 4)a.Cells(x + 2, «F») = ListBox1.List(x, 5)a.Cells(x + 2, «G») = CDec(ListBox1.List(x, 6))Next
a.Cells(x + 4, «A») = ListBox1.List(x + 2, 0)a.Cells(x + 5, «A») = ListBox1.List(x + 3, 0)a.Cells(x + 4, «B») = ListBox1.List(x + 2, 1)a.Cells(x + 5, «B») = ListBox1.List(x + 3, 1)
a.Activatea.Range(«A1») = «REPORTE DE VENTAS»
With a.Range(«A1:G1»).Merge.VerticalAlignment = xlCenter.HorizontalAlignment = xlCenter.RowHeight = 20.Font.Size = 16End With
a.Range(«A2») = «CLIENTE»a.Range(«B2») = «FECHA»a.Range(«C2») = «COMPROBANTE»a.Range(«D2») = «TIPO»a.Range(«E2») = «SUC»a.Range(«F2») = «N COMP»a.Range(«G2») = «IMPORTE»uf = a.Range(«G» & Rows.Count).End(xlUp).Rowa.Range(«G2:G» & uf).NumberFormat = «#.#,0″a.Range(«B2:B» & uf).NumberFormat = «dd/mm/yyyy»a.Range(«A:G»).Columns.AutoFita.Range(«A:A»).ColumnWidth = 31
sn = ActiveSheet.namemydoc = ThisWorkbook.Path & «» & sn & «.pdf»ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=mydoc, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Dest = Me.TextBox4

Set Email = New CDO.Message

Email.Configuration.Fields(cdoSMTPServer) = «smtp.gmail.com» ‘Gmail

Email.Configuration.Fields(cdoSendUsingMethod) = 2

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = CLng(465) ‘gmail

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/» & «configuration/smtpauthenticate») = Abs(1)

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout») = 30

Auten = True

If Auten Then

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = «TUCorreoGMAIL» ‘ ej «marcrodos@gmail.com» debes ingresar correo desde donde envias el mail

              Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = «TuCLAVE»

Email.Configuration.Fields.Item(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True

End If

Email.To = Dest

Email.From = «TuCORREO» ‘Es el mismo que usas para loguearte

Email.Subject = «Reporte de Movimientos»

Email.TextBody = «Estimado, en el archivo adjunto se encuentra el reporte de los últimos movimientos de su cuenta, confirmar recepción»

Email.AddAttachment mydoc

Email.Configuration.Fields.Update

Email.Send

If Err.Number = 0 Then

MsgBox «El mail con archivo adjunto fue enviado con éxito», vbInformation, «AVISO»

Else

MsgBox «Se produjo el siguiente error: » & Err.Description, vbCritical, «Error nro » & Err.Number

End If

Kill mydoc

a.Delete

Sheets(«Hoja1»).Select

Application.DisplayAlerts = True

Application.ScreenUpdating = True

End Sub

 

Private Sub Label2_Click()

TextBox4.SetFocus

End Sub

Private Sub ListBox3_Click()

On Error Resume Next

UserForm1.TextBox4 = Empty

fila = UserForm1.ListBox3.ListIndex

UserForm1.TextBox4 = UserForm1.ListBox3.List(fila, 1)

UserForm1.ListBox3.Visible = False

If TextBox4 = Empty Then

UserForm1.Label2.Visible = True ‘hace visible el label

Else

UserForm1.Label2.Visible = False

End If

 

If TextBox8 = Empty Then

UserForm1.Label1.Visible = True ‘hace visible el label

Else

UserForm1.Label1.Visible = False

End If

Me.CommandButton4.SetFocus

End Sub

Private Sub TextBox1_Change()

On Error Resume Next

Set b = Sheets(«Hoja1»)

uf = b.Range(«A» & Rows.Count).End(xlUp).Row

If Trim(TextBox1.Value) = «» Then

   Me.ListBox1.RowSource = «Hoja1!A1:G» & uf

   Exit Sub

End If

 

 

b.AutoFilterMode = False

Me.ListBox1 = Clear

Me.ListBox1.RowSource = Clear

dato1 = CDate(TextBox2)

dato2 = CDate(TextBox3)

‘Adiciona un item al listbox reservado para la cabecera

UserForm1.ListBox1.AddItem

 

For i = 2 To uf

   strg = b.Cells(i, 1).Value

   If UCase(strg) Like UCase(TextBox1.Value) & «*» Then

       Me.ListBox1.AddItem b.Cells(i, 1)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)

       Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)

   End If

Next i

‘Carga los datos de la cabecera en listbox

For ii = 0 To 7

UserForm1.ListBox1.List(0, ii) = Sheets(«Hoja1»).Cells(1, ii + 1)

Next ii

UserForm1.ListBox1.AddItem

UserForm1.ListBox1.AddItem

UserForm1.ListBox1.AddItem

UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 0) = «Total Importe»

 

For x = 0 To UserForm1.ListBox1.ListCount – 1

t = CDec(UserForm1.ListBox1.List(x, 6))

tot = tot + t

t = 0

Next x

UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = Format(tot, » «»U$S»» #,##0.00 «)

 

UserForm1.ListBox1.AddItem

UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 0) = «Total de registros:»

UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount – 1, 1) = UserForm1.ListBox1.ListCount – 5

UserForm1.TextBox2 = Clear

UserForm1.TextBox3 = Clear

Me.ListBox1.ColumnWidths = «170 pt;70 pt;50 pt;50 pt;50 pt;50 pt;50 pt»

End Sub

 

Private Sub TextBox2_Change()

If Len(UserForm1.TextBox2) = 10 Then UserForm1.TextBox3.SetFocus

End Sub

 

Private Sub TextBox3_Change()

If Len(UserForm1.TextBox3) = 10 Then UserForm1.CommandButton2.SetFocus

End Sub

 

Private Sub TextBox4_Change()

Application.ScreenUpdating = False

Application.DisplayAlerts = False

On Error Resume Next

Dim cn As ADODB.Connection, rs As ADODB.Recordset

 

If TextBox4 = Empty Then

UserForm1.Label2.Visible = True ‘hace visible el label

Else

UserForm1.Label2.Visible = False

End If

 

If Len(UserForm1.TextBox4) <= 2 Then

UserForm1.ListBox3.Visible = False

Exit Sub

Else

UserForm1.ListBox3.Visible = True

End If

 

Set cn = New ADODB.Connection

Set rs = New ADODB.Recordset

Set a = Sheets(«Agenda»)

 

cn.Open «Provider=Microsoft.ACE.OLEDB.12.0;» & «Data Source=» & ThisWorkbook.FullName & «;Extended Properties=»»Excel 12.0;HDR=Yes;»»»

 

If Len(UserForm1.TextBox4) > 2 Then

Sql = «SELECT * FROM [» & «Agenda$» & «] WHERE Ucase(» & a.Range(«A1») & «) LIKE Ucase(‘%» & UserForm1.TextBox4 & «%’) ORDER BY Nombre ASC»

Set rs = cn.Execute(Sql)

UserForm1.ListBox3.Clear

If rs.EOF = True Then

rs.Close

Set rs = Nothing

cn.Close

Set cn = Nothing

UserForm1.ListBox3.Visible = False

Exit Sub

Else

UserForm1.ListBox3.Column = 3

UserForm1.ListBox3.ColumnWidths = «70 pt;100 pt;80 pt»

rs.MoveFirst

Do While Not rs.EOF

    UserForm1.ListBox3.AddItem rs.Fields(0).Value

    UserForm1.ListBox3.List(UserForm1.ListBox3.ListCount – 1, 1) = rs.Fields(1).Value

    UserForm1.ListBox3.List(UserForm1.ListBox3.ListCount – 1, 2) = rs.Fields(2).Value

    rs.MoveNext

Loop

End If

 

End If

Set rs = Nothing

cn.Close

Set cn = Nothing

‘Si solo hay un dato coincidente directamente lo busca y carga sus datos, al seleccionarlo se ejecuta el evento click del listbox

If UserForm1.ListBox3.ListCount – 1 = 0 Then

UserForm1.ListBox3.Selected(0) = True

UserForm1.ListBox3.Visible = False

End If

Application.ScreenUpdating = True

Application.ScreenUpdating = True

End Sub

Private Sub UserForm_Initialize()

Dim fila As Long

Application.DisplayAlerts = False

Application.ScreenUpdating = False

Set b = Sheets(«Hoja1»)

uf = b.Range(«A» & Rows.Count).End(xlUp).Row

uc = b.Cells(1, Columns.Count).End(xlToLeft).Address

wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)

With Me.ListBox1

    .ColumnCount = 7

    .ColumnWidths = «170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»

    .RowSource = «Hoja1!A1:» & wc & uf

End With

Application.DisplayAlerts = True

Application.ScreenUpdating = True

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

On Error GoTo Fin

If CloseMode <> 1 Then Cancel = True

Fin:

End Sub

 

Function TableHTML() As String

Dim col As Long, fil As Long

canfil = ActiveSheet.UsedRange.Rows.Count

cancol = ActiveSheet.UsedRange.Columns.Count

stable = «<Div><table>»

For f = 1 To canfil

stable = stable & «<tr>»

    For c = 1 To cancol

        stable = stable & «<td>» & Cells(f, c) & » </td>»

    Next c

    stable = stable & «</tr>»

Next f

stable = stable & «</table> <br><br><br><br><br></Div>»

TableHTML = stable

End Function

 

Código que se inserta en un módulo de VBA

‘**************https://macrosenexcel.com  **** https://youtube.com/programarexcel*********

#If VBA7 And Win64 Then

‘Si es de 64 bits

Public Declare PtrSafe Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr

Public Declare PtrSafe Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Public Declare PtrSafe Function GetWindowLongPtr Lib «USER32» Alias «GetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr

Public Declare PtrSafe Function SetWindowLongPtr Lib «USER32» Alias «SetWindowLongPtrA» (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr

Public Declare PtrSafe Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As LongPtr

Public Declare PtrSafe Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr

#Else

‘Si es de 32 bits

Public Declare Function ShellExecute Lib «shell32.dll» Alias «ShellExecuteA» (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Declare Function FindWindow Lib «USER32» Alias «FindWindowA» (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetWindowLong Lib «USER32» Alias «GetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib «USER32» Alias «SetWindowLongA» (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function DrawMenuBar Lib «USER32» (ByVal hwnd As Long) As Long

Public Declare Function RegOpenKeyA Lib «advapire32.dll» (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

#End If

Sub muestra1()

UserForm1.Show

End Sub

 
 

Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Donate:
Paypal: https://paypal.me/programarexcel
Bitcoin: 1KBGGb8fyDzyR3X1Rie6m7VguzaAfngNbd
Ether: 0x41Bbd24556914C83a31217eBb3BC49789b66e407