2017-06-27 26 views
2

當我嘗試和VBA打開一個新的工作簿 - 基於我的個人宏工作簿宏 - 使用:workbooks.add在VBA系統中打開兩個工作簿

Workbooks.Add 

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

當我嘗試使用類似相同的:

Workbooks("book1").Activate 

它的作品很少,因爲這個詞「書」後的數字指標很少匹配的「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)它創建了一個新的工作簿和出口包含在最初的工作簿到這個新工作表中的INTIAL片的內容 - 這正是我想要的;

2)然後它打開第二張工作表 - 這不是我想要的 - 並且在命令「ActiveWorkbook.Activate」中,它選擇第二個不需要的工作簿,並實際上成功命名並保存它。

因此,我有一個成功命名和保存的文件,但它沒有內容,因爲第二個工作簿是空的。我想要的是命名並保存包含導出內容的第一個工作簿。

注意:此子效果很好,當我關閉我所有的Excel工作簿,當我重新開放只是開始工作簿,當我更換行「Workbooks.Add」與「'工作簿(‘BOOK1’)。激活「,例如。

但是,由於上述原因,這不會給出可重複的,可靠的結果。

任何幫助,將不勝感激。

+0

閱讀您的文章後,我仍然困惑,你想達到什麼目的?你想複製'ActiveSheet'(這已經不是建議)到一個新的工作簿?你想通過代碼創建這個新的工作簿?用這行「Workbooks.Add」? –

+3

快速查詢。你正在複製範圍,但不粘貼它的地方? –

+1

@SiddharthRout這是一個很好的;)錯過了這個 –

回答

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

爲什麼你會激活並已經激活的窗口? :) –

+0

這也行不通。 –

3

我看到很多,如果在您的代碼問題。

  1. 避免使用.Activate/.Select。你可能想看到How to avoid using Select in Excel VBA macros

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

++你是如何快速輸入的?你有提前準備好所有類型的答案嗎?並以某種方式將您編入目錄? (我希望你使用'Find'獲得最後一行和一列) –

+0

lol ..事實上我太慢了..問題在16分鐘之前被問到,而BTW Lowpar更快...... –

+0

你可以「聞到「它? 100K標記 –

0

但是,我發現了一個完美的我的問題的工作變通,具體如下:


子ExportNameAndSave()

ActiveWindow.Activate

起點= ActiveWorkbook。名稱

ActiveSheet.Select

昏暗LASTROW作爲範圍 昏暗lastcolumn作爲範圍 昏暗refnumber作爲字符串

refnumber =範圍( 「B4」)。值

範圍( 「A1」,範圍( 「a60000」)。完(xlUp))。選擇 集LASTROW =選擇

範圍( 「A1」,範圍( 「A1」)。偏移(0,50).END(xlToLeft))。選擇 集lastcolumn =選擇

範圍(lastrow,lastcolumn)。選擇

Selection.Copy

Workbooks.Add

昏暗checkedopenworkbook作爲Excel.Workbook

對於每個checkedopenworkbook在Excel.Workbooks

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 

接着checkedopenworkbook

結束子


+0

無論如何,謝謝你的回覆。 –