2016-02-19 64 views
0

我有一個現有的工作簿將由多個用戶使用(誰將命名該工作簿唯一 - 我可以設置一個工作簿Codename if雖然需要,但不知道如何做到這一點?)。從現有(未知名稱)工作簿創建表單副本到一個新的(未知名稱)工作簿

我需要創建一個宏來打開一個新的工作簿(這可能是我不知道的名字,因爲它可能是'Book1','Book2','Book3'等),然後返回到存儲宏的原始工作簿,以及複製幾個(如果需要,可以一次做一個)工作表(我知道這些工作表的名稱)並將它們作爲新工作表粘貼到我創建的新工作簿中。宏不需要保存文件(實際上最好不要因爲我希望用戶將用戶最方便的位置保存在新的工作簿中)。

我試圖展示宏將做什麼,顯示明顯的問題,我不知道我創建/複製/粘貼到工作簿的名稱。

任何幫助,非常感謝!

Sub CopySheetintoNewWorkbook() 

'Macro opens new/blank workbook (name unknown?)' 
    Workbooks.Add 

'Macro goes back to original workbook where macro is saved (of which the name is unknown to the macro - i.e., users can and will change it)' 
    Windows("UnknownWorkbookName-1").Activate 

'Macro goes to a sheet which can be named and will be known, so this is no problem' 
    Sheets("KnownSheet").Select 
'Macro creates a copy of the sheet and pastes it as a new sheet within the new, unknown named workbook' 
    Application.CutCopyMode = False 
    Sheets("KnownSheet").Copy Before:=Workbooks("UnknownWorkbookName-2").Sheets(1) 

End Sub 
+1

您可以使用thisworkbook.name來獲取正在運行宏的工作簿的名稱,並將其用於稍後參考。類似地,你可以在workbook.add – Slubee

+0

之後強制分配一個名字。在'Workbooks.Add'之後,做一些類似於'Dim newWB as Workbook',然後'Set newWB = ThisWorkbook'。然後你可以使用'newWB.Sheets(「Sheet1」)。Range(「A1:A2」)。Value'或其他。 *或*,'Dim newWB as String','newWB = Thisworkbook.name',然後您將其稱爲'Workbooks(newWB).Sheets(「Sheet1」)...' – BruceWayne

回答

1

我們要複製工作表Sheet1 Sheet2的

這依賴於一個小竅門:

Sub qwerty() 
    Dim wb1 As Workbook, wbNEW As Workbook 
    Set wb1 = ActiveWorkbook 
    Sheets("Sheet1").Copy 
    Set wbNEW = ActiveWorkbook 
    wb1.Sheets("Sheet2").Copy after:=wbNEW.Sheets(1) 
End Sub 

當第一.Copy執行,創建一個新的工作簿並將其變成ActiveWorkbook ........休息簡單。

EDIT#1:

如果我們有一個基片要被複制的話,可以產生通過陣列片的名稱和環的陣列,每次複製一個片材:

Sub qwerty() 
    Dim wb1 As Workbook, wbNEW As Workbook 
    Dim ary() As String, s As String, i As Long 

    s = "Larry,Moe,Curly" 
    ary = Split(s, ",") 
    Set wb1 = ActiveWorkbook 
    i = 1 

    For Each a In ary 
     If i = 1 Then 
      Sheets(a).Copy 
      Set wbNEW = ActiveWorkbook 
     Else 
      wb1.Sheets(a).Copy after:=wbNEW.Sheets(1) 
     End If 
     i = 2 
    Next a 

    wbNEW.Activate 
End Sub 
+0

使用'Activeworkbook'而不是'Thisworkbook'? (我仍然試圖學習何時使用哪個) – BruceWayne

+0

@BruceWayne使用* ThisWorkbook *限制您將工作表放在與代碼相同的工作簿中...........但這可能是O.K.在多數情況下。 –

+0

因此,如果您的代碼在Workbook1中,當您複製工作簿並使用ThisWorkbook時,那麼ThisWorkbook會引用Workbook1,而不是新的?因此,使用'Set wb1 = ThisWorkbook'就好像在設置wb1 = Workbook(「Workbook1」)'可以這麼說嗎? – BruceWayne

相關問題