2015-07-07 1 views
0

Ниже часть кода, используемого для создания диаграммы в Excel:Создание UserForm, который меняется в зависимости от элементов она должна содержать

elements = 0 
    For j = 1 To x - 1 
     ans = MsgBox(Activity(j), vbYesNo, "Do you wish for this Element to appear in the Gantt Chart?") 
     If ans = vbYes Then 
      elements = elements + 1 
      ActivityNew(elements) = Activity(j) 
     End If 
    Next j 

Идея заключается в том, что у меня есть список x-1 деятельности в массиве Activity() только некоторые из них должны отображаться на диаграмме. Они хранятся в ActivityNew(), а переменная elements подсчитывает совокупность этого массива.

В настоящее время я использую окно сообщения VbYesNo, чтобы просмотреть все действия в Activity() и попросить пользователя принять решение о том, что должно отображаться на диаграмме.

Я хотел бы показать все действия в Userform, каждый из которых имеет галочку, чтобы включить либо в ActivityNew(), либо нет, но я понятия не имею, как это сделать.

+0

С какой частью вы боретесь? Создание пользовательской формы, заполнение массива 'ActivityNew()' из серии флажков? –

+0

Я никогда раньше не использовал Формы, и я все еще пытаюсь обнять его, поэтому я борюсь со всем. Я могу получить форму userfor, когда она мне понадобится, но я не знаю, как ее подавать (массив 'Activity()') или извлекать из нее информацию (массив 'ActivityNew()').Я также не понимаю, как добавлять элементы управления в vba – Chris

ответ

0

Вы знаете, как манипулировать пользовательскими формами?

Вы можете использовать этот код, чтобы создать элемент:

Set TheTickBox = UserForm.Controls.Add("Forms.TickBox.1", Visible = True) 

With TheTickBox 
    .Left  'Beginning of the tickbox compared to the left side of the UserForm 
    .Width 
    .Top  'Beginning of the tickbox compared to the top of the UserForm 
    .Height 
    .Caption 'Change the displayed text 
End With 

Таким образом, вы могли бы использовать что-то вроде этого:

For j = 0 to x - 1 
    Set TheTickBox = UserForm.Controls.Add("Forms.TickBox.1", Visible = True) 
    With TheTickBox 
     .Left = 10 
     .Width = The_Width_You_Want 
     .Top = 10 + j*The_Height_You_Want   
     .Height = The_Height_You_Want 
     .Caption = activity(j) 
    End With 
Next j 

В конце вашего UserForm можно добавить кнопку «Подтвердить» который проходит через все тиккексы и проверяет значение, которое вы им дали:

Sub ButtonValidate_Click() 
elements = 0 

For each Ctrl in UserForm.Controls 

    If Ctrl.Value = True Then 
     ActivityNew(elements) = Ctrl.Caption 
     elements = elements + 1 
    End If 

Next Ctrl 

End Sub 

Редактировать:

Чтобы создать пользовательскую форму, просто нажмите «Добавить пользовательскую форму», щелкнув правой кнопкой мыши на проекте (в редакторе VBA). Строки кода я дал вам в начале придется записать в поле UserForm код (нажмите правой кнопкой на UserForm -> Code) и следующий в нормальной области кода:

Sub UserForm() 
    UserForm.Show  'Here I suppose UserForm is the name of your UserForm 
End Sub 

И в UserForm код коробки убедитесь, что ваш суб имеет такое название:

Sub UserForm_Initialize() 
    ACTIONS 
End Sub 
+0

Это круто, но я не уверен, как создать пользовательскую форму в первую очередь. Как создать пользовательскую форму, чтобы появиться, когда это необходимо, и включить элементы, которые я им расскажу. – Chris

+0

Вы можете создать UserForm в редакторе VBA, нажав кнопку «Добавить пользовательскую форму» в меню. – Gido

+0

Я отредактировал свой ответ. – Gido

0

Пожалуйста, обратитесь к упрощенному продукции ниже:

An userform that allows activities to be selected

Чтобы иметь выход: 1. Вы должны иметь форму пользователя с его свойством списка MulitSelect равным 1.

Ниже приведены коды: В модуле UserForm:

Private Sub ButtonOK_Click() 
    Dim Msg As String 
    Dim i As LoadPictureConstants 
    Msg = "" 
    For i = 0 To ListBox1.ListCount - 1 
     If ListBox1.Selected(i) Then _ 
     Msg = Msg & ListBox1.List(i) & vbCrLf 
    Next i 
    MsgBox "You selected: " & vbCrLf & Msg 
    Unload Me 
End Sub 

Private Sub UserForm_Initialize() 
    Dim i As Long 
    Me.Caption = "Select Activities" 

    Call BuildActivityArray 
    For i = 1 To 5 
     Me.ListBox1.AddItem Activity(i) 
    Next 

End Sub 

В код стандартного кода:

Sub ShowForm() 
    UserForm1.Show 
End Sub