【问题标题】:If Statement will not copy the results to a seperate pageIf 语句不会将结果复制到单独的页面
【发布时间】:2019-08-04 02:13:59
【问题描述】:

创建一个 If 语句,根据某列中的月份对我的数据进行排序。代码是这样的

Worksheets("Project Info").Activate

Dim month As Long
Application.ScreenUpdating = False
For month = Cells(Rows.Count, 23).End(xlUp).Row To 1 Step -1
    If InStr(1, Cells(month, 23).Value Like "1/*", 1) _
    Then Cells(month, 23).EntireRow.Copy
    Worksheets("January").Activate
    ActiveSheet.Paste
Next month

由于某种原因,它不会将数据复制到指定页面。它甚至根本没有真正复制数据。有什么想法吗?

【问题讨论】:

  • 您应该始终使用工作表引用。激活一月工作表后,您的代码将引用它,因为它是活动工作表。
  • 我试过了,很遗憾没用。
  • @SFarrell 但是如何你是怎么尝试的? “无济于事”并不能帮助我们了解您的困难在哪里。请edit您的问题并更新代码。正如 SJR 指出的那样,代码无法按问题所示工作。以下可能会有所帮助:How to avoid using Select in Excel VBA.
  • 我已经更新了。每次更换工作表时,我都会使用激活工作表,以确保选择了正确的工作表。
  • 这种变化并没有解决我的观点。但是,答案可能。

标签: excel vba if-statement copy-paste


【解决方案1】:

如上面的 cmets 中所述,您需要使用工作表引用,否则您将在工作表之间来回跳转,并且在第一次迭代之后,您将复制并粘贴到同一个工作表。您还必须指定要粘贴数据的位置并每次更改目标位置,否则您将继续粘贴相同的数据。

Dim ws1 as Worksheet
Dim ws2 as Worksheet

Set ws1 = Worksheets("Project Info")
Set ws2 = Worksheets("January")

Dim month As Long
Dim t as Long

Application.ScreenUpdating = False

t=1
For month = ws1.Cells(Rows.Count, 23).End(xlUp).Row To 1 Step -1
    If InStr(1, ws1.Cells(month, 23).Value Like "1/*", 1) Then
       ws1.Cells(month, 23).EntireRow.Copy
       ws2.Rows(t).PasteSpecial xlPasteAll
       t=t+1
    End if
Next month

【讨论】:

  • 请注意,仅当If 语句为真时才会复制,但它会始终粘贴,因为您的If 语句是单行语句并且没有End If。 OP 可能打算这样做。
  • 另外一件事:Month 已经是 VBA 中的一个函数 (Month function),因此应该禁止(强烈不推荐)作为变量名。
猜你喜欢
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2022-11-14
  • 2013-12-31
  • 2022-12-28
  • 2012-11-14
  • 1970-01-01
相关资源
最近更新 更多