2017-10-04 4 views
1

私は、クリックしたい行にボタンを追加してExcelのスプレッドシートを作成し、その行のコピーをとり、複製します下に。Excel VBAボタンを押した場所に基づいて行を追加しないで新しい行スクリプトを追加する

何らかの理由で、ボタンをクリックした行を選択していないように見えますが、カーソルが間違った行がコピーされていることを意味します。

ボタンを押したばかりの場所でアクティブなセルを作成する方法はありますか?事前に

Sub InsertRows() 
Dim x As Integer 
    x = Application.InputBox("Number of Rows", "Number of Rows", Type:=1) 
    If x = False Then Exit Sub 
    ActiveCell.EntireRow.Copy 
    Range(ActiveCell, ActiveCell.Offset(x - 1, 0)).EntireRow.Insert Shift:=xlDown 
    Application.CutCopyMode = False 
End Sub 

感謝

テラン

EDIT

トーマスの助けを借りて、私の最終的な解決策。

わずかな違いは、ボタン自体も行だけでなくコピーできることです。

ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 

は、私は本当にあなたのMsgBoxオフセット収集をどうしようとしているのか理解していない:

Sub InsertRows() 


    Dim iRow As Integer 
    Dim x As Integer 
    Dim i As Integer 

    x = Application.InputBox("Number of Rows", "Number of Rows", Type:=1) 
    iRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 
    If x = False Then Exit Sub 

    For i = 0 To (x - 1) 


    'Range(ActiveCell, ActiveCell.Offset(x - 1, 0)).EntireRow.Insert Shift:=xlDown 


    Range("A" & iRow).EntireRow.Copy 
    Range("A" & iRow + 1 + i).EntireRow.Insert Shift:=xlDown 

    Next i 
    Application.CutCopyMode = False 

End Sub 
+0

どのようなボタンですか?フォームまたはActiveX? –

+0

こんにちは - そのフォームボタン。ありがとう –

+0

ボタンをクリックしても、ActiveCellは変更されません。どのボタンが押されたのかは、Application.Caller –

答えて

1

使用これはあなただけでクリックしたボタンの行を取得します。だからここにあなたが、つまりは、右下の行には、ボタンがある行をコピー尋ねexcatly行うためのコードは次のとおりです。

Sub Button1_Click() 

    Dim iRow As Integer 
    iRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 
    Range("A" & iRow).EntireRow.Copy 
    Range("A" & iRow + 1).PasteSpecial 

End Sub 

EDIT: あなただけのこの操作を行うことを数回コピーする場合:

Sub Button1_Click() 

    Dim iRow As Integer 
    Dim x As Integer 
    Dim i As Integer 

    x = Application.InputBox("Number of Rows", "Number of Rows", Type:=1) 
    iRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 

    For i = 0 To (x - 1) 

     Range("A" & iRow).EntireRow.Copy 
     Range("A" & iRow + 1 + i).PasteSpecial 

    Next i 

End Sub 
+0

こんにちは - で確認できます。 –

+0

こんにちは - 私は私のコードにあなたの提案をプルしようとしましたが、私は感情的な瞬間を持っているようです。以下は動作するようですが、最後には何もコピーしません。私は実際には、私はコピーしたいと思う行を選択して、xの時間をコピーする必要がありました。あなたのコード@Thomas Gは動作しますが、一度に1行しか許されません。 X = Falseの場合、終了サブ:DIMが整数 X = Application.InputBox(= 1 "行数"、 "行数" タイプ)として整数 暗いiRowのX –

+0

サブInsertRows() iRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row ActiveCell.EntireRow.Copyレンジ(のActiveCell、ActiveCell.Offset(X - 1、iRow))EntireRow.Insertシフト:= xlDown アプリケーション。 CutCopyMode = False End Sub –

関連する問題