드롭다운 단어 문서에서 텍스트 값을 무제한으로 유지하는 방법

드롭다운 단어 문서에서 텍스트 값을 무제한으로 유지하는 방법

Word의 드롭다운 선택을 기반으로 일부 텍스트를 입력해야 합니다. 하지만 255자만 허용됩니다.

그 이상 입력할 수 있는 방법이 있나요?

어쩌면 이에 대한 해결 방법이 있을까요?

나는 그것에 관한 많은 정보를 찾지 못했습니다. 저를 올바른 길로 인도해주세요.

여기에 이미지 설명을 입력하세요

답변1

그만큼255자를 초과할 수 없으며 어떠한 경우에도 문서에 표시되지 않습니다. 그렇게 하려면 콘텐츠 컨트롤을 사용자 정의 XML 부분의 요소에 "매핑"하고 일반 텍스트 콘텐츠 컨트롤을 해당 요소에 매핑해야 합니다. 요소를 선택하고 해당 컨트롤을 문서에 넣습니다.

그래서 다른 방법으로 이 작업을 수행해야 합니다. 여러 가지 가능성이 있으며 각각 고유한 장점과 단점이 있습니다. ega는 특정 갤러리(예: "사용자 정의 1" 및 범주(예: 이 컨트롤을 위해 특별히 만든 항목))의 빌딩 블록 항목에 모든 텍스트를 넣습니다. b. 레거시 양식 필드 드롭다운과 이에 따라 원하는 값을 삽입하는 필드를 사용합니다. c. "VBA 사용".

(a)와 (b)는 VBA가 필요하지 않은 유일한 접근 방식이라고 생각합니다. VBA를 사용하자마자 다양한 가능성이 있습니다.

(a)의 경우 빌딩 블록 항목은 Word 템플릿이나 특수 빌딩 블록 템플릿에 있어야 합니다. 따라서 단일 파일 솔루션을 원한다면 문서를 .docx가 아닌 .dotx로 만들어야 합니다. AFAIK 빌딩 블록 메커니즘은 Mac에서 사용할 수 없습니다. 기본적으로 사전 정의된 갤러리를 선택하고 카테고리를 생성하고 해당 갤러리/카테고리의 드롭다운에 표시하려는 모든 항목을 넣은 다음 해당 갤러리/카테고리를 사용하도록 빌딩 블록 콘텐츠 컨트롤의 속성을 설정합니다. 선택한 항목의 콘텐츠는 다음과 같습니다. 컨트롤에 직접 표시됩니다.이름및 콘텐츠가 "드롭다운"에 표시됩니다. 이름에는 길이 제한이 있습니다(제 생각에는 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 부분에 매핑하는 경우 "Datastore" 이벤트(XML 부분에 연결됨)를 사용할 수 있습니다. 그런 다음 VBA는 텍스트를 표시할 위치와 표시할 텍스트를 알아야 합니다.

dd1따라서 드롭다운에 Title 이 있고 제목이 일반 텍스트 콘텐츠 컨트롤에 텍스트를 넣고 tb1드롭다운의 "표시 이름"이 이라고 가정 해 보겠습니다 my display name 1. my display name 2그런 다음 모듈에 다음 VBA를 넣을 수 있습니다 ThisDocument. 드롭다운 컨트롤 외부를 클릭하거나 탭 아웃하면 "실행"됩니다.

NB 이것이 작동하려면 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

개인적으로 저는 콘텐츠 제어 매핑과 데이터 저장소 이벤트를 사용하는 것을 선호하지만 이는 더 복잡하며 위의 접근 방식이 설명된 요구 사항을 충족해야 한다고 생각합니다.

관련 정보