2013-04-16 30 views
2

我試圖在Excel中使用按鈕將一定範圍的單元格從活動工作簿複製到另一個工作簿。當我爲其指定的宏中的每個按鈕指定一個固定範圍時,複製完美地工作,但我難以理解如何在每個按鈕上使用相同的宏,以及按鈕的行號來指示要複製的數據行。使用按鈕進行行選擇和複製

每行包含6個左右單元格,第7個單元格包含按鈕。當用戶按下此按鈕時,需要複製與包含按下按鈕的行相同行上的6個單元格。

我是一個完整的新手,當涉及到VBScript中,但很多谷歌搜索讓我這麼遠:

Sheets("SurfaceThreats").Range("A4:F4")Copy_ 
Sheets("ORBAT").Cells(Rows.Count,1).End(x1Up).Offset(1,0) 

肯定有比分配一個不同的,固定的範圍,微距每一個按鍵一個更好的解決方案。

+1

是的,您可以只有一個按鈕,然後要求用戶在按下按鈕之前選擇該行。您也可以使用refedit控件讓用戶選擇該行。然後複製相關的單元格 –

+1

或者,您也可以使用'Application.Inputbox'來接受行選擇。 –

回答

3

看到這個截圖

enter image description here

這是爲Select Row(s)按鈕的代碼

Option Explicit 

Private Sub CommandButton1_Click() 
    Dim Ret As Range, rng As Range 
    Dim lRow As Long 

    On Error Resume Next 
    Set Ret = Application.InputBox("Please select the row", Type:=8) 
    On Error GoTo 0 

    If Not Ret Is Nothing Then 
     For Each rng In Ret.Rows 
      '~~> Get the last row in sheets "ORBAT" where you want to copy 
      With Sheets("ORBAT") 
       lRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 
      End With 

      '~~> Copy the rows 
      Sheets("SurfaceThreats").Range("A" & rng.Row & ":F" & rng.Row).Copy _ 
      Sheets("ORBAT").Cells(lRow, 1) 
     Next 
    End If 
End Sub 
0

不能創建一個通用按鈕的處理程序,但你可以動態創建按鈕和宏來處理它們。但是這是相當多的工作,你必須動態地開始創建宏。 (這可能會導致反病毒軟件問題,有時我認爲)。

您可以使用Worksheet_OnBeforeDoubleClick事件創建「假」按鈕

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    If Target.Cells.Count > 1 Then Exit Sub 

    If Not Intersect(Target, Target.Worksheet.Columns(1)) Is Nothing Then 
     MsgBox "You Clicked " & Target.Address 
     ' call your generic handler here passing the Target.Address or Target.Row 
     Cancel = True 
    End If 

End Sub 

使用此代碼,如果你雙擊在「A」列中的任意單元格,你會得到一個消息框,說什麼你的細胞點擊。

它不是最好的想法,有些用戶可能不知道它是一個按鈕。

相關問題