我正在尝试打开工作簿并从中删除工作表,但它运行代码时没有错误,工作表仍然存在... 我可以修改它,因为我将公式更改为另一张纸上的值。 首先 - 是的,我知道“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
有什么想法吗?
答案 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
时范围的混淆。
komm
是oWB
中的一个工作表,它存在于excel oExcel
的新实例中。
Application
是一个完全不同的实例,因此无效。
由于该代码实际上并未在excel(oExcel
)的正确实例中禁用提示,并且可能不可见,因此该代码将忽略该命令并继续前进。
简单的解决方法是使用oExcel
而不是Application
:
Set komm = oWB.Worksheets("Kommentar")
oExcel.DisplayAlerts = False
komm.Delete
oExcel.DisplayAlerts = True