visual for ejemplos descargar code applications vba excel-vba

for - vba excel pdf



Colores personalizados Excel 64-bit y comdlg32.dll (2)

Estoy intentando adaptar el código aquí o aquí para abrir la paleta de colores personalizada en Excel 2010 de 64 bits pero no puedo hacer que funcione. El código en ambos sitios funciona bien en Excel 2003

Un intento

Option Explicit Private Type CHOOSECOLOR lStructSize As Long hwndOwner As Long hInstance As Long rgbResult As Long lpCustColors As String flags As Long lCustData As Long lpfnHook As Long lpTemplateName As String End Type Private Declare PtrSafe Function ChooseColorAPI Lib "comdlg32.dll" Alias _ "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As Long Dim CustomColors() As Byte Private Sub Command1_Click() Dim cc As CHOOSECOLOR Dim Custcolor(16) As Long Dim lReturn As Long cc.lStructSize = Len(cc) cc.hwndOwner = Application.Hwnd cc.hInstance = 0 cc.lpCustColors = StrConv(CustomColors, vbUnicode) cc.flags = 0 lReturn = ChooseColorAPI(cc) If lReturn <> 0 Then Application.Caption = "RGB Value User Chose: " & Str$(cc.rgbResult) Application.BackColor = cc.rgbResult '' Visual Basic only **** Application.Section(0).BackColor = cc.rgbResult '' Access only ********** CustomColors = StrConv(cc.lpCustColors, vbFromUnicode) Else MsgBox "User chose the Cancel Button" End If End Sub Private Sub Form_Load() ReDim CustomColors(0 To 16 * 4 - 1) As Byte Dim i As Integer For i = LBound(CustomColors) To UBound(CustomColors) CustomColors(i) = 0 Next i End Sub

Esto funciona bien pero no muestra el diálogo. También intenté cambiar algunos tipos LONG a LONGPTR sin éxito. ¿Alguien sabe cómo hacerlo funcionar en una máquina de 64 bits? o si es posible? Tal vez hay una nueva biblioteca?

Gracias

Editar: Reformulación leve con oferta de recompensa ... ¿Cómo accedo y uso este selector de color personalizado (imagen a continuación) en Excel 2010 de 64 bits (DEBE trabajar en 64 bits) para establecer celdas en Excel 2010 con el color elegido y almacenar el color? La imagen está tomada de Excel 2010 de 64 bits seleccionando el botón de relleno> más colores> Personalizado

XHTML válido http://img851.imageshack.us/img851/2057/unlednvn.png


Los archivos dll AFAIK de 32 bits no pueden ser utilizados por una aplicación de 64 bits.
Use comdlg64.dll en su lugar (si existe tal dll).

El uso de google revela que hay una gran cantidad de virus flotando en la red con ese nombre.
Entonces, si comdlg64.dll no está en su máquina, ¡no lo descargue de la red!
(A menos que quieras experimentar zombieness).


Dos cosas que probaría. Primero, reemplace cada uso de Long con LongPtr .

Private Type CHOOSECOLOR lStructSize As LongPtr hwndOwner As LongPtr hInstance As LongPtr rgbResult As LongPtr lpCustColors As String flags As LongPtr lCustData As LongPtr lpfnHook As LongPtr lpTemplateName As String End Type Private Declare PtrSafe Function ChooseColorAPI Lib "comdlg32.dll" Alias _ "ChooseColorA" (pChoosecolor As CHOOSECOLOR) As LongPtr

Segundo, reemplace el uso de Len con LenB .

Private Sub Command1_Click() Dim cc As CHOOSECOLOR Dim Custcolor(16) As LongPtr Dim lReturn As LongPtr cc.lStructSize = LenB(cc) cc.hwndOwner = Application.Hwnd cc.hInstance = 0 cc.lpCustColors = StrConv(CustomColors, vbUnicode) cc.flags = 0 lReturn = ChooseColorAPI(cc) If lReturn <> 0 Then Application.Caption = "RGB Value User Chose: " & Str$(cc.rgbResult) Application.BackColor = cc.rgbResult '' Visual Basic only **** Application.Section(0).BackColor = cc.rgbResult '' Access only ********** CustomColors = StrConv(cc.lpCustColors, vbFromUnicode) Else MsgBox "User chose the Cancel Button" End If End Sub Private Sub Form_Load() ReDim CustomColors(0 To 16 * 4 - 1) As Byte Dim i As Integer For i = LBound(CustomColors) To UBound(CustomColors) CustomColors(i) = 0 Next i End Sub

Más información

Tipo de datos LongPtr

Función LenB