【问题标题】:Looping through all the worksheets in a workbook循环浏览工作簿中的所有工作表
【发布时间】:2014-09-15 22:14:56
【问题描述】:

这是我循环所有工作表的代码。我想从所有工作表中复制特定的单元格值并将其粘贴到我的主工作表中。首先我尝试了一张工作表,它工作正常。我修改了相同的代码以遍历工作簿中的所有工作表。我显示了要复制的工作表名称和数据。它正确地转到所有工作表,但除了第一张工作表之外,我没有得到工作表的数据。除了第一个工作表之外,它甚至没有显示在 msgbox 中。

    For Each ws In ActiveWorkbook.Worksheets
    If Range("C3").Value = "" Then
    Coverge_ID = Range("C2")
    MsgBox Coverge_ID
    ThisWorkbook.Worksheets(2).Activate
    Range("A1").Offset(I, 0) = Coverge_ID
    I = I + 1
    Else
    Coverge_ID = Range("C3")
    MsgBox Coverge_ID
    ThisWorkbook.Worksheets(2).Activate
    Range("A1").Offset(I, 0) = Coverge_ID
    I = I + 1
    End If
    MsgBox ws.Name
    Next ws

【问题讨论】:

  • 当您使用多个工作表时,您需要使用工作表引用调用 Range。在您的情况下, ws.Range("C3").Value 否则代码始终引用“主”表(代码中的第一个)。使用 ws。无处不在...
  • 是的,你是正确的。它现在工作。谢谢老哥

标签: vba excel


【解决方案1】:

几件事:

  • 您实际上并不是通过使用 ws 变量限定 Range() 来引用循环中的工作表
  • 您无需激活工作表即可为其附加值

试试下面的代码:

Dim ws As Worksheet
Dim i As Long
Dim Coverage_ID As String

For Each ws In ActiveWorkbook.Worksheets
    If ws.Range("C3").Value = "" Then
        Coverage_ID = ws.Range("C2").Value
        MsgBox Coverage_ID
        ThisWorkbook.Worksheets(2).Range("A1").Offset(i, 0) = Coverage_ID
        i = i + 1
    Else
        Coverage_ID = ws.Range("C3").Value
        MsgBox Coverage_ID
        ThisWorkbook.Worksheets(2).Range("A1").Offset(i, 0) = Coverage_ID
        i = i + 1
    End If
    MsgBox ws.Name
Next ws

【讨论】:

  • 您需要在将ws. 应用于所有 范围引用时保持一致。就目前而言,您的答案仍然是指 else 子句中的隐式活动表。你应该解释一下thisworkbookactiveworkbook之间的区别
  • @chrisneilsen 谢谢,没有注意到我错过了参考并更新了。
猜你喜欢
  • 2014-12-23
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2016-05-26
  • 1970-01-01
  • 2018-06-04
相关资源
最近更新 更多