Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 检查工作簿VBA中的出现次数_Excel_Vba_Scripting - Fatal编程技术网

Excel 检查工作簿VBA中的出现次数

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 =

我试图在工作簿中遍历许多工作表,看看是否存在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 = 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的代码,但尝试添加一些关于错误所在的解释(请参阅)。其他时候,我可能会在“最佳方法”完全超出他们理解的程度上对他们进行评判,帮助他们改进自己的代码是更好的选择。“我知道后一种说法听起来有点屈尊俯就,但有时你必须先学会走路,然后才能飞翔。”智者嘲笑道:)