【问题标题】:How to reset the active cell to the cell that the Macro starts on?如何将活动单元格重置为宏开始的单元格?
【发布时间】:2019-06-24 20:03:29
【问题描述】:

我正在尝试制作一个宏,该宏从我更新的另一张表中的固定单元格中获取数据并将数据输入到另一张表中。每天我将新数据放入源表中,它将作为当天数据(一行)传输到第二张表中。这要求我运行宏的原始单元格是固定的参考点。如何将活动单元格重置为我点击宏按键的单元格?

我尝试过 Startcell = activecell 或那种类型的东西,但它们没有产生结果。我不擅长 VBA,因此可能是格式错误导致此方法无法正常工作。

Sub Macro15()
'
' Macro15 Macro
'
' Keyboard Shortcut: Ctrl+Shift+Q
'
    Sheets("MACRO (insert data)").Select
    Range("G4:Q4").Select
    Selection.Copy
    Sheets("Jun-2019").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("MACRO (insert data)").Select
    Range("W4:AG5").Select
    Selection.Copy
    Sheets("Jun-2019").Select
    Range("C42").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("O10:Y10").Select
    Selection.Copy
    Startcell.Offset(0, 11).Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub

如果有人可以帮助我在“Range("O10:Y10").Select”和“Selection.Copy”之后将活动单元格返回到起始单元格,那就太好了。

【问题讨论】:

  • 首先您需要捕获(最初)活动单元格。用变量做到这一点。在代码的末尾,您可以尽可能地执行<your_variable_name>.Select 相关:Avoid Activate/Select。您的宏实际上都需要选择任何内容,因此这是一个 X/Y 问题:您希望返回初始选择,但这只是因为您在运行时不必要地更改了选择:)
  • 感谢您的帮助。我现在正在尝试删除所有激活和选择,但是如何使用 Dim 将最初活动的单元格存储为变量?
  • Dim startRange as Range 然后Set startRange = ActiveCell

标签: excel vba


【解决方案1】:

类似的东西,未经测试。请注意,在首次分配 copyRange 之后,不清楚您需要将数据粘贴/传输到何处。您需要更新 destSheet.Range(" ??? ") 以引用正确的地址而不是 " ??? "

请注意,我们不会选择或激活任何内容。我们利用了这样一个事实:一个范围内的 Values 可以直接分配给另一个相同大小的范围,只需执行类似rng2.Value = rng1.Value 之类的操作。有关在工作簿/工作表之间复制值的更多信息:here

我已经声明了相关变量,这应该使代码更易于维护(例如,现在只有一个地方需要在未来几个月更改工作表名称等)

Dim StartCell as Range
Dim copyRange as Range
Dim dataSheet as Worksheet   '## MACRO (insert data)
Dim destSheet as Worksheet   '## Jun-2019
Set dataSheet = Sheets("MACRO (insert data)")
Set destSheet = Sheets("Jun-2019")

Set StartCell = ActiveCell

'First, copy G4:Q4 values
Set copyRange = dataSheet.Range("G4:Q4")
' Update the ??? with the destination for this data from G4:Q4
destSheet.Range(" ??? ").Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value

'Second, copy W4:AG5 values:
Set copyRange = dataSheet.Range("W4:AG5")
destSheet.Range("C42").Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value

' ## Now set copy O10:Y10 from Jun-2019 worksheet
Set copyRange = destSheet.Range("O10:Y10")
' Finally put these values in the StartCell area
StartCell.Offset(0,11).Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value
End With

【讨论】:

  • 谢谢大卫,最后一个问题,这段代码运行良好。对于最后一行代码,我想复制值并根据要复制到的单元格来更改公式。
  • 例如,单元格 A3 = A2+A1 但我希望将该公式复制到 B3 为 B3= B2+B1。
  • 这听起来像是一个新的/单独的问题。如果这解决了您原始帖子中的直接问题,请考虑将其标记为已接受。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2013-08-25
  • 1970-01-01
相关资源
最近更新 更多