【问题标题】:deleting range when closing workbook, xls vba关闭工作簿时删除范围,xls vba
【发布时间】:2011-09-19 08:15:42
【问题描述】:

我想要范围

Range("A2:G" & z)

要在关闭工作簿时删除 - 有人可以帮我写代码吗?

谢谢, 好

这是我尝试过的:

Option Explicit
Sub Makro1()
    'insert clipboard
    Workbooks("Pfl_SchutzStat.xls").Activate
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    'insert formulas to look up sheet ZTAXLIST
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,1)"
    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,3)"
    Range("D2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,4)"
    Range("E2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,5)"
    Range("F2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,6)"
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,7)"
    'autofill formulas
    Dim z As Integer
    z = Range("A2").End(xlDown).Row
    Range("B2:G2").Select
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("B2:G" & z)
    Range("A1").Select
End Sub

在这里我添加了应该删除范围的子 我也试图让它关闭工作簿而不保存并且不要求它 我试图插入一个 msgbox - 关闭时似乎没有调用宏!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim ev As Boolean
    Dim datei As String
    Dim z As Integer
    z = Range("A2").End(xlDown).Row
    datei = ThisWorkbook.Name
    ev = Application.EnableEvents
    Application.EnableEvents = False            
    If Workbooks.Count > 1 Then
        ActiveWorkbook.Close SaveChanges:=False
    Else
        Workbooks(datei).Saved = True
    Application.Quit
    End If
    Worksheets("Abfrage").Range("A2:G" & z).ClearContents
    Application.EnableEvents = ev
End Sub

【问题讨论】:

  • 顺便说一句,如果您的要求符合您的要求,您可以接受之前问题的答案

标签: excel vba


【解决方案1】:

您可以使用事件 vba 函数 BeforeClose:在此处查找更多信息:http://msdn.microsoft.com/en-us/library/aa220801%28v=office.11%29.aspx

不要忘记指向要删除行的工作表。

这是一个例子:

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'delete the lines of the "Sheet1"
    Dim z As Integer
    z = 2   'or whatever depending on your previous code

    'replace "Sheet1" by the name of your sheet
    Worksheets("Sheet1").Range("A2:G" & z).Delete Shift:=xlUp    
End Sub

-=编辑=-

首先,您无需在设置公式之前选择每个单元格。例如你可以这样做:

Range("D2").FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,4)"

而不是:

Range("D2").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC1,ZTAXLIST!C2:C9,4)"

此外,您是否将 Private Sub Workbook_BeforeClose(Cancel As Boolean) 放入 VBA 编辑器的 ThisWorkbook 部分?它不应该在模块或工作表模块中!

问候,

最大

【讨论】:

  • 或者,Worksheets("Sheet1").Range("A2:G" & z).ClearContents。我有一种感觉,OP 并不是真的想删除单元格,而只是删除其中的内容。
  • 谢谢,我在宏前面添加了“选项显式”和建议的代码。我指着工作表和所有内容,但是当我关闭时没有任何内容被删除..我忘记了什么吗?
  • 没有工作簿,我们无法为您提供更多帮助。您可以尝试调试(在代码中放置断点)并查看变量或在代码中放置 msgbox。
  • 我将我的完整代码添加到原始帖子中 - 也许可以从那里看到错误..
  • 主要问题只是将 Workbook 放在靠近 ThisWorkbook 之前!非常感谢 - 终于解决了..
猜你喜欢
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多