【发布时间】:2020-09-02 10:06:46
【问题描述】:
刚接触 VBA 代码,想弄清楚为什么我的代码不起作用。 我想在所有打开的 Excel 文件中运行一个宏。 一次处理一个文件的宏是:
```
Sub DeleteRow()
Dim R As Range, cellsToDel As String
'looking for cells that contain the word '1. Staff Home'
Set R = ActiveSheet.Range("A:A").Find("1. Staff Home", LookIn:=xlValues)
'if found
Do While Not R Is Nothing
'get cells address to be deleted
cellsToDel = "A1" & ":K" & R.Row - 1
'delete the cells
ActiveSheet.Range(cellsToDel).Delete xlShiftUp
'looking for cells that contain the word '1. Staff Home' again
Set R = ActiveSheet.Range("A:K").Find("1. Staff Home", LookIn:=xlValues)
Loop
End Sub
Sub Unwrap_Text()
'unwrap text in all cells'
ActiveSheet.Range("A:K").WrapText = False
End Sub
但是当我尝试将它包装在一个宏中以在所有打开的工作簿上运行时它不起作用:
```
Sub DoAll()
Dim wb As Workbook
For Each wb In Application.Workbooks
Dim R As Range, cellsToDel As String
'looking for cells that contain the word '1. Staff Home'
Set R = ActiveSheet.Range("A:A").Find("1. Staff Home", LookIn:=xlValues)
'if found
Do While Not R Is Nothing
'get cells address to be deleted
cellsToDel = "A1" & ":K" & R.Row - 1
'delete the cells
ActiveSheet.Range(cellsToDel).Delete xlShiftUp
'looking for cells that contain the word '1. Staff Home' again
Set R = ActiveSheet.Range("A:K").Find("1. Staff Home", LookIn:=xlValues)
Loop
Next wb
End Sub
```
我已经看到可以在目录中的 Excel 文件上运行的宏示例,但是我目录中的文件是我在 Excel 中打开的 .html 文件,并且想要删除一堆导航链接行与我的需求无关。
【问题讨论】:
-
@BigBen 感谢您的回复,这不正是 For Each 正在做的事情吗?
-
您的 Excel 文件是否只有一个选项卡?
-
@TimWilliams 是的
-
恕我直言,编写在所有打开的 Excel 文件上运行的代码是很危险的。如果您打开的文件比您想象的要多怎么办?
-
这应该不是问题@teylyn,因为我将在 Excel 中手动打开 html 文件,所以我会知道打开了什么。