excel 工作簿.在vba中添加系统地打开两个工作簿

yzxexxkh  于 2023-10-22  发布在  其他
关注(0)|答案(4)|浏览(115)

当我尝试在vba中打开一个新的工作簿时-从基于我的个人宏工作簿的宏-使用:

Workbooks.Add

它系统地打开两个工作簿。
当我尝试使用类似的东西时:

Workbooks("book1").Activate

它很少起作用,因为单词“book”后面的数字索引很少与“book 1”匹配。
我的最终目的是自动命名创建的工作簿。
但是,vba最终命名的是第二个空工作簿,而不是第一个需要的工作簿。
Office 365家庭版
完整的代码是:

********************
Sub ExportNameAndSave()

ActiveWindow.Activate
ActiveSheet.Select

Dim lastrow As Range
Dim lastcolumn As Range
Dim refnumber As String

refnumber = Range("b4").Value

Range("A1", Range("a60000").End(xlUp)).Select
Set lastrow = Selection

Range("A1", Range("a1").Offset(0, 50).End(xlToLeft)).Select
Set lastcolumn = Selection

Range(lastrow, lastcolumn).Select

Selection.Copy
Workbooks.Add

ActiveWorkbook.Activate
ActiveWorkbook.SaveAs Filename:="D:\Common Area\" & refnumber & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub
********************

注意:我已经通过几十个提示在这个论坛上遇到类似的问题时,他们从菜单打开Excel工作簿的人。他们不工作。

请注意,我的问题是关于使用vba代码打开工作簿。
宏一直工作到Workbooks.Add之前。
然而,在这一点上,这是会发生的事情:
1)它创建一个新的工作簿,并导出包含在初始工作簿的初始工作表的内容到这个新的工作表-这正是我想要的;
2)然后它打开第二个工作表-这不是我想要的-并在命令“ActiveWorkbook.Activate”,它选择了第二个不需要的工作簿,并成功地命名和保存它。
因此,我有一个成功命名和保存的文件,但它是空的内容,因为第二个工作簿是空的。我想要的是命名并保存包含导出内容的第一个工作簿。

注意:例如,当我关闭所有Excel工作簿、仅重新打开起始工作簿以及将“Workbooks.Add”行替换为“'Workbooks(“book 1”).Activate”时,此子程序工作良好。

然而,由于上述原因,这并不能给出给予可重复的、可靠的结果。
如果你能帮忙的话,我将不胜感激。

xnifntxz

xnifntxz1#

我在你的代码中看到了很多问题。
1.避免使用.Activate/.Select。您可能想查看How to avoid using Select in Excel VBA macros
1.使用对象。查看我如何声明工作表/范围/工作簿对象
这就是你要尝试的吗?

Sub ExportNameAndSave()
    Dim lRow As Long, lCol As Long
    Dim refnumber As String
    Dim ws As Worksheet
    Dim wb As Workbook

    '~~> Change this to the relevant sheet
    Set ws = ActiveSheet

    With ws
        '~~> Find last row and last column
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        lCol = .Cells(1, .Columns.Count).End(xlToLeft).Column

        refnumber = .Range("b4").Value

        '~~> Set your range
        Set rng = .Range(.Cells(1, 1), .Cells(lRow, lCol))

        '~~> Add a new workbook
        Set wb = Workbooks.Add

        '~~> Copy the range to sheet1 of new workbook
        rng.Copy wb.Sheets(1).Range(rng.Address)
    End With

    '~~> Save the new workbook
    wb.SaveAs Filename:="D:\Common Area\" & refnumber & ".xlsm", _
              FileFormat:=xlOpenXMLWorkbookMacroEnabled, _
              CreateBackup:=False

End Sub
new9mtju

new9mtju2#

Sub ExportNameAndSave()

ActiveWindow.Activate
ActiveSheet.Select

Dim wkbk As Workbook
Dim lastrow As Range
Dim lastcolumn As Range
Dim refnumber As String

refnumber = Range("b4").Value

Range("A1", Range("a60000").End(xlUp)).Select
Set lastrow = Selection

Range("A1", Range("a1").Offset(0, 50).End(xlToLeft)).Select
Set lastcolumn = Selection

Range(lastrow, lastcolumn).Select

Selection.Copy
Set wkbkSource = Workbooks.Add

ActiveWorkbook.Activate
ActiveWorkbook.SaveAs Filename:="D:\Common Area\" & refnumber & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub
jk9hmnmh

jk9hmnmh3#

然而,我发现了一个完美的工作方法来解决我的问题,如下所示:
SubExportNameAndSave()
ActiveWindow.Activate
startingpoint = ActiveWorkbook.Name
ActiveSheet.Select
Dim lastrow As Range Dim lastcolumn As Range Dim refnumber As String
refnumber = Range(“b4”)。值
Range(“A1”,Range(“a60000”).End(xlUp)).Select Set lastrow = Selection
Range(“A1”,Range(“a1”).Offset(0,50).End(xlToLeft)).Select Set lastcolumn = Selection
Range(lastrow,lastcolumn).选择
Selection.Copy
Workbooks.Add
Dim checkedopenworkbook As Excel.工作簿
对于每个选中的打开工作簿在Excel中。工作簿

If checkedopenworkbook.Name = "PERSONAL.XLSB" Then

        Else

        If checkedopenworkbook.Name = startingpoint Then

        Else

        checkedopenworkbook.Activate

        If ActiveSheet.Range("a1").Value = "" Then

            checkedopenworkbook.Close

        Else

            checkedopenworkbook.Activate

            checkedopenworkbook.SaveAs Filename:="D:\Common Area\" & refnumber & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

        End If

    End If

    End If

下一个选中打开工作簿
End Sub

nhhxz33t

nhhxz33t4#

仅限于使用Workbook.Add命名Excel文件。我为此挣扎了一段时间,在Excel中向打开的文件中添加数字时存在问题。我的发现是:仔细阅读Workbook.ADD和Workbook.Open之间的区别。
ADD函数将文件名作为模板,并打开一个新文件。应该如何称呼:原始文件名+一个数字。
使用OPEN函数时,名称保持为您作为参数输入的名称。
使用ADD函数而不是OPEN函数看起来很自然,但唉。

相关问题