停止宏移动工作表

Stop macro from shifting sheets

当下面的宏每 5 分钟运行一次时,无论我在哪个 Sheet 上工作,它总是 comes/shifts 到 Sheet2

我知道我的代码中的 .select 可能对此负责,但是有没有其他方法可以编写以下代码或任何可以防止移动并让我自己继续工作的方法 sheet 我工作的地方。

工作4-5小时,每隔5分钟就换一个sheet,很郁闷

我用了(但没有结果)

Application.ScreenUpdating = False

My macro code here

Application.ScreenUpdating = True

我的宏有什么作用?

它从 Sheet1 Pic1 and paste them in list wise every 5 min in Sheet2 Pic2

的某些单元格复制数据

我的宏代码

Sub Macro5()

'Code for running it every 5 min
Application.OnTime Now + TimeValue("00:05:00"), "Macro5", True

'Go to sheet1
Sheets ("Sheet1").Select

'Select some cell
Range ("A1:D1").Select

'Go down with CTRL + ↓
Selection. End (xlDown).Select

'Select 1 cell down using relative reference
ActiveCell.offset (1, 0).Range ("A1").Select

'Come to sheet2
Sheets ("Sheet2").Select

'Select some cells
Range ("I4:L4").Select

'Copy selected cells
Selection.Copy

'Come to sheet1
Sheets ("Sheet1").Select

'Paste that selected value in some cells of sheet 1
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

End Sub

*宏中可能存在一些拼写错误,但请避免,因为原始宏在我的 PC 上运行完美

As Sheets ("Sheet2")。Select 是您 select a sheet 的最后一个命令。它总是会在 Sheet2 结束。

如果您想 return 到您所在的 sheet。您应该在开始时将 sheet 名称保存在一个变量中。然后 select 最后 sheet

Sub test()
    Dim activeSheetName As String
    activeSheetName = ActiveSheet.Name
    Sheets("Sheet2").Select

'DO WHAT YOU WANT

    Sheets(activeSheetName).Select
End Sub

您可以将 sheet 称为变量,而不是使用易受用户中断影响的 select。这种方式比 运行 更快,而且您可以随时确定正在使用哪个 sheet。通过使用 select,您可能会忘记在代码中的任何给定点上哪个 sheet 处于活动状态。

Sub test()
    Dim Sheet1 As Worksheet
    Dim Sheet2 As Worksheet

    Set Sheet1 = Sheets("Sheet1")
    Set Sheet2 = Sheets("Sheet2")

    Sheet1.Range("A1:D1").Copy Sheet2.Range("A1")
End Sub

使用此方法,您可以在任何 sheet 上使用,并且代码将更新到另一个 sheet,但仍会进行更改

我对你的代码有点困惑。
您在 Sheet1 上移动,最终 select 将 A 列中的第一个单元格置于其中任何数据下方。
然后移动到 sheet 2,再次复制范围 I4:L4、select sheet 2(已经 selected),然后粘贴值和数字单元格 I4:L4.

的格式

您的描述说它正在将单元格 I4:L4 从 sheet 1 复制到 sheet 2 上数据的底部。

Sub Macro5()

    'Code for running it every 5 min
    Application.OnTime Now + TimeValue("00:05:00"), "Macro5", True

    'ThisWorkbook is the file that the code is in.
    ThisWorkbook.Worksheets("Sheet1").Range("I4:L4").Copy
    
    'Each reference starting with a . will reference ThisWorkbook.Worksheets("Sheet1")
    With ThisWorkbook.Worksheets("Sheet2")
        .Cells(.Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial xlPasteValuesAndNumberFormats
    End With
End Sub  

我使用了 End(xlUp),因为如果 sheet 为空,End(xlDown) 可以跳转到 sheet 的末尾。

也值得一读 how-to-avoid-using-select-in-excel-vba