2014-01-29 4 views
0
Private Sub CommandButton1_Click() 
Dim ctrl As control 
    For Each ctrl In UserForm1.Controls 
    If TypeName(ctrl) = "CheckBox" Then 
     'Pass this CheckBox to the subroutine below: 
    TransferValues ctrl 
    End If 
    Next 
End Sub 

Sub TransferValues(cb As MSForms.CheckBox) 
Dim ws As Worksheet 
Dim emptyRow As Long 
Dim ws1 As Worksheet 

If cb Then 
    'Define the worksheet based on the CheckBox.Name property: 
    Set ws = Sheets(Left(cb.Name, 15)) 
    emptyRow = WorksheetFunction.CountA(ws.range("A:A")) + 1 
     With ws 
      .Cells(emptyRow, 1).Value = surname.Value 
      .Cells(emptyRow, 2).Value = firstname.Value 
      .Cells(emptyRow, 3).Value = tod.Value 
      .Cells(emptyRow, 4).Value = program.Value 
      .Cells(emptyRow, 5).Value = email.Value 
      .Cells(emptyRow, 6).Value = officenumber.Value 
      .Cells(emptyRow, 7).Value = cellnumber.Value 
     End With 
    Set ws1 = Sheets("Master") 
    emptyRow = WorksheetFunction.CountA(range("A:A")) + 1 
     With ws1 
      .Cells(emptyRow, 1).Value = surname.Value 
      .Cells(emptyRow, 2).Value = firstname.Value 
      .Cells(emptyRow, 3).Value = tod.Value 
      .Cells(emptyRow, 4).Value = program.Value 
      .Cells(emptyRow, 5).Value = email.Value 
      .Cells(emptyRow, 6).Value = officenumber.Value 
      .Cells(emptyRow, 7).Value = cellnumber.Value 
      .Cells(emptyRow, 8).Value = cb.Name 
     End With 
    End If 
'the master sheet needs to have a "Stakeholder" column with list of stakeholder the person belongs to 

Проблема здесь: Cb.Name - я хочу, чтобы флажки с именами отображались в одной ячейке, но сейчас это делает дополнительные строки в зависимости от количества отмеченных ящиков. Поэтому вместо того, чтобы помещать имена ячеек 6/8 в одну ячейку, она делает 6 строк с именами, которые не очень хороши. Как передать все имена cb.names в одну ячейку?Как добавить несколько значений в одну ячейку

жаль, если код не выглядит должным образом отформатирована - по какой-то причине он не показывает все отступы ...

ответ

1

Если я правильно прочитал вашу передаточную функцию, обратитесь к индивидуальным чекам, но на листе мастера должна быть одна строка для всей партии, не так ли?

Если это так, то вам нужно будет работать отдельно на индивидуальном и коллективном уровнях. Удалить все ссылки на мастер-лист с вашего основного подразделам и иметь дело с мастером листа на его собственной

Sub TransferMasterValue() 
Dim allChecks As String 

'Iterate through the checkboxes concatenating a string of all names 
For Each ctrl In UserForm1.Controls 
    If TypeName(ctrl) = "CheckBox" Then 
     If ctrl Then 
      allChecks = allChecks & ctrl.Name & "," 
     End If 
    End If 
Next 

'If you have at least one transfer to the Master sheet 
If Len(allChecks) > 0 Then 
    'Your code to transfer 
    Set ws1 = Sheets("Master") 
    emptyRow = WorksheetFunction.CountA(range("A:A")) + 1 

    With ws1 
     .Cells(emptyRow, 1).Value = surname.Value 
     ... 
     'and post the concatenated value in the name position 
     .Cells(emptyRow, 8).Value = left(allChecks,len(allChecks)-1) 
    End With 
End If 
End Sub 

Основная функция нажатия кнопки будет выглядеть ...

Private Sub CommandButton1_Click() 
Dim ctrl As control 
    For Each ctrl In UserForm1.Controls 
    If TypeName(ctrl) = "CheckBox" Then 
     'Pass this CheckBox to the subroutine below: 
    TransferValues ctrl 
    End If 
    Next 

    TransferMasterValue 
End Sub 
+0

Привет! поэтому я добавил код (и, по внешнему виду, похоже, это то, что мне нужно), но когда я его поместил, по какой-то причине CommandButton1 больше не работает? Я пытаюсь добавить человека, но ничего не происходит ...? – Doolie1106

+0

, так что другие листы работают, но ничего не появляется на вкладке «Мастер», и я не могу понять, почему ...? – Doolie1106

+1

просто для того, чтобы сохранить код вниз. Я забыл об исходном нажатии кнопки. Вы должны сделать очень небольшую корректировку –

0

вы пробовали СЦЕПИТЬ? Если у меня есть ячейки | 1 | 2 | 3 | 4 | 5 | Я могу просто вставить функцию = CONCATENATE (A1, «,», B1), и вы можете перейти на «,» на «» для пробела или вообще не разделяться. Если это не то, что вы ищете, я думаю, что я неправильно понял вопрос.

+0

Не знаю, как я бы concatenate Cb.name ... по существу, я хочу, чтобы имена всех отмеченных ящиков появлялись в .Cells (emptyRow, 8) - вроде как тексты с текстом. Для eaxmple у меня есть флажки с именем: A, B, C, D, и когда я нажимаю CommandButton1, я хочу, чтобы имена A, B, C, D отображались в одной ячейке, но прямо сейчас они делают 4 дополнительных строки A, B, C, D. Имеет ли это смысл..? – Doolie1106

Смежные вопросы