2017-06-27 22 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

无论如何,谢谢你的回复。 –