Excel VBA-在没有警告的情况下移动或复制工作表的代码
我正在尝试创建一个宏,其作用与右键单击工作簿选项卡、选择“移动”或“复制”、选中“复制”选项、选择另一个打开的工作簿并单击“确定”相同,但没有警告。我找到了禁用警告的代码,我可以录制一个宏,它可以执行我想要的操作,但我不知道如何使它请求复制到哪个打开的工作簿 简而言之,如果用户当前已选择了WorksheetIWantToCopy,而OpenWorkbookIWantToCopyToo.xlsx是用户从打开的工作簿列表中选择的工作簿,那么我如何使以下代码正常工作Excel VBA-在没有警告的情况下移动或复制工作表的代码,vba,excel,Vba,Excel,我正在尝试创建一个宏,其作用与右键单击工作簿选项卡、选择“移动”或“复制”、选中“复制”选项、选择另一个打开的工作簿并单击“确定”相同,但没有警告。我找到了禁用警告的代码,我可以录制一个宏,它可以执行我想要的操作,但我不知道如何使它请求复制到哪个打开的工作簿 简而言之,如果用户当前已选择了WorksheetIWantToCopy,而OpenWorkbookIWantToCopyToo.xlsx是用户从打开的工作簿列表中选择的工作簿,那么我如何使以下代码正常工作 我很感激任何人能提供的信息。我的团
我很感激任何人能提供的信息。我的团队非常感谢您的支持(由于我们并不真正关心的冲突,我们目前必须在25个警告中点击ok)。谢谢 如果要复制的工作表始终是活动工作表,则可以使用
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
这个基本示例当然会列出所有的工作簿,包括隐藏的加载项和您要离开的工作簿。如果您要复制的工作表始终是活动工作表,那么您可以使用
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
这个基本示例当然会列出所有的工作簿,包括隐藏的外接程序和您要离开的工作簿。在使用VBA自动洗牌excel工作簿时,需要先说明这一点:始终、始终、始终使用
。复制
而不是。移动
<代码>移动具有固有的风险,因为它是对另一个文件的修改,如果代码行为不当,则可能会丢失正在处理的所有数据
首先,要知道哪个工作簿是哪个,不要含糊不清:
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
当然,根据您打算使用的确切控件,有很多方法可以实现此代码。从您的描述中,不太清楚您正试图解决的确切问题是什么,这是您试图为给定的文件列表完成的一次性事件,还是该函数将持续使用。这需要在其他任何事情之前先说明:始终,始终,使用VBA自动洗牌excel工作簿时,始终使用
.Copy
而不是.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
当然,根据您打算使用的确切控件,有很多方法可以实现此代码。从您的描述可以看出,您试图解决的确切问题有点不清楚,这是您试图为给定的文件列表完成的一次性事件,还是该功能将持续使用。是否要使用?顺便说一句,您可以使用Excel对象模型并删除
Select
行。您需要向用户显示一个用户表单,其中包含打开的工作簿列表供他们选择,或者显示一个带有编号列表的输入框,他们可以键入要将工作表复制到的工作簿的编号。注意:“工作表”不同于“工作簿”-如果您能避免问题中的任何混淆(请记住:您可以随时对其进行编辑),则任何答案都可能更有帮助。您知道为什么Application.DisplayAlerts=False不能阻止显示名称错误吗?我将以下代码放在发送和接收工作簿中,错误仍然显示专用子工作簿\u Open()MsgBox“将错误设置为false”Application.DisplayAlerts=false MsgBox“错误设置为false”End Sub
是否要使用?顺便说一句,您可以使用Excel对象模型并删除Select
行。您需要向用户显示一个用户表单,其中包含打开的工作簿列表供他们选择,或者显示一个带有编号列表的输入框,他们可以键入要将工作表复制到的工作簿的编号。注意:“工作表”不同于“工作簿”-如果您能避免问题中的任何混淆(请记住:您可以随时对其进行编辑),则任何答案都可能更有帮助。您知道为什么Application.DisplayAlerts=False不能阻止显示名称错误吗?我将以下代码放在发送和接收工作簿中,错误仍然显示Private Sub-Workbook\u Open()MsgBox“Setting errors to false”Application.DisplayAlerts=false MsgBox“errors set to false”End Sub
1。这比我高一级。您知道为什么Application.DisplayAlerts=False不能阻止显示名称错误吗?我将以下代码放在发送和接收工作簿中,错误仍然显示Private SubWorkbook\u Open()MsgBox“将错误设置为false”Application.DisplayAlerts=false MsgBox“错误设置为false”End Sub
1。这比我高一级。您知道为什么Application.DisplayAlerts=False不能阻止显示名称错误吗?我将以下代码放在发送和接收工作簿中,错误仍然显示Private SubWorkbook\u Open()MsgBox“将错误设置为false”Application.DisplayAlerts=false MsgBox“错误设置为false”End Sub