【问题标题】:Pulling text from multiple worksheets从多个工作表中提取文本
【发布时间】:2020-04-15 05:58:31
【问题描述】:

我希望在多个工作表中提取具有特定文本的单元格并将其放入新工作表中。我一直在创建一个循环,或者只是一般代码,这样我就可以在多个工作表中使用我所拥有的内容。

这是我的代码:

 Sub EnzymeInteractions()
' Copy EPC cells Macro
 Dim bottomL As Integer
 Dim x As Integer
 bottomL = Sheets("Enzyme Interactions (110)").Range("I" & Rows.Count).End(xlUp).Row: x = 1

 Dim c As Range
 For Each c In Sheets("Enzyme Interactions (110)").Range("I:I" & bottomI)
 If c.Value = "EPC" Then
 c.EntireRow.Copy Worksheets("sheet4").Range("A" & x)
 x = x + 1
 End If
 Next c

' CombineColumns Macro
Dim rng As Range
Dim iCol As Integer
Dim lastCell As Integer

Set rng = ActiveCell.CurrentRegion
lastCell = rng.Columns(1).Rows.Count + 1

For iCol = 2 To rng.Columns.Count
    Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut
    ActiveSheet.Paste Destination:=Cells(lastCell, 1)
    lastCell = lastCell + rng.Columns(iCol).Rows.Count
Next iCol

' RemoveBlanks Macro
Cells.Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("A9").Select

End Sub

除了我不知道如何在多个工作表(大约 10 个)中使用这个 marco 之外,一切都完美无缺。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您可以向您的子程序添加一个参数,并将每个要处理的工作表作为参数传递。

    sub Main()
        EnzymeInteractions Sheets("Enzyme Interactions (110)")
        EnzymeInteractions Sheets("Enzyme Interactions (120)")
        'etc
    End sub
    
    
    Sub EnzymeInteractions(ws As Worksheet)
    
        'use ws instead of (eg) Sheets("Enzyme Interactions (110)")
    
    End Sub
    

    您确实需要修复 sub 的后半部分以移除 ActiveCell/ActiveSheet 的使用:您应该始终尽可能使用明确的范围/工作表引用。

    见:How to avoid using Select in Excel VBA 有关这方面的指导方针。

    【讨论】:

    • 好的,我理解你的代码,最初它似乎可以工作;我运行宏并看到写入我选择的工作表中的数据,但是当它运行时,同一列会被不同的数据覆盖,因此最终只有一个工作表的数据可见。知道如何解决它吗?
    • 您需要修改您的代码,以便EnzymeInteractions 子可以确定最后使用的行在目标工作表上的位置(这里有很多关于该主题的帖子)并在下一行开始复制。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    相关资源
    最近更新 更多