[英]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”時,此子項效果很好。
但是,由於上述原因,這不會產生可重復的,可靠的結果。
任何幫助,將不勝感激。
如果您的代碼有問題,我會發現很多。
避免使用.Activate/.Select
。 您可能需要查看如何避免在Excel VBA宏中使用“選擇”
處理對象。 看看我如何聲明工作表/范圍/工作簿對象
這是您要嘗試的嗎?
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.