MS Word VBA:我需要一个调色板对话框

Ste*_* G. 5 vba dialog ms-word color-picker word-2010

在 MS Word 2010 的 VBA 中,如何让 Word 显示调色板对话框以便用户可以选择颜色?

在此输入图像描述

有大量关于如何在 Excel 中执行此操作的示例,但我没有找到对 Word 用户的任何帮助。下面是 Excel 的代码:

Application.Dialogs(xlDialogPatterns).Show
Run Code Online (Sandbox Code Playgroud)

问题是,没有 wdDialogPatterns 等效项,我也找不到任何名称暗示调色板对话框的内容。我找到了 wdFormatBordersAndShading,但它并不完全相同:我希望用户选择一种颜色以供以后重复使用。

谢谢!

Ádá*_*zki 5

据我所知,Word 没有与 Excel 相同的选项。
\n您可以通过 .dll 调用 Windows 内置解决方案。
\n我最近创建了一个,以便能够选择更多颜色作为文本背景颜色。

\n\n

首先是 Windows 文档,您可以在其中查看可以修改的所有选项:
\n https://msdn.microsoft.com/en-us/library/windows/desktop/ms646830(v=vs.85).aspx
\n提示: CC_ANYCOLOR = 0x00000100 = &H100 (您需要在VBA中使用此形式)

\n\n

从我的代码示例中,您可以看到如何实现它:
\n这位于模块的顶部:

\n\n
Private Type CHOOSECOLORSTRUCT\n   lStructSize     As Long\n   hwndOwner       As Long\n   hInstance       As Long\n   rgbResult       As Long\n   lpCustColors    As Long\n   flags           As Long\n   lCustData       As Long\n   lpfnHook        As Long\n   lpTemplateName  As String\nEnd Type\n\nPrivate Declare Function ChooseColor Lib "comdlg32.dll" _\n   Alias "ChooseColorA" _\n  (lpcc As CHOOSECOLORSTRUCT) As Long\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是选择器调用函数,可以选择提交 OriginalColor:

\n\n
Public Function PickColor(Optional OriginalColor As Variant = 8421376) \'You can define any colour as default instead of 8421376)\n    Dim cc As CHOOSECOLORSTRUCT\n    Dim dwCustClrs(0 To 15) As Long\n\n    With cc\n        .Flags = &H100 Or &H1 Or &H2\n        .lStructSize = Len(cc)\n        .hwndOwner = 0\n        .lpCustColors = VarPtr(dwCustClrs(0))\n        .rgbResult = OriginalColor\n    End With\n\n    If CHOOSECOLOR(cc) = 1 Then\n        PickColor = cc.rgbResult\n    End If\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n\n

最后,这就是您在实际操作中的调用方式:

\n\n
Sub F_H\xc3\xa1tt\xc3\xa9rSz\xc3\xadnV\xc3\xa1laszt\xc3\xb3()\n    With Selection.Font.Shading\n        .BackgroundPatternColor = PickColor(Selection.Font.Shading.BackgroundPatternColor)\n    End With\nEnd Sub\n
Run Code Online (Sandbox Code Playgroud)\n