Excel 检查工作簿VBA中的出现次数
我试图在工作簿中遍历许多工作表,看看是否存在foo和bar,然后将它们添加到这个特定的单元格中。出于某种原因,我的代码会遍历工作表,但不会添加到单元格中Excel 检查工作簿VBA中的出现次数,excel,vba,scripting,Excel,Vba,Scripting,我试图在工作簿中遍历许多工作表,看看是否存在foo和bar,然后将它们添加到这个特定的单元格中。出于某种原因,我的代码会遍历工作表,但不会添加到单元格中 Sub Main() Dim ws As Worksheets Dim starting_ws As Worksheet Set starting_ws = ActiveSheet ws_num = ThisWorkbook.Worksheets.Count ind = 9 For I =
Sub Main()
Dim ws As Worksheets
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
ws_num = ThisWorkbook.Worksheets.Count
ind = 9
For I = 1 To ws_num
ThisWorkbook.Worksheets(I).Activate
Do While ind <= 39
If Worksheets(I).Range("A" & ind).Value = "bar" And Worksheets(I).Range("G" & ind).Value = "foo" Then
Worksheets("scrap").Range("C7").Value = Worksheets("scrap").Range("C7").Value + 1
Exit For
End If
ind = ind + 1
Loop
Next
End Sub
Sub-Main()
将ws设置为工作表
将起始值作为工作表进行调整
设置起始\u ws=ActiveSheet
ws_num=thiswoolk.Worksheets.Count
ind=9
对于I=1到ws_num
此工作簿。工作表(I)。激活
在ind时执行以下操作:
Sub Main()
Dim ws As Worksheets
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
ws_num = ThisWorkbook.Worksheets.Count
For I = 1 To ws_num
ind = 9
ThisWorkbook.Worksheets(I).Activate
Do While ind <= 39
If Worksheets(I).Range("A" & ind).Value = "bar" And Worksheets(I).Range("G" & ind).Value = "foo" Then
Worksheets("scrap").Range("C7").Value = Worksheets("scrap").Range("C7").Value + 1
Exit Do
End If
ind = ind + 1
Loop
Next
End Sub
Sub-Main()
将ws设置为工作表
将起始值作为工作表进行调整
设置起始\u ws=ActiveSheet
ws_num=thiswoolk.Worksheets.Count
对于I=1到ws_num
ind=9
此工作簿。工作表(I)。激活
当ind可能时做
Sub tgr()
Dim ws As Worksheet
Dim rOutput As Range
Dim lCount As Long
Set rOutput = ThisWorkbook.Sheets("scrap").Range("C7")
For Each ws In ThisWorkbook.Worksheets
lCount = lCount + WorksheetFunction.CountIfs(ws.Range("A9:A39"), "bar", ws.Range("G9:G39"), "foo")
Next ws
rOutput.Value = rOutput.Value + lCount
End Sub
ind=9
不应该在For
循环中吗?按照现在的方式,ind
只会不断增长,直到完成为止,而不是从每张工作表的第9行开始。但前提是我将“bar”和“foo”放在范围中的一个单元格中。如果您不断重复父工作表引用,为什么要激活此工作簿。工作表(I)?可能会在此工作簿中添加。工作表(I)。。。以
block结束。@Jeeped我同意这样会更好。我只是用OP的代码,修复了我认为是造成问题的地方,以便尽可能忠实于他的代码。如果我必须从底部写代码,我会像tigeravatar那样做。这实际上提出了一个好问题:这里的最佳实践是什么——提供“最佳”答案,还是提供OP代码的修复?为了让它适用于尽可能多的人,也许是前者。你觉得怎么样?:)就我个人而言,我会逐案考虑。我经常完全扔掉OP的代码,但尝试添加一些关于错误所在的解释(请参阅)。其他时候,我可能会在“最佳方法”完全超出他们理解的程度上对他们进行评判,帮助他们改进自己的代码是更好的选择。“我知道后一种说法听起来有点屈尊俯就,但有时你必须先学会走路,然后才能飞翔。”智者嘲笑道:)