用于一次在两张纸中添加行的VBA代码

时间:2013-11-14 18:39:35

标签: excel vba

我不是程序员,但由于我的公司要求我为日常流程创建工作表,所以我一直在填补这个角色所以如果我没有用正确的术语陈述我的问题并且如果你必须分解,我会提前道歉你的答案就像你在和Noob一样说话,因为我是一个人。

问题: 我想设置一个按钮,允许用户在他们正在处理的活动工作表上添加一行。在后台,我希望电子表格在同一工作簿中的另一个工作表中添加一行,与添加的工作簿位于同一位置。 (两张纸只与上一个月有非活动工作表相同)我之所以需要这样做是因为Active工作表从非活动工作表中提取数据而我希望保持相同的行数两张纸都包含在同一行中的数据,因此它将提取正确的数据。

感谢您的任何建议!

2 个答案:

答案 0 :(得分:0)

通过微距录像机的快速播放,我留下了以下代码:

Sub insertRow()
    Dim insertBeforeRow
    insertBeforeRow = 1

    ActiveSheet.Rows(insertBeforeRow).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

    ' The following two lines are the same - both active the second sheet in the book
    Sheet2.Activate
    Sheets(2).Activate

    ActiveSheet.Rows(insertBeforeRow).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

然后快速播放调试器,我看到ActiveSheet具有属性index - 这是Sheets集合中的索引。 (单击ActiveSheet,右键单击并选择添加监视)

我想出了这个(没有错误检查,不要忘记添加一些! - 在工作簿中挑选最后一张表并运行这将导致可怕的“呃呃,你不做假”错误声音和消息框)

Sub getActiveSheet()
    Dim curSheetIndex, numSheets, secondSheetIndex

    curSheetIndex = ActiveSheet.Index
    secondSheetIndex = curSheetIndex + 1

    ' the following two lines are equivalent - both operate on the Active Sheet
    ActiveSheet.Cells(1, 1) = "Active Sheet"
    Sheets(curSheetIndex).Cells(1, 1) = "Active Sheet"

    ' finally, operate on the following sheet
    Sheets(secondSheetIndex).Cells(1, 1) = "Sheet following Active Sheet"
End Sub

您可以按照适合您目的的方式将两个片段焊接在一起。在发现可用的功能和属性时,VBA环境中的调试器非常美观。这是我在VBA中非常喜欢这样的小任务的原因之一,说实话。当你至少熟悉调试器和Excel的对象模型时,它通常可以非常快速地获得你想要的效果。

答案 1 :(得分:0)

在重读你的帖子后,我不是100%确定这是你正在寻找的,但我会试一试。

Sub Button1_Click()
    r0w = Selection.Row
    c0l = Selection.Column
    ThisWorkbook.Sheets("Sheet1").Cells(r0w, c0l).EntireRow.Insert
    ThisWorkbook.Sheets("Sheet2").Cells(r0w, c0l).EntireRow.Insert
End Sub

看起来这样就可以了。