excel - 对不同的工作表重复操作

标签 excel vba loops repeat

新手来了!对于特定的工作簿或特定的工作表,我有一个想要重复的操作。
有没有办法在不复制和粘贴第二个、第三个等工作表的整个代码的情况下做到这一点?
只有工作簿和工作表名称会更改。其他操作(例如复制粘贴)保持不变。
虽然有一个“For Each 循环”,但我不知道如何以一种允许我准确指定哪些工作表的方式进行操作。
例如,我是

  • 第 1 步:从工作簿“Red”表“Apple”复制数据。粘贴到输出
    工作簿。
  • 重复 Action 。第 2 步:从工作簿“黄色”表“香蕉”中复制数据。粘贴到
    相同的输出工作簿。

  • 如果有人可以建议,这是我的代码。 VBA新手在这里谢谢!
    Sub CopyPastefromOtherWB()
    
    Range("B13").Select
    
        'Activate WB1
                Workbooks.Open Filename:= "C:\Users\Desktop\My macro projects\Red"
    
                Worksheets("Apple").Activate
    
                Range("A1").Select
    
                Do While Selection.Value <> "Mar"
                ActiveCell.Offset(0, 1).Select
    
                Loop
    
                ActiveCell.Offset(1, 0).Select
                Range(ActiveCell, ActiveCell.End(xlDown)).Select
                Selection.Copy
    
        'Activate output notebook
                Workbooks.Open Filename:= "C:\Users\Desktop\My macro projects\OutputWB"
                Worksheets("Sheet1").Activate
                Range("B13").PasteSpecial paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
        'HERE IS WHERE THE REPEAT HAPPENS. Activate WB2
                Workbooks.Open Filename:= "C:\Users\Desktop\My macro projects\Yellow"
    
                Worksheets("Banana").Activate
    
                Range("A1").Select
    
                Do While Selection.Value <> "Mar"
                ActiveCell.Offset(0, 1).Select
    
                Loop
    
                ActiveCell.Offset(1, 0).Select
                Range(ActiveCell, ActiveCell.End(xlDown)).Select
                Selection.Copy
    
        'Activate output notebook
                Workbooks.Open Filename:= "C:\Users\Desktop\My macro projects\OutputWB"
                Worksheets("Sheet1").Activate
                Range("C13").PasteSpecial paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    
        ActiveCell.Offset(0, 1).Select
                
    End Sub
    

    最佳答案

    请看 How to avoid using Select in Excel VBA .

    Sub CopyPastefromOtherWB(ByVal FromPath As String, ByVal FromSheetName As String, ByVal TargetCell As Range)
        With Workbooks.Open(FromPath)
            With .Worksheets(FromSheetName)
                Dim c As Range
                Set c = .Rows(1).Find("Mar", LookAt:=xlWhole).Offset(1, 0)
              
                TargetCell.Resize(c.Rows.Count, 1).Value = .Range(c, c.End(xlDown)).Value
            End With
        
            .Close False
        End With
    End Sub
    
    With Workbooks.Open("C:\Users\Desktop\My macro projects\OutputWB").Worksheets("Sheet1")
        CopyPastefromOtherWB "C:\Users\Desktop\My macro projects\Red", "Apple", .Range("B13")
        CopyPastefromOtherWB "C:\Users\Desktop\My macro projects\Yellow", "Banana", .Range("C13")
    End With
    

    关于excel - 对不同的工作表重复操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69870183/

    相关文章:

    excel - 每 30 分钟移动一次鼠标指针

    PHP 在保留键的同时遍历多维数组

    excel - 从单元格中的列表中提取重复项

    excel - 从关闭的 Excel 文件导入数据

    用于将 "&&","&&-","&-"等符号和数字提取到不同列中的 VBA 代码

    entity-framework - 创建 1000 个 Entity Framework 对象时,何时应该调用 SaveChanges()? (就像导入期间一样)

    javascript - 将 javascript 函数从 foreach 切换到 for 循环

    c# - Microsoft.Office.Interop.Excel 的阅读范围

    excel - 在 IE 中打开 Excel 文件会引发三次登录?

    excel - 用于搜索字符串,然后搜索第二个字符串并从文本文件返回数据行的 VBA 代码