Excel VBA - 无需警告即可移动或复制工作表的代码

时间:2011-11-07 18:05:40

标签: excel vba excel-vba

我正在尝试创建一个宏,其行为与右键单击工作簿选项卡,选择移动或复制,检查复制选项,选择另一个打开的工作簿相同并单击确定但没有警告。我找到了禁用警告的代码,我能够录制一个宏,它可以执行我想要的但我不知道如何将其打开工作簿来复制到它。

简而言之,如何使用以下代码工作 WorksheetIWantToCopy 是用户当前选择的代码, OpenWorkbookIWantToCopyToo.xlsx 工作簿由用户从打开的工作簿列表中选择。

Application.DisplayAlerts = False
Sheets("**WorksheetIWantToCopy**").Select
Sheets("**WorksheetIWantToCopy**").Copy Before:=Workbooks( _
    "**OpenWorkbookIWantToCopyToo.xlsx**").Sheets(1)

我感谢任何人都能提供的任何信息。我的团队非常感谢您的支持(由于我们并不真正关心的冲突,我们目前必须通过25次警告确定)。 THX!

2 个答案:

答案 0 :(得分:1)

如果您要复制的工作表始终是活动工作表,则可以使用ActiveSheet

至于让用户选择工作簿,它可以像使用InputBox一样简单。

Public Function getWorkbookName() As String
   Dim i As Integer, sListOfWbks As String, sRsp As String
   ' build list of workbooks
   For i = 1 To Workbooks.Count
      sListOfWbks = sWbkList & vbCrLf & i & " - " & Workbooks(i).Name
   Next i
   sRsp = InputBox("Select workbook." & vbCrLf & sListOfWbks)
   If IsNumeric(sRsp) Then
      getWorkbookName = Workbooks(CInt(sRsp)).Name
   Else
      ' user pressed cancel or entered invalid text
      getWorkbookName = ""
   End If
End Function

这个基本示例当然会列出所有工作簿,包括隐藏的加载项和您正在离开的工作簿。

答案 1 :(得分:0)

这需要在其他任何事情之前说:总是,总是,总是在使用VBA自动改组excel工作簿时使用.Copy而不是.MoveMove具有固有的风险,因为它是对其他文件的修改,如果您的代码行为不当,那么您可能会丢失您正在使用的所有数据。

首先,要知道哪个工作簿是哪个,没有含糊之处:

Dim wkbkDestination, wkbkTemporary As Workbook
Set wkbkDestination = Workbooks("OpenWorkbookIWantToCopyTo.xlsx")
Set wkbkTemporary = Workbooks.Open("WorkbookIWantToCopy.xlsx")

接下来,将所需的标签复制到目标工作簿,重命名新标签以防止出错,并关闭第二个工作簿,而不保存。

wkbkTemporary.Worksheets("WorksheetIWantToCopy").Copy Before:=wkbkDestination.Worksheets(1)
wkbkDestination.Worksheets(1).Name = "WorkbookIWantToCopy"
wkbkTemporary.Close SaveChanges = False

当然,根据您打算使用的确切控件,可以通过很多方式实现此代码。根据您的描述,有些不清楚您尝试解决的确切问题是什么,以及这是您为某个给定文件列表尝试完成的一次性事件,或者是否要使用此功能持续不断。