我正在尝试创建一个宏,其行为与右键单击工作簿选项卡,选择移动或复制,检查复制选项,选择另一个打开的工作簿相同并单击确定但没有警告。我找到了禁用警告的代码,我能够录制一个宏,它可以执行我想要的但我不知道如何将其打开工作簿来复制到它。
简而言之,如何使用以下代码工作 WorksheetIWantToCopy 是用户当前选择的代码, OpenWorkbookIWantToCopyToo.xlsx 是工作簿由用户从打开的工作簿列表中选择。
Application.DisplayAlerts = False
Sheets("**WorksheetIWantToCopy**").Select
Sheets("**WorksheetIWantToCopy**").Copy Before:=Workbooks( _
"**OpenWorkbookIWantToCopyToo.xlsx**").Sheets(1)
我感谢任何人都能提供的任何信息。我的团队非常感谢您的支持(由于我们并不真正关心的冲突,我们目前必须通过25次警告确定)。 THX!
答案 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
而不是.Move
。 Move
具有固有的风险,因为它是对其他文件的修改,如果您的代码行为不当,那么您可能会丢失您正在使用的所有数据。
首先,要知道哪个工作簿是哪个,没有含糊之处:
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
当然,根据您打算使用的确切控件,可以通过很多方式实现此代码。根据您的描述,有些不清楚您尝试解决的确切问题是什么,以及这是您为某个给定文件列表尝试完成的一次性事件,或者是否要使用此功能持续不断。