[英]MS Word VBA: I need a color palette dialog box
據我所知,Word 沒有與 Excel 相同的選項。
相反,您可以通過 .dll 調用 Windows 內置解決方案。
我最近創建了一個,以便能夠選擇更多顏色作為文本背景顏色。
首先是 Windows 文檔,您可以在其中看到所有可以修改的選項:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms646830(v=vs.85).aspx
提示:CC_ANYOLOR = 0x00000100 = &H100(你需要在 VBA 中使用這種形式)
從我的代碼示例中您可以看到如何實現它:
這是模塊的頂部:
Private Type CHOOSECOLORSTRUCT
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 Declare Function ChooseColor Lib "comdlg32.dll" _
Alias "ChooseColorA" _
(lpcc As CHOOSECOLORSTRUCT) As Long
這是帶有可選提交的 OriginalColor 的選擇器調用函數:
Public Function PickColor(Optional OriginalColor As Variant = 8421376) 'You can define any colour as default instead of 8421376)
Dim cc As CHOOSECOLORSTRUCT
Dim dwCustClrs(0 To 15) As Long
With cc
.Flags = &H100 Or &H1 Or &H2
.lStructSize = Len(cc)
.hwndOwner = 0
.lpCustColors = VarPtr(dwCustClrs(0))
.rgbResult = OriginalColor
End With
If CHOOSECOLOR(cc) = 1 Then
PickColor = cc.rgbResult
End If
End Function
最后,這就是您在實際中調用它的方式:
Sub F_HáttérSzínVálasztó()
With Selection.Font.Shading
.BackgroundPatternColor = PickColor(Selection.Font.Shading.BackgroundPatternColor)
End With
End Sub
在 x64 Word 上,您必須按如下方式修改 Ádám 的代碼:
Option Explicit
Option Base 0
Private Type CHOOSECOLOR
lStructSize As LongLong
hwndOwner As LongPtr
hInstance As LongPtr
rgbResult As LongLong
lpCustColors As LongPtr
flags As LongLong
lCustData As LongLong
lpfnHook As LongLong
lpTemplateName As String
End Type
Private Declare PtrSafe Function MyChooseColor _
Lib "comdlg32.dll" Alias "ChooseColorW" _
(ByRef pChoosecolor As CHOOSECOLOR) As Boolean
Public Function GetColor(ByRef col As LongLong) As _
Boolean
Static CS As CHOOSECOLOR
Static CustColor(15) As LongLong
CS.lStructSize = Len(CS)
CS.hwndOwner = 0
CS.flags = &H1 Or &H2
CS.lpCustColors = VarPtr(CustColor(0))
CS.rgbResult = col
CS.hInstance = 0
GetColor = MyChooseColor(CS)
If GetColor = False Then Exit Function
GetColor = True
col = CS.rgbResult
End Function
例如,將該函數與Font
對象的TextColor
屬性一起使用:
Sub FontColorTest()
Dim col As LongLong
col = rgb(200, 100, 50)
GetColor col
Dim p As Word.Paragraph
Set p = ActiveDocument.Paragraphs(1)
p.Range.Font.TextColor.rgb = CLng(col)
End Sub
請注意, GetColor
函數需要LongLong
類型的參數,而TextColor.rgb
屬性的類型為Long
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.