从另一个工作簿上新创建的.xlsx文件上运行宏

时间:2017-03-30 19:21:49

标签: excel-vba vba excel

我正在打开并将.csv转换为共享驱动器位置上的.xlsx文件。创建.xlsx后,它将保持打开状态。执行此操作的宏也位于共享驱动器上的主工作簿中。现在我设置为用户打开工作簿并选择一个打开并转换文件的命令按钮。

用户从列表框中选择所需的模板,然后单击第二个命令按钮,该按钮运行以下宏,该宏调用特定的宏,该宏将刚刚创建的.xlsx转换为正确的格式。

我的所有宏都可以工作,但下面的宏除外。它停在第一个工作簿上。现在新创建的.xlsx是其文件夹中唯一的.xlsx,但最终可能有多个.csls文件从多个.csv文件创建。

  Sub Run_Macros()

    'IF USER SELECTED FXX_Rejects
    If Range("A8").Value = Range("A2").Value Then
    'ACTIVATE OTHER WORKBOOK
    Workbooks("*.xlsx").Activate
    Workbooks("*.xlsx").Sheets("Sheet1").Select
    'AND THEN RUN APPROPRIATE MACRO
     Call aaLayout


    'IF USER SELECTED LXX_Rejects
    ElseIf Range("A8").Value = Range("A3").Value Then
    'ACTIVATE OTHER WORKBOOK
    Workbooks("*.xlsx").Activate
    Workbooks("*.xlsx").Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call abLayout


    'IF USER SELECTED HXXXX_Rejects
    ElseIf Range("A8").Value = Range("A4").Value Then
    'ACTIVATE OTHER WORKBOOK
    Workbooks("*.xlsx").Activate
    Workbooks("*.xlsx").Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call acLayout


    'IF USER SELECTED SXXX_Rejects
    ElseIf Range("A8").Value = Range("A5").Value Then
    'ACTIVATE OTHER WORKBOOK
    Workbooks("*.xlsx").Activate
    Workbooks("*.xlsx").Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call adLayout




    End If

    End Sub

我已经编辑了我的问题帖子并添加了下面的宏,它定位并转换准备模板的.CSV文件。也许这可以帮助回答我原来的问题。

    Sub CSVFiles()
        Dim MyFiles As String, ThisMonth As String
        Dim startPath As String
        Dim wb As Workbook
        ThisMonth = Format(Date, "mmmm")
        startPath = "\\XXX\2017\" & ThisMonth & "\"
        MyFiles = Dir(startPath & "*.csv")
        Do While MyFiles <> ""

        Set wb = Workbooks.Open(startPath & MyFiles)

        Call XLSXConvert
        'Converts all csv files, saves and closes files.  Prepares files for full template creation.
        wb.SaveAs fileName:=startPath & Replace  (MyFiles, ".csv", ".xlsx"),FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        wb.Close
        MyFiles = Dir
        Loop
    End Sub

1 个答案:

答案 0 :(得分:1)

你的问题是&#34; *。xlsx&#34;。操作系统命令接受*作为通配符,但您不会调用操作系统命令。您正在Workbooks集合上调用VBA方法,该集合使用数字(通常是打开文件的顺序)作为其标识符。工作簿()。激活不会转到文件夹并查看所有可用文件并选择匹配的文件。 Workbooks.Open()会这样做,但它仍然不接受通配符,你说你想要的工作簿已经打开。

Workbooks()。激活查看标识符的打开工作簿列表。您尝试激活的对象是在您到达此点之前运行的代码中创建的,我们无法从您的发布中看到。在该代码的某处,您可以将该对象分配给变量,然后您可以在此代码中创建一个参数,以便传入该变量。

你还可以做什么,如果你知道你打开的唯一.xlsx文件是你想要的那个,循环遍历所有打开的文件并检查名称,看它是否以.xlsx结尾,如果是将其分配给变量。如下图所示:

  Sub Run_Macros()


    Dim wb As Workbook
    Dim target As Workbook
    Dim wbs As Workbooks


    Set wbs = Workbooks
    For Each wb In wbs
        If LCase(Right(wb.FullName, 5)) = ".xlsx" Then
            Set target = wb
        End If
    Next wb

    'IF USER SELECTED FXX_Rejects
    If Range("A8").Value = Range("A2").Value Then
    'ACTIVATE OTHER WORKBOOK
    target.Activate
    target.Sheets("Sheet1").Select
    'AND THEN RUN APPROPRIATE MACRO
    Call aaLayout


    'IF USER SELECTED LXX_Rejects
    ElseIf Range("A8").Value = Range("A3").Value Then
    'ACTIVATE OTHER WORKBOOK
    target.Activate
    target.Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call abLayout


    'IF USER SELECTED HXXXX_Rejects
    ElseIf Range("A8").Value = Range("A4").Value Then
    'ACTIVATE OTHER WORKBOOK
    target.Activate
    target.Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call acLayout


    'IF USER SELECTED SXXX_Rejects
    ElseIf Range("A8").Value = Range("A5").Value Then
    'ACTIVATE OTHER WORKBOOK
    target.Activate
    target.Sheets("Sheet1").Activate
    'AND THEN RUN APPROPRIATE MACRO
    Call adLayout

    End If

    End Sub