Excel VBA将范围粘贴到新工作簿中

时间:2017-12-29 20:38:29

标签: excel vba excel-vba

我遇到这个问题。我正在尝试粘贴一个范围,该范围根据用户表单中的选择而变化到新工作簿。粘贴不起作用。我得到了反馈,我需要消除活动表的使用,并命名具体的目标工作簿。如果它是一个新的工作簿,我不知道如何命名它。我也不知道如何将其保存到用户桌面。

反正。代码在这里失败(第1行):

Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Activate
Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Unprotect
Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Range("BA6::BT200").Copy

下面是完整的代码,因此您可以看到我正在尝试的操作 - 从userform cboExportInvoiceWeek传递工作表名称变量。理想情况下,用户单击一个按钮并创建一个新的csv文件。我唯一的变量是工作表(一年中每周一个)。单元格值是静态的。

同样,我的问题是实际粘贴到新工作簿中。

Private Sub cmbInvoicesExport_Click()

Application.ScreenUpdating = False

Dim CurrentFileName As String
CurrentFileName = ActiveWorkbook.Name
Debug.Print "Active File: " + CurrentFileName

Dim wsexport As String
wsexport = cboExportInvoiceWeek.Value    

Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Activate
Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Unprotect
Workbooks("Restaurant Manager -Master.xlsx").Worksheets(wsexport).Range("BA6::BT200").Copy

Set NewBook = Workbooks.Add

NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues)
NewBook.SaveAs Filename:=NewBook.Worksheets("Sheet1").Range("E3").Value

Application.DisplayAlerts = False
Application.DisplayAlerts = True
Application.CutCopyMode = False
Workbooks(CurrentFileName).Activate
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:0)

一般情况下:我会在每个可疑步骤后检查err.number。 详情:

  1. 当文件未打开或引用的工作表不存在时,VBA会丢弃下标错误。所以我会拆分工作簿(“餐厅经理-Master.xlsx”)。工作表(wsexport)。激活

    工作簿(“餐厅经理-Master.xlsx”)。激活

    工作表(wsexport).Activate

  2. 对于SaveAs,我会将所需的文件名放到变量中,看看它的外观。您可能还必须指定路径。你也可以看到错误的描述。

  3. 您可以通过几种方式找到桌面路径,例如所以:

    sPath = environ $(“USERPROFILE”)& “\桌面\”

  4. 在此处详细了解:enter link description here