2017-01-05 8 views
-1

Мне нужно добавить комбинированные поля перед каждым элементом таблицы для обеспечения обратной связи. Он содержит три связанных с ним поля, которые могут быть заданы в массиве.Добавление комбинированных полей в конкретный столбец таблицы

Количество комбинированных коробок не является постоянным, пользователь может предоставить счет. например. 6. Таким образом, в таблице будет 6 строк, в третьем столбце перед каждой строкой должны быть вставлены 6 комбинированных ящиков.

Может ли это быть автоматизировано для Word с помощью VBA?

+0

Все, что я могу думать сразу ставит выпадающий основываясь на количестве строк со значениями (I). Затем вы должны повторить для каждого i смещение позиции по высоте строки. По сути, он создает количество combobox, затем распределяет их по смещению. – Cyril

+0

Спасибо за ваш быстрый ответ. можете ли вы предоставить мне письменный код, чтобы я мог реализовать? –

+0

Я бы попытался построить это с нуля. Начните с записи макроса добавления пары comboboxes, позиционирования их, а затем прекратите запись и введите запись. Вот где я и начал бы это делать. – Cyril

ответ

0

В качестве альтернативы Combobox следующий код добавляет список проверки (тип Combobox).

Вы должны выбрать ячейку рядом со столом затем выбрать элемент в этом диапазоне $ D $ 14: $ D $ 17

Excel будет стиль столбца. Если вы вставляете строку в диапазон таблиц, Excel автоматически добавляет этот список выбора.

Sub AddListNexttoTable() 
Dim ColumnNexttoTable As Integer 
Dim FstRowofTable As Integer 
Dim NbRowsinTable As Integer 

ColumnNexttoTable = Application.Range("My3ColumnTable").Columns.Count + Application.Range("My3ColumnTable").Column 

FstRowofTable = Application.Range("My3ColumnTable").Row 
NbRowsinTable = Application.Range("My3ColumnTable").Rows.Count 

'Select the cell next to the table and on top 
Application.Cells(FstRowofTable, ColumnNexttoTable).Select 

'Create a Validation List 
AddValidationList 

CopyValidationList 

End Sub 



Sub AddValidationList() 

    With Selection.Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=$D$14:$D$17" 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "Select" 
     .ErrorTitle = "Oups!" 
     .InputMessage = "Yo Man" 
     .ErrorMessage = "Pick Data From the List" 
     .ShowInput = True 
     .ShowError = True 

    End With 

End Sub 


Sub CopyValidationList() 
    Selection.AutoFill Destination:=Range("D2:D12"), Type:=xlFillDefault 
    Range("D2:D12").Select 
    ActiveCell.SpecialCells(xlCellTypeSameValidation).Select 
    Range("D1").Select 
End Sub 

Здесь изображение после выполнения макроса

enter image description here

Здесь изображение после того, как пользовательский первого выбора. enter image description here

+0

Спасибо за подробный ответ. На самом деле мне это нужно в Microsft Word. –

+0

Есть ли способ выбрать все фигуры (комбинированные поля) в текстовом документе и назовите их в соответствии с нашим выбором и проверить, есть ли значение в каждом поле со списком ??????? –

+0

Комбинированные поля - это элементы управления содержимым. Вы можете изменить свойство «Заголовок» или «Тег». Нет свойств «имени». Также свойства Id должны быть уникальными. Вы можете выбрать фигуры, используя свойства «Тип». Здесь в качестве отправной точки используется ссылка Microsoft. https://msdn.microsoft.com/en-us/library/office/ff192425.aspx Здесь ссылка Microsoft для свойств «Тип» https://msdn.microsoft.com/en-us/library/ office/ff192401.aspx –

0

Здесь код для слова Microsoft. Это делает
1. Создайте поле со списком в памяти (используя метод обреза) 2. Создайте таблицу обследования 3. Выберите третий столбец 4. Вставить выпадающий список 5. Обновите Последнюю COMBOBOX

Option Explicit 

Sub MakeSurveyTable() 

CutCCcbxSurvey CreateCCcbxSurvey 

AddSurveyTable 

PastecbxSurveytoTableColumn 

UdateCombobox4 

End Sub 

Sub CutCCcbxSurvey(myCCcbxIndex As Integer) 

    ActiveDocument.ContentControls(myCCcbxIndex).Cut 

End Sub 

Function CreateCCcbxSurvey() As Integer 

Dim CCcollection As ContentControls 
Dim CCcbxSurvey As ContentControl 
Set CCcollection = ActiveDocument.ContentControls 
Set CCcbxSurvey = CCcollection.Add(wdContentControlComboBox) 

With CCcbxSurvey 
    .Title = "Survey" 
    .Tag = "Survey1" 
    .SetPlaceholderText Text:="Please select a response." 
    .DropdownListEntries.Add "Response 1" 
    .DropdownListEntries.Add "Response 2" 
    .DropdownListEntries.Add "Response 3" 
    End With 
    CreateCCcbxSurvey = ActiveDocument.ContentControls.Count 

End Function 

Sub AddSurveyTable() 

ActiveDocument.Tables.Add Range:=Selection.Range, _ 
NumRows:=4, NumColumns:=3, _ 
defaulttablebehavior:=wdWord9TableBehavior, _ 
AutoFitBehavior:=wdAutoFitFixed 

With Selection.Tables(1) 

    .Title = "Survey" 

End With 

End Sub 

Sub PastecbxSurveytoTableColumn() 

ActiveDocument.Tables(1).Columns(3).Select 
Selection.Paste 

End Sub 


Sub UdateCombobox4() 
' 

' 
Dim cbxCCSurvey As ContentControl 

    Set cbxCCSurvey = ActiveDocument.ContentControls(4) 

    With cbxCCSurvey 
     .Title = "Favorite Animal" 
     .SetPlaceholderText _ 
     Text:="Please select your favorite animal " 

     'List entries 
     .DropdownListEntries.Clear 
     .DropdownListEntries.Add "Cat" 
     .DropdownListEntries.Add "Dog" 
     .DropdownListEntries.Add "Horse" 
     .DropdownListEntries.Add "Monkey" 
     .DropdownListEntries.Add "Snake" 
     .DropdownListEntries.Add "Other" 
     End With 
End Sub 

Вот результат enter image description here

+0

Sahil, Дайте мне знать, если вам нужно больше ..... –