无法删除表格

时间:2013-05-08 09:07:11

标签: vba excel-vba excel

我正在尝试打开工作簿并从中删除工作表,但它运行代码时没有错误,工作表仍然存在... 我可以修改它,因为我将公式更改为另一张纸上的值。 首先 - 是的,我知道“i”变量设置为1次迭代。 不知何故,现在当我打开工作簿时,它说它被我锁定 - 我甚至不知道该怎么做。

那么......我该怎么解锁呢? 当我转到文件 - >信息 - >权限时,它说'任何人都可以复制,更改和修改此工作簿的任何部分.... 我也可以手动删除工作表。 ..

以下是代码:

Sub Change()

Dim wb As Excel.Workbook
Set wb = ThisWorkbook

Dim ws As Excel.Worksheet
Set ws = wb.Sheets("FileSearch Results")

Dim rng As Range
Set rng = ws.UsedRange

Dim cPaths As Integer
cPaths = rng.Column

Dim i As Integer
i = rng.Row

Dim oExcel As Excel.Application
Set oExcel = New Excel.Application

Dim oWB As Workbook

Dim komm As Excel.Worksheet
Dim sh1 As Excel.Worksheet

Do While i < 2
    Dim pth As String
    pth = ws.Cells(i, cPaths)
    Set oWB = oExcel.Workbooks.Open(pth)

    Set sh1 = oWB.Worksheets("Sheet1")
    With sh1.UsedRange
        .Value = .Value
    End With

    Set komm = oWB.Worksheets("Kommentar")
    Application.DisplayAlerts = False
    komm.Delete
    Application.DisplayAlerts = True



    oWB.Close savechanges:=True
    i = i + 1
Loop
End Sub

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Sub Change()

Dim wb As Excel.Workbook
Set wb = ActiveWorkbook 'ThisWorkbook

Dim ws As Excel.Worksheet
Set ws = wb.Sheets("FileSearch Results")

Dim rng As Range
Set rng = ws.UsedRange

Dim cPaths As Integer
cPaths = rng.Column

Dim i As Integer
i = rng.row

'Dim oExcel As Excel.Application ***CHANGED***
'Set oExcel = New Excel.Application ***CHANGED***

'Dim oWB As Workbook ***CHANGED***

Dim komm As Excel.Worksheet
Dim sh1 As Excel.Worksheet

Do While i < 2
    Dim pth As String
    pth = ws.Cells(i, cPaths)
    'Set oWB = oExcel.Workbooks.Open(pth) ***CHANGED***

    Workbooks.Open (pth) '***ADDED***

    Set sh1 = ActiveWorkbook.Worksheets("Sheet1") 'oWB.Worksheets("Sheet1") ***CHANGED***
    With sh1.UsedRange
        .Value = .Value
    End With

    Set komm = ActiveWorkbook.Worksheets("Kommentar") 'oWB.Worksheets("Kommentar") ***CHANGED***
    Application.DisplayAlerts = False
    komm.Delete
    Application.DisplayAlerts = True

    ActiveWorkbook.Close savechanges:=True 'oWB.Close savechanges:=True ***CHANGED***
    i = i + 1

Loop

End Sub

现在打开工作簿并删除前台中的工作表,而不是调用Excel的新实例并在后台删除工作表。这就是文件保持锁定的原因,因为代码未关闭的新实例仍然保留它。

答案 1 :(得分:0)

对于将来遇到此问题的任何人(例如我自己),实际的问题是调用Application.DisplayAlerts时范围的混淆。

kommoWB中的一个工作表,它存在于excel oExcel的新实例中。

Application是一个完全不同的实例,因此无效。

由于该代码实际上并未在excel(oExcel)的正确实例中禁用提示,并且可能不可见,因此该代码将忽略该命令并继续前进。

简单的解决方法是使用oExcel而不是Application

Set komm = oWB.Worksheets("Kommentar")
oExcel.DisplayAlerts = False
komm.Delete
oExcel.DisplayAlerts = True