使用Excel vba创建活动工作表的备份副本
我需要将活动工作表的备份副本创建到新工作簿中。 这样创建的新工作簿中只有活动工作表(没有宏,没有vba) 我需要它发生在“打开”我的工作表事件之后 执行以下操作:使用Excel vba创建活动工作表的备份副本,excel,vba,backup,worksheet,Excel,Vba,Backup,Worksheet,我需要将活动工作表的备份副本创建到新工作簿中。 这样创建的新工作簿中只有活动工作表(没有宏,没有vba) 我需要它发生在“打开”我的工作表事件之后 执行以下操作: Private Sub Workbook_Open() ActiveWorkbook.SaveCopyAs "E:\Projects\FolderName\FileName.xlsm" End Sub 它复制整个工作簿,
Private Sub Workbook_Open()
ActiveWorkbook.SaveCopyAs "E:\Projects\FolderName\FileName.xlsm"
End Sub
它复制整个工作簿,其中包含所有vba代码和宏,而不是我需要的
是否有办法只复制活动工作表
理想情况下,我希望有单元格引用(我将文件路径存储在不同的工作表中,存储在名为“BackupPath”的单独单元格中)。这就是您想要的吗
Private Sub Workbook_Open()
Var_Path = "D:...\Wb2.xls"
File1 = ActiveWorkbook.Name
Workbooks.Open Var_Path, 0, ReadOnly:=False
File2 = ActiveWorkbook.Name
Workbooks(File1).Sheets("Feuil1").Copy Before:=Workbooks(File2).Sheets("Feuil3")
End Sub
(请在此处找到:)
要从另一个单元格打开,您可以将
Var\u Path=“D:…\Wb2.xls”
替换为Var\u Path=range(“A1”)。text
(考虑到range A1是您的单元格“BackupPath”)请尝试下一个代码:
Private Sub Workbook_Open()
Dim wb As Workbook, shC As Worksheet
Dim sh As Worksheet, i As Long, strBackup As String, arr As Variant
Set shC = ThisWorkbook.ActiveSheet 'this should be clear...
strBackup = Range(ThisWorkbook.Names("BackupPath")).Value 'extract the string from the named range
Set wb = Workbooks.Add 'open a new workbook
shC.Copy before:=wb.Worksheets(1) 'copy the active sheet before the existing one
If wb.Worksheets.Count > 1 Then
'delete all sheets, except the first
For i = wb.Worksheets.Count To 2 Step -1
Application.DisplayAlerts = False
wb.Worksheets(i).Delete
Application.DisplayAlerts = False
Next i
End If
arr = Split(strBackup, ".") 'split the path on the dot "."
'the last array element will be extension
arr(UBound(arr)) = "xlsx" 'change exiting extension with "xlsx"
strBackup = Join(arr, ".") 'join the processed array and obtain the correct path
wb.SaveAs strBackup, xlWorkbookDefault 'save the workbook
wb.Close False 'close it without saving
MsgBox "A backup has been done, like " & strBackup
End Sub
“BackupPath”是一个命名范围吗?如果不需要宏,则应将工作簿另存为xlsx。您的命名范围是否也包含扩展名?@FaneDuru“BackupPath”是命名范围吗?-它是一个命名单元,我在其中存储导出文件的路径。理想情况下,我希望引用该单元格,而不是像我在文章中所显示的那样,在vba中键入path。关于第二部分-我尝试保存为xlsx-打开保存的文件时收到错误消息-“Excel无法打开文件,因为扩展名或格式无效”,无法打开…抱歉,但我只有一张工作表(需要创建备份副本的活动工作表)当您尝试手动复制工作表时,这与此完全相同,Excel会询问您要将其粘贴到何处。在我的示例中,这是在备份文件中的工作表3之前:)因此,这里的代码从活动工作簿复制工作表1,将其粘贴到另一个工作簿的工作表3之前。好的,那么,如果我想将活动工作簿中的“工作表1”粘贴到新工作簿中,而不使用任何其他工作表,那么,在这种情况下,我会编写:File2=ActiveWorkbook.Name Workbooks(File1).Sheets(“Feuil1”).复制或仅复制工作簿(File1).Sheets(“Feuil1”)?File2=ActiveWorkbook.Name工作簿(File1).Sheets(“Sheet1”)对不起,我认为在这种情况下它不起作用……但是你仍然可以有一张未使用的工作表,否则,对于第一次备份,你可以选择第一个工作簿中的所有单元格,然后选择备份文件中的A1区域并粘贴。事实上,你可以用工作表替换空文件。要知道这是否是第一次备份,你只需要o添加一个条件来计算备份文件中的工作表数。OMG,它工作得很好(看起来也很复杂)…谢谢you@Hell-1931年:很高兴我能帮上忙!代码没那么复杂…我会评论它的行,你会理解它的,没有问题,我想/希望…:)@谢谢!!!会容易得多,明天(我的早上)我会一步一步地完成。。。作品perfect@Hell-1931年:将相关评论放在任何一行。。。