在VBA powerpoint中显示供用户选择的颜色选择器

在VBA powerpoint中显示供用户选择的颜色选择器,vba,colors,powerpoint,Vba,Colors,Powerpoint,我正在为powerpoint制作一个插件,我需要使用它来提供给定的颜色,最好是RGB颜色。VBA中是否有显示颜色选择器的方法 在Excel中获取调色板颜色很容易。这将根据调色板中选定的颜色更改工作表1中单元格的背景: Sub TestMe() Dim rgbSet As Variant: rgbSet = Application.Dialogs(xlDialogEditColor).Show(1) If rgbSet Then Worksheets(1).Cells.Inter

我正在为powerpoint制作一个插件,我需要使用它来提供给定的颜色,最好是RGB颜色。VBA中是否有显示颜色选择器的方法


Excel中获取调色板颜色很容易。这将根据调色板中选定的颜色更改工作表1中单元格的背景:

Sub TestMe()

    Dim rgbSet As Variant: rgbSet = Application.Dialogs(xlDialogEditColor).Show(1)
    If rgbSet Then Worksheets(1).Cells.Interior.Color = ThisWorkbook.Colors(1)

End Sub
在PowerPoint(和其他VBA宿主应用程序)中,任务需要外部dll:

Option Explicit

Private Declare Function ChooseColor_Dlg Lib "comdlg32.dll" _
    Alias "ChooseColorA" (pcc As CHOOSECOLOR_TYPE) As Long   

Private Type CHOOSECOLOR_TYPE
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Private Const CC_ANYCOLOR = &H100
Private Const CC_ENABLEHOOK = &H10
Private Const CC_ENABLETEMPLATE = &H20
Private Const CC_ENABLETEMPLATEHANDLE = &H40
Private Const CC_FULLOPEN = &H2
Private Const CC_PREVENTFULLOPEN = &H4
Private Const CC_RGBINIT = &H1
Private Const CC_SHOWHELP = &H8
Private Const CC_SOLIDCOLOR = &H80
在同一模块中,编写以下代码:

Private Sub TestMe()

    Dim CC_T As CHOOSECOLOR_TYPE, Retval As Variant
    Static BDF(16) As Long
    BDF(0) = RGB(0, 255, 0)     'first defined color
    BDF(1) = RGB(255, 0, 0)     'second defined color
    BDF(2) = RGB(0, 0, 255)     'third defined color 

    With CC_T
        .lStructSize = Len(CC_T)
        .flags = CC_RGBINIT Or CC_ANYCOLOR Or CC_FULLOPEN Or _
        CC_PREVENTFULLOPEN
        .rgbResult = RGB(0, 255, 0)
        .lpCustColors = VarPtr(BDF(0))
    End With

    Retval = ChooseColor_Dlg(CC_T)

    If Retval <> 0 Then
        Dim labelObj As Object
        Set labelObj = ActivePresentation.Slides(1).Shapes.AddLine(100, 100, 200, 200).Line
        With labelObj
            .Weight = 25
            .ForeColor.RGB = CC_T.rgbResult
        End With
    End If

End Sub
Private-Sub-TestMe()
Dim CC_T作为选择颜色类型,Retval作为变体
静态BDF(16)的长度
BDF(0)=RGB(0,255,0)“第一个定义的颜色
BDF(1)=RGB(255,0,0)“第二种定义颜色
BDF(2)=RGB(0,0255)“第三种定义颜色
用CC\T
.L结构尺寸=长度(CC_T)
.flags=CC_RGBINIT或CC_ANYCOLOR或CC_FULLOPEN或_
CC_完全打开
.rgbResult=RGB(0,255,0)
.lpCustColors=VarPtr(BDF(0))
以
Retval=ChooseColor\u Dlg(CC\u T)
如果Retval为0,则
作为对象的Dim labelObj
设置labelObj=ActivePresentation.Slides(1).Shapes.AddLine(100100200200).Line
拉贝洛布
.重量=25
.ForeColor.RGB=CC_T.rgbResult
以
如果结束
端接头

这是最终的结果:


在Excel中获取调色板颜色很容易。这将根据调色板中选定的颜色更改工作表1中单元格的背景:

Sub TestMe()

    Dim rgbSet As Variant: rgbSet = Application.Dialogs(xlDialogEditColor).Show(1)
    If rgbSet Then Worksheets(1).Cells.Interior.Color = ThisWorkbook.Colors(1)

End Sub
在PowerPoint(和其他VBA宿主应用程序)中,任务需要外部dll:

Option Explicit

Private Declare Function ChooseColor_Dlg Lib "comdlg32.dll" _
    Alias "ChooseColorA" (pcc As CHOOSECOLOR_TYPE) As Long   

Private Type CHOOSECOLOR_TYPE
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As Long
    flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Private Const CC_ANYCOLOR = &H100
Private Const CC_ENABLEHOOK = &H10
Private Const CC_ENABLETEMPLATE = &H20
Private Const CC_ENABLETEMPLATEHANDLE = &H40
Private Const CC_FULLOPEN = &H2
Private Const CC_PREVENTFULLOPEN = &H4
Private Const CC_RGBINIT = &H1
Private Const CC_SHOWHELP = &H8
Private Const CC_SOLIDCOLOR = &H80
在同一模块中,编写以下代码:

Private Sub TestMe()

    Dim CC_T As CHOOSECOLOR_TYPE, Retval As Variant
    Static BDF(16) As Long
    BDF(0) = RGB(0, 255, 0)     'first defined color
    BDF(1) = RGB(255, 0, 0)     'second defined color
    BDF(2) = RGB(0, 0, 255)     'third defined color 

    With CC_T
        .lStructSize = Len(CC_T)
        .flags = CC_RGBINIT Or CC_ANYCOLOR Or CC_FULLOPEN Or _
        CC_PREVENTFULLOPEN
        .rgbResult = RGB(0, 255, 0)
        .lpCustColors = VarPtr(BDF(0))
    End With

    Retval = ChooseColor_Dlg(CC_T)

    If Retval <> 0 Then
        Dim labelObj As Object
        Set labelObj = ActivePresentation.Slides(1).Shapes.AddLine(100, 100, 200, 200).Line
        With labelObj
            .Weight = 25
            .ForeColor.RGB = CC_T.rgbResult
        End With
    End If

End Sub
Private-Sub-TestMe()
Dim CC_T作为选择颜色类型,Retval作为变体
静态BDF(16)的长度
BDF(0)=RGB(0,255,0)“第一个定义的颜色
BDF(1)=RGB(255,0,0)“第二种定义颜色
BDF(2)=RGB(0,0255)“第三种定义颜色
用CC\T
.L结构尺寸=长度(CC_T)
.flags=CC_RGBINIT或CC_ANYCOLOR或CC_FULLOPEN或_
CC_完全打开
.rgbResult=RGB(0,255,0)
.lpCustColors=VarPtr(BDF(0))
以
Retval=ChooseColor\u Dlg(CC\u T)
如果Retval为0,则
作为对象的Dim labelObj
设置labelObj=ActivePresentation.Slides(1).Shapes.AddLine(100100200200).Line
拉贝洛布
.重量=25
.ForeColor.RGB=CC_T.rgbResult
以
如果结束
端接头

这是最终的结果:


.

在Dietrich Baumgarten关于如何在Word中使用颜色选择器的回答中,在64位PowerPoint中,CHOOSECOLOR类型需要另一种结构。在Dietrich Baumgarten关于如何在Word中使用颜色选择器的回答中,在64位PowerPoint中,CHOOSECOLOR类型需要另一种结构。