VBA创建备份

时间:2013-03-29 15:00:16

标签: excel excel-vba vba

我对这里的宏观事件有疑问。以下是我的代码。这将执行以下操作'

Private Sub SaveAsTabDelimited(ByVal sFileName As String)

  With ActiveWorkbook

    .SaveAs Filename:=sFileName, FileFormat:=xlText, CreateBackup:=True

  End With

End Sub

Public Sub test()

  SaveAsTabDelimited "C:\Users\te160772\Desktop\Toad Test\Testsanthu.txt"

  ActiveWorkbook.Close savechanges:=True

End Sub
  1. 它将excel文件转换为制表符分隔的txt文件
  2. 它会创建excel文件的备份副本 我希望每天都能执行此操作,以便每天将excel文件上传到Oracle表。将Excel电子表格转换为制表符分隔的txt文件的原因是保留格式(防止在将其导出到oracle时删除前导零)
  3. 但是现在我正在尝试增强此代码,以便执行以下操作而不会出现任何故障。我试图以各种可能的方式做到这一点。因为我对编程很新,所以我无法做到这一点。

    1. 代码应该将excel文件转换为tab分隔保存在我的桌面上(希望我当前的代码足以执行此操作)
    2. 它应该在名为“Repository”的文件夹(桌面中的文件夹)中创建备份副本。如果可能,对工作簿的每次更改都应生成包含版本历史记录的备份副本(文件名中的日期和时间戳)
    3. 与我的代码相关的最大问题是,在关闭时,会出现三个单独的对话框 - 一个询问我是否要保存,另一个询问我是否要保留我在剪贴板中复制的内容,另一个是替换保存在文件夹中的现有文本文件有没有办法从宏中回答这些对话框(或抑制它们),所以每次运行宏时我都不需要手动点击是或否?
    4. 我已经将我的宏附加到excel中的“形状”但我的首要任务是在关闭我的工作簿时运行我的宏。每当我的工作簿发生任何更改以及保存工作簿时,都应该创建一个制表符分隔的文本文件,它应该替换现有的Txt文件,而不需要任何确认对话框。
    5. 请帮我解决这个问题。这对我来说是非常需要的

      万分感谢

1 个答案:

答案 0 :(得分:2)

  

代码应该将excel文件转换为tab分隔保存在我的桌面上(希望我当前的代码段足以执行此操作)

是的,您可以硬编码桌面路径或使用此代码自动获取桌面路径

Sub GetDesktopPath()
    Dim oWS As Object
    Dim DskTopPath As String

    Set oWS = CreateObject("WScript.Shell")

    DskTopPath = oWS.SpecialFolders("Desktop")

    Debug.Print DskTopPath

    Set oWS = Nothing
End Sub

  

它应该在名为“Repository”的文件夹(桌面中的文件夹)中创建备份副本。如果可能,对工作簿的每次更改都应生成包含版本历史记录的备份副本(文件名中的日期和时间戳)

您可以使用Workbook_BeforeSave事件创建现有工作簿的副本。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub

您可能想要浏览ThisWorkbook.SaveCopyAs有关详细信息,请参阅Excel帮助。


  

与我的代码相关的最大问题是,在关闭时,会出现三个单独的对话框 - 一个询问我是否要保存,另一个询问我是否要保留我在剪贴板中复制的内容,另一个是替换保存在文件夹中的现有文本文件有没有办法从宏中回答这些对话框(或抑制它们),所以每次运行宏时我都不需要手动点击是或否?

只需将代码夹在

之间即可摆脱这些警报
Application.DisplayAlerts = False
'~~> Your Code
Application.DisplayAlerts = True

如果您经常使用剪贴板,那么您可能还想使用

清除它
Application.CutCopyMode = False

  

我已经将我的宏附加到excel中的“形状”但我的首要任务是在关闭我的工作簿时运行我的宏。每当我的工作簿发生任何更改以及保存工作簿时,都应该创建一个制表符分隔的文本文件,它应该替换现有的Txt文件而不需要任何确认对话框。

您可以使用Workbook_BeforeClose事件来运行相关代码

Private Sub Workbook_BeforeClose(Cancel As Boolean)

End Sub

关于警报,我已在上一节中解释过。

希望这能让你走上正确的道路。