Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-在没有警告的情况下移动或复制工作表的代码_Vba_Excel - Fatal编程技术网

Excel VBA-在没有警告的情况下移动或复制工作表的代码

Excel VBA-在没有警告的情况下移动或复制工作表的代码,vba,excel,Vba,Excel,我正在尝试创建一个宏,其作用与右键单击工作簿选项卡、选择“移动”或“复制”、选中“复制”选项、选择另一个打开的工作簿并单击“确定”相同,但没有警告。我找到了禁用警告的代码,我可以录制一个宏,它可以执行我想要的操作,但我不知道如何使它请求复制到哪个打开的工作簿 简而言之,如果用户当前已选择了WorksheetIWantToCopy,而OpenWorkbookIWantToCopyToo.xlsx是用户从打开的工作簿列表中选择的工作簿,那么我如何使以下代码正常工作 我很感激任何人能提供的信息。我的团

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

简而言之,如果用户当前已选择了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 Sub
Workbook\u Open()MsgBox“将错误设置为false”Application.DisplayAlerts=false MsgBox“错误设置为false”End Sub
1。这比我高一级。您知道为什么Application.DisplayAlerts=False不能阻止显示名称错误吗?我将以下代码放在发送和接收工作簿中,错误仍然显示Private Sub
Workbook\u Open()MsgBox“将错误设置为false”Application.DisplayAlerts=false MsgBox“错误设置为false”End Sub