2013-09-17 1 views
0

Ищу построить таблицу Excel, который имеет список элементов в столбце А, каждый в паре с командной кнопкой в ​​столбце B. В идеале это будет выглядеть следующим образом:Как скопировать из списка элементов, используя несколько командных кнопок в Excel?

Example

При нажатии кнопки , значение в соседнем столбце A будет скопировано на другой рабочий лист. Я понимаю, что это возможно сделать с помощью элемента CommandButton_Click(), но у меня будет около 200 кнопок, и, с моей точки зрения, мне нужно было бы сделать разные подпрограммы для каждого из них. Есть ли способ избежать этого? Есть ли какой-то код, который будет применяться ко всем кнопкам, и если нажать кнопку, он скопирует соседний столбец? Примером моего текущего субъекта является:

Sub CommandButton_Click() 
Dim rs As Integer 
rs = ActiveSheet.Buttons(1).TopLeftCell.Row 
Worksheets("Sheet1").Range("A" & rs).Copy _ 
Worksheets("Sheet2").Range("A" & rs) 
End Sub 

Надеюсь, вы, ребята, понимаете, что я пытаюсь сделать здесь. Любая помощь приветствуется!

+0

Лучше использовать одну кнопку и она работать на выбранной строке. Управление пучком кнопок и их упорядочение по одному на каждой строке - это боль. Если вы * должны * иметь несколько кнопок, используйте элементы управления «Forms», а не ActiveX: укажите их все на один и тот же Sub и внутри sub вы можете проверить «Application.Caller» на имя кнопки, чтобы узнать, какой из них был нажат (из couse вам нужно называть ваши кнопки соответственно ...) –

+0

У меня будет не менее 100 кнопок, поэтому мне будет неэффективно это делать:/ –

+0

У меня есть подпрограмма, которая создает кнопки для чего угодно ячейки, которые я выбрал. Его можно найти здесь: http://pastebin.com/raw.php?i=Nzur2ZAQ Есть ли способ использовать это для создания имен кнопок, которые можно легко отслеживать? –

ответ

1

Ваша кнопка создающей код:

Sub AddButtons() 
On Error Resume Next 
Dim c As Range, myRange As Range 
Set myRange = Selection 
For Each c In myRange.Cells 
ActiveSheet.Buttons.Add(c.Left, c.Top, c.Width, c.Height).Select 
With Selection 
.Characters.Text = "ADD" 
.Name = c.Address ' names with cell address 
End With 
Next 
myRange.Select 
End Sub 

Handler:

Sub ButtonClicked() 
    Dim c as Range 
    Set c = Activesheet.Range(Application.Caller) 
    c.entirerow.copy sheets("Sheet2").cells(c.row,1)  
End Sub 
Смежные вопросы