2013-01-03 51 views
0

我有excel文件有很多部分。我創建了一個宏,然後在每個部分我有一個按鈕。我已將 按鈕連接到該宏的宏 宏。在Excel中複製行使用按鈕,但按鈕不應該遵循

On button click : 
  • 現有的行會複製
  • 添加一個新行
  • 過去的第一行

一切正常的內容。 問題是這樣的,每當我複製行時按鈕也被複制。我不希望那個按鈕被複制,它應該保留在前一行。或者該按鈕應放置在最後一行。

這是代碼。

Sub Button_AddRow() 
Dim b As Object, cs As Integer 
ActiveSheet.Unprotect 
Set b = ActiveSheet.Buttons(Application.Caller) 
b.TopLeftCell.Offset(1).EntireRow.Insert 
b.TopLeftCell.Offset(1).EntireRow.Insert 

b.TopLeftCell.EntireRow.Select 
Selection.Copy 
b.TopLeftCell.Offset(1).EntireRow.Select 
ActiveSheet.Paste 
b.TopLeftCell.EntireRow.Select 
Selection.Copy 
b.TopLeftCell.Offset(2).EntireRow.Select 
ActiveSheet.Paste 

ActiveSheet.Cells(b.TopLeftCell.Offset(1).Row, 1).Value = "" 

ActiveSheet.Protect 

End Sub 

See how many button, coming there, I need just one button at the end

嘗試了很多,但沒有得到成功。

+0

所以主要是要複製當前行並將其粘貼爲相鄰的新行?沒有必要複製按鈕的權利? – bonCodigo

回答

0

爲什麼在代碼中引用按鈕?你可以使用ActiveCell:

Sub Button_AddRow() 
    Dim r As Range 
    ActiveSheet.Unprotect 
    Set r = ActiveCell.EntireRow 
    .... 

我猜你的問題會消失。當然,用戶必須先點擊「右邊」的某處。

0

上iDevelop的回答之後,你可以使用按鈕的TopLeftCell得到你想要的行的地址,然後清理你的代碼如下所示:

Option Explicit 

Sub Button_AddRow() 

Dim b As Object, cs As Integer, cel As String 

ActiveSheet.Unprotect 

Set b = ActiveSheet.Buttons(Application.Caller) 
cel = b.TopLeftCell.Address 

Range(cel).Offset(1).EntireRow.Resize(2).Insert 

Range(cel).Offset(1).EntireRow.Resize(2).Value = Range(cel).Value 

Cells(Range(cel).Offset(1).Row, 1).Value = "" 

ActiveSheet.Protect 

End Sub 
+0

是的,我是斯科特代碼和它的工作。它創建新的行。我的要求是創建新的行,然後將該按鈕從前一行移動到最後一行。客戶需要在每個部分的行尾添加行按鈕。在這個新的克列斯德行旁邊沒有與最後一行相同的合併列...所以我再次卡住.... –