如何在下拉Word文件中擁有無限的文字值

如何在下拉Word文件中擁有無限的文字值

我需要根據Word中的下拉選擇輸入一些文字。但它只允許 255 個字元。

有沒有辦法讓我輸入更多內容?

也許有解決辦法?

我沒有找到很多相關資訊。請引導我走正確的路。

在此輸入影像描述

答案1

價值不能超過255 個字符,並且在任何情況下都不會顯示在文檔中- 即使要做到這一點,您也必須將內容控件“映射”到自定義XML 部件中的元素,將純文本內容控件映射到該元素元素並將該控制項放入文件中。

所以你必須以其他方式做到這一點。有多種可能性,每種都有各自的優點和缺點。 ega 將所有文字放入特定庫中的Building Block 項目中(例如「自訂1」和類別(例如您專為此控制項所建立的類別)。b. 使用舊版表單欄位下拉清單和一個插入您想要的值的字段,取決於c. “使用 VBA”。

(a) 和 (b) 是我能想到的唯一不需要 VBA 的方法。一旦使用 VBA,就會有多種可能性。

對於 (a),Building Block 項目必須位於 Word 範本或特殊 Building Block 範本中。因此,如果您想要單一文件解決方案,則必須將文件設為 .dotx 而不是 .docx。 AFAIK 構建塊機制在 Mac 上不可用。您基本上選擇一個(預先定義的庫並建立一個類別,將要顯示的所有項目放入該庫/類別的下拉清單中,然後設定Building Block Content 控制項的屬性以使用該庫/類別。所選項目的內容是直接顯示在建構塊中。名字內容顯示在「下拉式選單」中。名稱有長度限制(我認為是 32 個字元)。

對於 (b),您可以使用所需的「顯示名稱」建立一個舊版表單欄位下拉列表,並將表單欄位設定為「退出時計算」。我認為你的選擇僅限於 25 個。顯示名稱限制為 50 個字元左右。

然後,您可以使用「顯示名稱」設定多個顯示所需文字的欄位之一。最簡單的情況是,您可以為每個下拉列表值使用一個 IF 字段,因此如果下拉列表具有值“abc”、“def”、“ghi”等,您可以使用

{ IF  "{ Dropdown1 }" = "abc" "The chunk of text you want for abc" "" }{ IF  "{ Dropdown1 }" = "def" "The chunk of text you want for def" "" }

然後,您必須“保護表單文件”,這意味著使用者除了填寫表單之外無法進行任何編輯。或者,您可以保護文件的一部分,在這種情況下,使用者可以編輯文件的其餘部分,但有一些限制。

如果您選擇 VBA 路線,我們假設您將使用內容控制下拉清單。然後,您需要一個事件來執行 VBA - 您可以使用內容控制項事件,或者如果您將內容控制項對應到自訂 XML 元件,則可以使用「資料儲存」事件(連結到 XML 元件)。然後,您的 VBA 需要知道在哪裡顯示文字以及要顯示什麼文字。

因此,讓我們假設您的下拉清單具有 Title dd1,您將把文字放入名為 title 的純文字內容控制項中tb1,而下拉清單的「顯示名稱」是my display name 1my display name 2依此類推。然後您可以將以下 VBA 放入您的ThisDocument模組中。當您單擊下拉控制項外部或從其中跳出選項卡時,這將「觸發」。

請注意,要實現此功能,tb1 的「內容無法編輯」屬性必須是未經檢查的

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Dim cc1 As ContentControl
Select Case ContentControl.Title
' the dropdown
Case "dd1"
  ' Assumes "tb1" exists
  Set cc1 = ContentControl.Range.Document.SelectContentControlsByTitle("tb1")(1)
  If ContentControl.ShowingPlaceholderText Then
    ' Resets tb1 to its placeholder text
    cc1.Range.Text = ""
  Else
    Select Case ContentControl.Range.Text
    Case "my display name 1"
      cc1.Range.Text = "whatever text you want for abc"
    Case "my display name 2"
      cc1.Range.Text = "whatever text you want for def"
    Case Else
    '
    End Select
  End If
  Set cc1 = Nothing
Case Else
'
End Select
   
End Sub

我個人更喜歡使用內容控制映射和資料儲存事件,但它更複雜,我認為上述方法應該滿足您所描述的要求。

相關內容