簡體   English   中英

vba中的workbooks.add系統地打開了兩個工作簿

[英]workbooks.add in vba systematically opens two workbooks

當我嘗試在vba中打開新工作簿時-從基於我的“個人宏工作簿”的宏中使用-

Workbooks.Add

它系統地打開了兩個工作簿。

當我嘗試使用類似的東西:

Workbooks("book1").Activate

它很少起作用,因為單詞“ book”后的數字索引很少與“ book1”的數字索引匹配。

我的最終目的是自動命名創建的工作簿。

但是,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(“ book1”)。Activate”時,此子項效果很好。

但是,由於上述原因,這不會產生可重復的,可靠的結果。

任何幫助,將不勝感激。

如果您的代碼有問題,我會發現很多。

  1. 避免使用.Activate/.Select 您可能需要查看如何避免在Excel VBA宏中使用“選擇”

  2. 處理對象。 看看我如何聲明工作表/范圍/工作簿對象

這是您要嘗試的嗎?

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
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

但是,我找到了解決問題的完美方法,如下所示:


子ExportNameAndSave()

ActiveWindow.Activate

起點= ActiveWorkbook.Name

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設置lastrow =選擇

Range(“ A1”,Range(“ a1”)。Offset(0,50).End(xlToLeft))。Select設置lastcolumn =選擇

范圍(lastrow,lastcolumn)。選擇

Selection.Copy

Workbooks.Add

Dimcheckedopenworkbook作為Excel.Workbook

對於Excel中的每個checkedopenworkbook

    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

下次檢查的openworkbook

結束子


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM