2016-02-19 111 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

相关问题