修改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.