无法使颜色select器在Excel 2010 64位中工作
您好,我正在努力获取Excel 2010 64位更新的VBA代码。 我已经检查了所有,包括StackOverflow这里一个翔实的职位: StackOverflow问题我明白我必须声明PtrSafe并创buildLongPtr和LongLong适用,但我得到一个“编译错误。types不匹配”的“.rgbResult”部分私人职能代码。 任何任何和所有的帮助将不胜感激。 我的代码如下:
Option Explicit #If VBA7 Then #If Win64 Then Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As LongPtr Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 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 #Else '{{{This Section of Code works ok so i have excluded it to save space as its the same as above without the ptr}}}}} #End If #Else '{{{This Section of Code works ok so i have excluded it to save space}}}}} #End If #If VBA7 Then #If Win64 Then Private Declare PtrSafe Function ShowColor Lib "comdlg32.dll" Alias "ShowColorA" (pShowColor As ShowColor) As LongPtr Dim ChooseColorStructure As ChooseColor Dim Custcolor(16) As LongPtr Dim lReturn As LongPtr On Error GoTo ErrEnd: ChooseColorStructure.lStructSize = LenB(ChooseColorStructure) ChooseColorStructure.hwndOwner = FindWindow("XLMAIN", Application.Caption) ChooseColorStructure.hInstance = 0 ChooseColorStructure.lpCustColors = StrConv(Custcolor(16), vbUnicode) ChooseColorStructure.flags = 0 If ChooseColor(ChooseColorStructure) <> 0 Then ShowColor = ChooseColorStructure.rgbResult Custcolor(16) = StrConv(ChooseColorStructure.lpCustColors, vbFromUnicode) On Error GoTo 0 Else ShowColor = -1 End If ErrEnd: End Function #Else '{{{This Section of Code works ok so i have excluded it to save space}}}}} #End If #Else '{{{This Section of Code works ok so i have excluded it to save space}}}}} End Function
lStructSize As LongPtr
你要超载声明成员LongPtr而不是Long。 只有当成员是指针或句柄types时,才应该使用LongPtr,lStructSize不是指针。 其他几个成员也一样,包括rgbResult。 它需要看起来像这样:
Private Type ChooseColor lStructSize As Long hwndOwner As LongPtr hInstance As LongPtr rgbResult As Long lpCustColors As LongPtr flags As Long lCustData As LongPtr lpfnHook As LongPtr lpTemplateName As String End Type
search一些之后,我很确定ChooseColor实际上应该as Long
而不是as LongPtr
我做了一个谷歌search引号声明:“ Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As LongPtr
”
我只得到了2个结果:这个问题,并在其他网站上的post,但我不能读它,因为它是在法国,我一直有意义学习,但没有。
我做了一个search:“ Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
”,我得到了更多的结果,所以我认为它应该被宣布为一个长longPtr在那一个上。 即使在64有些仍然需要返回longs而不是longPtr
编辑
这个页面: http ://www.jkp-ads.com/articles/apideclarations.asp?AllComments=True提到chooseColor函数的注释,他们用As Long
而不是longPtr在那里声明。 以防万一如果你想参考:)
- 你将如何删除Excel中的行,使范围(select,ActiveCell.SpecialCells(xlLastCell))。select不会select现在空的行
- 从excel粘贴到文本框
- 从ActiveCell中selectEntireColumn,除了前3行
- Excel:用一个“;”出现在包含“;”和一个范围内的“单词”的单元格中的次数
- 将选定的范围复制到另一个工作表
- Excel VBA – 如何select与以前的单元格中的值相对应的范围?
- 自动filter后取消select范围
- VBA – 列表框删除所有select和下一步全选
- Excel VBA:查找每天的细胞范围(未指定),并将公式应用于新细胞