簡體   English   中英

MS Word VBA:我需要一個調色板對話框

[英]MS Word VBA: I need a color palette dialog box

在 MS Word 2010 的 VBA 中,如何讓 Word 調出調色板對話框以便用戶可以選擇顏色?

在此處輸入圖片說明

有很多關於如何在 Excel 中執行此操作的示例,但我還沒有找到對 Word 用戶的任何幫助。 Excel的代碼如下:

Application.Dialogs(xlDialogPatterns).Show

問題是,沒有 wdDialogPatterns 等效項,我也找不到任何名稱暗示調色板對話框的內容。 我找到了 wdFormatBordersAndShading,但它並不完全相同:我希望用戶選擇一種顏色供以后重復使用。

謝謝!

據我所知,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM