【问题标题】:Avoiding Select with Copy and Paste VBA避免使用复制和粘贴 VBA 进行选择
【发布时间】:2018-07-18 15:24:36
【问题描述】:

我正在尝试减少对 select 的使用。我一直在参考下面的文章,但我不完全确定如何在这种情况下实现它。为了练习,我有下面的工作代码集,我用它来复制 B1 中的值并将其粘贴到 A 列中填充的尽可能多的行中。如果有人可以指导我如何避免这个坏习惯以便编写更多有效高效的代码,不胜感激!

How to avoid using Select in Excel VBA

    Range("B1").Select
    Selection.Copy
    ActiveCell.Offset(0, -1).Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Copy
    Range(Selection, "B1").Select
    ActiveSheet.Paste

【问题讨论】:

标签: excel vba


【解决方案1】:

所有这些代码都可以翻译成这样:

Range("B1:B" & Cells(Rows.Count, "A").End(xlUp).Row).Value = Range("B1").Value

我们使单元格B1B 中的RangeA 列中的最后一行单元格(我们使用Cells(Rows.Count, "A").End(xlUp).Row 得到)等于单元格B1 中的值.

【讨论】:

  • 也许下次吧! ;)
  • 如果 A 列中有空单元格,OP 代码将停止。
  • @VincentG 从它的声音来看,他在 A 列中没有空单元格,但根据他的问题,他想“将其粘贴到 A 列中填充的尽可能多的行”,这听起来像是典型的填充到最后一行的情况。
【解决方案2】:

其他人已经为您的代码提供了直接的解决方案。但是对于您关于如何避免选择的“指导”的问题,这就是正在发生的事情......

考虑将 .Select 存储为对其所附加的任何内容的引用。

Range("B1").Select 

是说存储对 Range: B1 的引用。

Selection.Copy

表示使用该引用,并调用函数 Copy

您可以直接访问它,而不是使用引用。

Range("B1").Copy

现在,由于您的复制和粘贴,您有两个不同的引用,即您的源和目标。因此,您可以直接将值从源应用到目标,而无需调用复制和粘贴功能。

Range(<DestinationRange>).value = Range(<SourceRange>).value

偏移函数只是说从指定的范围开始,然后移动指定数量的列或行,并使用此单元格作为参考。

【讨论】:

  • 谢谢,这很有帮助。
【解决方案3】:

你可以这样做:

Sub copyPaste()
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

Sheets("Sheet1").Range("B1:B" & lastRow).Value = Sheets("Sheet1").Range("A1:A" & lastRow).Value
End Sub

【讨论】:

  • 不。 OP 希望降低 B1 中的值,而不是 A 列中的值。
  • 是的,你是对的,我读错了问题。看起来 dwirony 已经为他找到了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多