String 循环浏览工作簿,但排除某些工作表?
这个问题已经在网上被问了好几次,但在宏观层面上还没有一个全面的计划。我在一些表上有数据,但我需要在一些单独的“分析表”上更具体地分析这些数据。我认为问题可能与String 循环浏览工作簿,但排除某些工作表?,string,vba,excel,String,Vba,Excel,这个问题已经在网上被问了好几次,但在宏观层面上还没有一个全面的计划。我在一些表上有数据,但我需要在一些单独的“分析表”上更具体地分析这些数据。我认为问题可能与此工作簿.Sheets(“sh”)功能有关,因为它发出下标超出范围的错误 下面是代码,请响应为使此代码正常工作而进行的任何更改 Sub Excludesheet() Dim sh As Worksheet Const excludeSheets As String = "1-Analysis,2-Analysis"
此工作簿.Sheets(“sh”)
功能有关,因为它发出下标超出范围的错误
下面是代码,请响应为使此代码正常工作而进行的任何更改
Sub Excludesheet()
Dim sh As Worksheet
Const excludeSheets As String = "1-Analysis,2-Analysis"
'Assigns a Worksheet Object to the sh variable
For Each sh In ThisWorkbook.Worksheets
If IsError(Application.Match(sh.Name, Split(excludeSheets, ","))) Then
'This is for analysis worksheets
Range("$A$1").Value = "Analysis"
Else:
'Data Sheets
Columns("A:M").AutoFit
LR = Cells(Rows.Count, "A").End(xlUp).Row
For i = LR To 2 Step -1
If Cells(i, "E").Text = "N/A" Then Rows(i).EntireRow.Delete
Next i
LastR = Cells(Rows.Count, "A").End(xlUp).Row
Dim strFormulas(1 To 3) As Variant
With ThisWorkbook.Sheets("sh")
strFormulas(1) = "=(E2-$E$2)"
strFormulas(2) = "=(G2-$G$2)"
strFormulas(3) = "=H2+I2"
Range("H2:J2").Formula = strFormulas
Range("H2:J" & LastR).FillDown
End With
End If
Next
End Sub
为了进一步澄清我的评论,请直接处理您的对象。
现在尝试一下您的重构代码:
Sub Excludesheet()
Dim sh As Worksheet
'Const excludeSheets As String = "1-Analysis,2-Analysis"
Dim excludeSheets: excludeSheets = Array("1-Analysis", "2-Analysis")
For Each sh In ThisWorkbook.Worksheets
With sh 'you already have the sheet object, so work with it
If Not IsError(Application.Match(.Name, excludeSheets, 0)) Then
'This is for analysis worksheets
.Range("$A$1").Value = "Analysis"
Else
'Data Sheets
.Columns("A:M").AutoFit
LR = .Cells(.Rows.Count, "A").End(xlUp).Row
For i = LR To 2 Step -1
If .Cells(i, "E").Text = "N/A" Then .Rows(i).EntireRow.Delete
Next i
LastR = .Cells(.Rows.Count, "A").End(xlUp).Row
Dim strFormulas(1 To 3) As Variant
strFormulas(1) = "=(E2-$E$2)"
strFormulas(2) = "=(G2-$G$2)"
strFormulas(3) = "=H2+I2"
.Range("H2:J2").Formula = strFormulas
.Range("H2:J" & LastR).FillDown
End If
End With
Next
End Sub
我会用和。。。以
块结束以定义所有单元格和范围引用的父级
Sub Excludesheet()
Dim i As Long, lr As Long, sh As Worksheet
Const excludeSheets As String = "1-Analysis,2-Analysis"
For Each sh In ThisWorkbook.Worksheets 'Assigns a Worksheet Object to the sh variable
With sh
If CBool(InStr(1, excludeSheets, .Name, vbTextCompare)) Then
'This is for analysis worksheets
.Range("$A$1").Value = "Analysis"
Else
'Data Sheets
.Columns("A:M").AutoFit
lr = .Cells(Rows.Count, "A").End(xlUp).Row
For i = lr To 2 Step -1
If .Cells(i, "E").Text = "N/A" Then Rows(i).EntireRow.Delete
Next i
lr = .Cells(Rows.Count, "A").End(xlUp).Row
Dim strFormulas(1 To 3) As Variant
strFormulas(1) = "=(E2-$E$2)"
strFormulas(2) = "=(G2-$G$2)"
strFormulas(3) = "=H2+I2"
.Range("H2:J2").Formula = strFormulas
.Range("H2:J" & lr).FillDown
End If
End With
Next sh
End Sub
我还重用了一些变量,因此不必声明新的变量,也不必更改确定工作表名称类别的方法。对我来说,你现有的方法似乎是倒退的(例如,如果当时没有找到),所以我颠倒了逻辑。如果我的假设是错误的,您可以使用来反转我的逻辑,如果不是CBool(InStr(…
使用此工作簿.Sheets(“sh”)
to使用sh
我也在考虑使用InStr
,但决定放弃常量字符串。hahajeep和L42两个代码都跨多个工作表工作,并正确地将分析放入正确的工作表中,但宏的某些部分在以下工作表中被排除。删除“N/A”函数在第一张工作表上运行良好,但在下面的工作表上它没有执行。有什么办法吗?@ThomasRuddell-您需要返回并编辑原始问题,以包括哪些工作表被视为分析工作表,哪些工作表被视为数据工作表。只有完整的列表才能创建一个规则to确定它们。这一个有效,只需直接引用sh.range sh.cells sh.collumns中的一些对象,而不是@Comintern建议的直接引用单元格。