修改Excel宏以引用文本列表,而不是硬代码


0

我正在尝试获取有关我一直在努力的Excel宏的最后一步的帮助。我已经设置了一个宏,该宏将从两个不同的工作簿中获取工作表中的数据,并将其粘贴到第三个工作簿中。

第三本工作簿是归因于15个不同雇员的15个文件之一,每个文件都有不同的名称和编号。

我设置了宏以一次打开和更新15个工作簿中的每个工作簿,然后保存并关闭它们,但是现在我需要容纳对15个工作簿的更改(对于员工辞职或新雇员)被雇佣)。

以我编写宏的方式,我必须手动进入代码并将引用更改为15名员工的姓名和ID号。

有没有一种设置它的方法,以便它可以从列表中读取名称和编号(保存在第四个工作簿中),这样我就可以根据需要简单地编辑该列表,并且宏可以保持不变并在循环上运行?我知道我每次必须进行更改时都可以使用“替换”,但是从单个可编辑列表中进行操作仍然会更容易。谢谢。

在下面的示例中,引用了名为Melvin Smith ID#2878的员工:

‘ Using the AutoFilter on the workbook called NEW DD    
Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:=”=*Melvin Smith*”, _ Operator:=xlAnd
    Selection.Copy
‘ Going back to Melvin’s workbook named 2878    
Windows("2878.xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste

我知道简单地说“访问此页面”通常是一种不好的形式,但是该解决方案在编码领域是一种基本的解决方案。您需要声明并使用变量来存储员工姓名和相关编号。我建议您从下面的链接开始,给代码另一个镜头,然后如果仍然有问题,请返回。 excel-pratique.com/en/vba/variables.php
— 变体版本

15个电子表格如何命名?您可以重命名它们以匹配员工姓名/号码吗?如果是这样,当您找到新员工时,只要找不到新员工就可以创建新员工。如果是这种情况,您可以将名称或数字传递给变量,然后使用该变量定位WB
— Raystafarian 2014年

Answers:


0

我过去所做的方式就是完全按照您说的做-我将变量存储在另一张工作表/书中。

假设您创建一个名为“ Employees.xlsx”的工作簿,如下所示:

  | A               | B
  |-----------------|--------------------
 1| Employee        | Employee Num
 2| Melvin Smith    | 2878
 3| David Gilmour   | 1908

然后,创建两个子:一个子遍历表,另一个子进行复制。我们将员工的姓名和编号传递到第二个子目录中,它将使用这些名称和编号代替硬编码值。

Sub CopyAllSheets()

    ' Store a reference to the workbook
    Dim Wb As Workbook
    Set Wb = Workbooks("Employees.xlsx")

    ' Start at row 2 to ignore the column headers
    Dim Counter As Long
    For Counter = 2 To Wb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
        CopySingleSheet Wb.Sheets(1).Range("A" & Counter), Wb.Sheets(1).Range("B" & Counter)
    Next Counter

End Sub

Sub CopySingleSheet(EmpName As String, EmpNumber As String)

    ' Using the AutoFilter on the workbook called NEW DD
    Windows("NEW DD.xlsx").Activate
    ActiveSheet.Range("$H$1:$H$3055").AutoFilter Field:=8, Criteria1:="=*" & EmpName & "*", Operator:=xlAnd
    Selection.Copy
    ' Going back to Melvin’s workbook named 2878
    Windows(EmpNumber & ".xlsx").Activate
    Sheets("D dd N").Select
    Range("A1").Select
    ActiveSheet.Paste

End Sub

希望这是有道理的


我遇到编译错误,调试器告诉我第一个Counter变量未定义。您是否想知道对此内容的修改?谢谢。
— NATHAN ARNOLD 2014年

在这里,尝试一下。我没有声明Counter变量。
— user184994 2014年

非常感谢!这很好用!非常感谢!
— NATHAN ARNOLD 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.