分享

自学资料(Excel VBA)[收集整理14]

 COPY&PASTE 2009-10-15

自学资料(Excel VBA)[收集整理14]

默认分类   2009-08-01 12:13   阅读41   评论0  
字号:    
77、请教大家,我想在EXCEL文件退出时,另存为当前目录下的子目录BAK中,比如EXCEL文件在C盘,就另存为C:\BAK子目录下,但EXCEL文件的位置不确定,不知如何写语句?
注意先引用"Microsoft Scripting Runtime"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' 在本文件要關閉前,執行備份動作。
    If Not ActiveWorkbook.Saved Then Exit Sub    ' 若原文件未存檔,備份檔也不存。
    ThisPath = ThisWorkbook.Path
    ' 假定備份文件夾之名稱為"BAK",若本文件是備份檔,則不需再備份。
    If Len(Application.WorksheetFunction.Substitute(ThisPath, "BAK", "")) < Len(ThisPath) Then Exit Sub
    Bak = ThisPath & "\" & "BAK"
    '檢查備份文件夾是否存在,若不存在,就建立一個。
    If Len(Dir(Bak, vbDirectory)) > 0 Then
        If (GetAttr(Bak) And vbDirectory) = vbDirectory Then GoTo 3    ' 若已存在,跳到下一步。
    End If
    MkDir Bak                  ' 建立備份文件夾。
    ' 改變目前路徑到備份文件夾路徑,並備份之。
3  ChDir Bak
    Application.EnableEvents = False            ' 避免執行BeforeSave事件。
    Application.DisplayAlerts = False              ' 避免顯示是否要覆蓋原備份文件之訊息。
    ActiveWorkbook.SaveAs
    ChDir ThisPath                                        ' 改變目前路徑回到原文件夾路徑。
    Application.DisplayAlerts = True
    Application.EnableEvents = True
End Sub
上述程式有個漏洞,就是在本文件做過更動,且存檔過了,但最後一次的更動未存檔,則 If Not ActiveWorkbook.Saved Then Exit Sub 這個判斷會造成不存備份檔之錯誤決定。
若想彌補上述錯誤,將觸發的事件改成Workbook_BeforeSave,卻會造成Excel關閉的錯誤。
78、文件保存为以某一单元格中的值为文件名的宏怎么写
用命令: ActiveWorkbook.SaveCopyAs Str(Range("Sheet1!A1")) + ".xls"
79、Offset 属性
参阅应用于示例特性应用于 Range 对象的 Offset 属性。
返回一个 Range 对象,该对象代表某个指定区域以外的区域。只读。
expression.Offset(RowOffset, ColumnOffset)
expression      必需。该表达式返回一个 Range 对象。
RowOffset      Variant 类型,可选。区域偏移的行数(正值、负值或 0(零))。正值表示向下偏移,负值表示向上偏移,默认值为 0。
ColumnOffset      Variant 类型,可选。区域偏移的列数(正值、负值或 0(零))。正值表示向右偏移,负值表示向左偏移,默认值为 0。
应用于 TickLabels 对象的 Offset 属性。
返回或设置各级别标签之间的距离以及第一级标签与坐标轴之间的距离。其默认距离为百分之百,代表坐标轴标签与坐标轴之间的默认距离。其值可以为从 0 到 1000 之间的一个整数百分比,表示相对于坐标轴标签的字体大小。Long 类型,可读写。
expression.Offset
expression      必需。该表达式返回一个 TickLabels 对象。
示例
应用于 Range 对象。
本示例激活 Sheet1 上活动单元格向右偏移三列、向下偏移三行处的单元格。
Worksheets("Sheet1").Activate
ActiveCell.Offset(rowOffset:=3, columnOffset:=3).Activate
本示例假定 Sheet1 中包含一个具有标题行的表格。本示例先选定该表格,但并不选择标题行。运行本示例之前,活动单元格必须位于表格中。
Set tbl = ActiveCell.CurrentRegion
tbl.Offset(1, 0).Resize(tbl.Rows.Count - 1, _
    tbl.Columns.Count).Select
应用于 TickLabels 对象。
如果偏移量小于 500,则本示例将 Chart1 中数值轴上标签之间的距离设置为当前距离的两倍。
With Charts("Chart1").Axes(xlValue).TickLabels
    If .Offset < 500 then
        .Offset = .Offset * 2
    End If
End With
80、新建工作簿
参阅特性若要在 Visual Basic 中创建新的工作簿,请使用 Add 方法。下述过程创建了新的工作簿。Microsoft Excel 自动将该工作簿命名为“BookN”,其中“N”是下一个可用的数字。新工作簿将成为活动工作簿。
Sub AddOne()
    Workbooks.Add
End Sub
        创建新工作簿更好的方法是将其分配给一个对象变量。下例中,由 Add 方法返回的 Workbook 对象分配给了对象变量 newBook。然后,又设置了 newBook 的若干属性。使用对象变量可以很容易地控制新工作簿。
Sub AddNew()
Set NewBook = Workbooks.Add
    With NewBook
        .Title = "All Sales"
        .Subject = "Sales"
        .SaveAs Filename:="Allsales.xls"
    End With
End Sub

转载自 http://bbs./showtopic-169943.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多