VBA宏在所有工作表上选择相同的单元格

时间:2014-04-11 21:59:45

标签: excel excel-vba vba

我对VBA有点新,而且这个特殊的行为似乎可能超出了我目前的知识范围。

有没有办法对VBA进行编码,让它在所有工作表中主动选择与当前单元格相同的单元格?我有一个模型,我可以让我的团队同时输入有关Sheet1上A列产品SKU的数据,但由于我们为每件商品输入了大量信息,我使用了多张纸

例如,如果我在Sheet1上选择了单元格H4,是否可以在切换到其他工作表时让所有其他工作表激活单元格H4?

这是我到目前为止在测试工作簿上提出的,但它似乎不起作用:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Select Case LCase(Sh.Name)
Case Is = "sheet1", "sheet2", "sheet3"
    If CurRow > 0 Then
    With Application
        .EnableEvents = False
        .Goto Sh.Cells(CurRow, CurCol), Scroll:=True
        Sh.Range(ActCellAddr).Select
        .EnableEvents = True
    End With
    End If
    End Select

End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

Select Case LCase(Sh.Name)
    Case Is = "sheet1", "sheet2", "sheet3"
        CurRow = ActiveWindow.ScrollRow
        CurCol = ActiveWindow.ScrollColumn
    ActCellAddr = ActiveCell.Address
    End Select

End Sub

我在下面找到了以下代码:

Excel VBA code to allow the user to choose the same cell on every sheet

但这要求用户实际输入他们想要选择的单元格。我正在寻找它是自动的。

任何提示或建议?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

您可以将以下内容发布到工作簿中的每个工作表。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Set CurrWS = ActiveSheet
    For Each WS In ThisWorkbook.Worksheets
        WS.Activate
        WS.Range(Target.Address).Select
    Next
    CurrWS.Activate

End Sub

每次选择一个单元格时,它将循环显示所有工作表并在那里选择相同的单元格。这方面的缺点是显而易见的:如果你有太多的表,那将是乏味的。另一个问题是,它将循环通过一切。因此,如果您要将其用于数据输入,可能会弄乱其他一些工作表。

否则,如果它只是选择单元格,那么这是无害的,尽管根据您有多少张纸,闪烁有时会很明显。

不如人们想要的那么优雅,但它有效。祝你好运,如果有帮助,请告诉我们。

答案 1 :(得分:0)

值得注意的是,有一个工作簿级事件处理程序处理同一事件,因此您只需要将代码一次添加到ThisWorkbook代码模块:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
                                          ByVal Target As Range)

Sh代表ActiveSheet。

当您在其他工作表上选择范围或者重新触发事件处理程序时,也可能值得禁用事件(在退出代码之前不要忘记重新启用事件处理!)

答案 2 :(得分:-1)

此方法将测试隐藏的工作表。它选择所有非隐藏工作表,选择目标单元格然后返回到原始工作表。即使你有很多标签,它的工作速度也非常快。

targetcell = ActiveCell.Address
OriginSheet = ActiveSheet.Name
Dim ws As Worksheet
For Each ws In Sheets
    If ws.Visible = True Then ws.Select (False)
Next ws
range(targetcell).Select
Sheets(OriginSheet).Select