VBA:使用VLookUps从值列表创建新工作簿

时间:2015-07-17 22:03:03

标签: excel vba excel-vba vlookup

在接触社区之前,我一直在寻找和学习VBA。

我有一个工作簿,其中包含一个包含值列表的工作表。在另一个工作表中,该列表是其中一个单元格中的下拉列表。该单元格与许多vlookup和公式相关联,可以快速验证某些公司数据。

我一直在调整另一篇文章中的宏,并让它从列表中复制值并保存到我想要的位置,并将其命名为我想要的。我还没有重复这个过程......有什么建议吗?这是我到目前为止一直在搞乱的代码。

Sub create()
Dim wb As Workbook, sh1 As Worksheet, lr As Long, rng As Range
Set sh1 = Sheets("GIW")
Set sh2 = Sheets("3A")
lr = sh1.Cells(Rows.Count, "A").End(xlUp).Row
Set rng = sh1.Range("A2:A" & lr)
    For Each c In rng
        Set wb = ActiveWorkbook
        wb.Sheets.Add
        wb.Sheets(1).Range("D10") = c.Value
        wb.SaveAs c.Value & ".xlsx" = "C:\Users\ianc\Desktop\Exhibit 2 Data     Validation.xlsx"
        wb.Close False
    Next
End Sub

2 个答案:

答案 0 :(得分:0)

我能看到的唯一问题是使用ActiveWorkbook。尝试将wb设置为您正在使用的工作簿的名称。

这是从录制的宏开始的第一个技巧之一,你必须摆脱记录器使用特定名称开始的所有ActiveSheetActiveWorkbook引用。 VBA表现得更好。

答案 1 :(得分:0)

Sub create()

    Const FPATH As String = "C:\_Stuff\"

    Dim wb As Workbook, sh1 As Worksheet, lr As Long, rng As Range
    Dim c As Range

    Set sh1 = ThisWorkbook.Sheets("GIW")
    lr = sh1.Cells(Rows.Count, "A").End(xlUp).Row
    Set rng = sh1.Range("A2:A" & lr)

    Set wb = ActiveWorkbook
    wb.Sheets.Add before:=wb.Sheets(1)

    For Each c In rng
        wb.Sheets(1).Range("D10") = c.Value
        wb.SaveCopyAs FPATH & c.Value & ".xlsx"
    Next

    wb.Close False

End Sub