【发布时间】:2022-08-13 23:27:36
【问题描述】:
在 Sheets(2).Select 行运行以下子例程时出现运行时错误 9。我在即时窗口中检查了 Activeworkbook.Name 我得到了正确的工作簿名称。但不确定为什么会引发下标超出范围错误。 ThisWorkbook 只有 sheet1,所以我猜它是指 ThisWorkbook 而不是 ActiveWorkbook。如何纠正它。我还尝试了其他代码行,但没有帮助。 ActiveSheet.Next.Select 工作表(1).Next.Select 如果所有工作簿中的 A5 值为空白,则该子例程将清除格式。
Sub REReplace()
Dim Folder As String, FileName As String
Dim tWB, w As Workbook
Application.ScreenUpdating = False
Set tWB = ThisWorkbook
Folder = \"C:\\New\\test\"
FileName = Dir(Folder & \"\\*.xlsx\")
Do
Workbooks.Open Folder & \"\\\" & FileName
FileName = Dir
Loop Until FileName = \"\"
For Each w In Workbooks
If Not w Is ThisWorkbook Then
w.Activate
Sheets(2).Select
If Sheets(2).Range(\"A5\").Value = \"\" Then
Sheets(2).Range(\"A5\").Select
Sheets(2).Range(Selection, Selection.End(xlToRight)).Select
Selection.ClearFormats
Sheets(2).Range(\"A3\").Select
End If
w.Close SaveChanges:=True
End If
Next w
Application.ScreenUpdating = True
End Sub
下面的代码将文档编号的最后一个值从 1 替换为 2,例如 BCR-98946210371-001 到 BCR-98946210371-002,并从 sheet1 中的单元格 D1:D8 中删除格式。现在我在我的问题中发布的 sheet2 中有额外的要求。如果 A5 为空白,我需要清除 A5 行中的格式。
**********Old code in sheet1**********
Sub REReplace()
Dim Folder As String, FileName As String
Dim tWB, w As Workbook
Dim n As String
Dim j As String, Ex As String, Con, l As String
Dim o As Integer, p As Integer, u As Integer
Application.ScreenUpdating = False
\'j = \"2\"
Set tWB = ThisWorkbook
Folder = \"C:\\New\\test\"
FileName = Dir(Folder & \"\\*.xlsx\")
Do
Workbooks.Open Folder & \"\\\" & FileName
FileName = Dir
Loop Until FileName = \"\"
For Each w In Workbooks
If Not w Is ThisWorkbook Then
w.Activate
Set w = ActiveWorkbook
Sheets(1).Select \'In sheet 1 B1 value is changed to ver 2
Range(\"A1\").Select
l = Range(\"B1\").Value
o = Len(l)
p = Right(l, 1)
u = o - p
Ex = Left(l, u)
Con = Ex & j
Ex = Left(l, u)
Con = Ex & j
Range(\"B1\").Value = Con
Range(\"D1:D8\").ClearFormats
End if
Next w
***********New code in sheet2 shown below***********
For Each w In Workbooks
If Not w Is ThisWorkbook Then
With w
.Activate
If .Sheets.Count >= 2 Then
.Sheets(2).Select
If .Sheets(2).Range(\"A5\").Value = \"\" Then
.Sheets(2).Range(\"A5\").Select
.Sheets(2).Range(Selection, _
Selection.End(xlToRight)).ClearFormats
.Sheets(2).Range(\"A3\").Select
.Sheets(1).Select
End If
Stop
.Close SaveChanges:=True
End If
End With
End If
Next w
Application.ScreenUpdating = True
End Sub