Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 为什么在单元格引用中指定循环变量时收到错误1004?_Excel_Vba - Fatal编程技术网

Excel 为什么在单元格引用中指定循环变量时收到错误1004?

Excel 为什么在单元格引用中指定循环变量时收到错误1004?,excel,vba,Excel,Vba,我被困住了,主要是因为我仍然是VBA的新手。因此,我真的很感激你能给我的任何帮助。我已经浏览了这里的许多其他错误1004帖子,但它们要么是针对不同的问题,要么很可能是我太无知,不知道如何处理其中的建议 我的问题是:我有两本工作簿,一本包含原始数据,另一本将原始数据合并到相关统计数据中。我试图根据统计手册中的两个条件汇总原始工作簿(6620)中X:X中的数据,然后更新统计手册中相应单元格中的值 我遇到运行时错误1004:在指定的点上出现应用程序定义的或对象定义的错误。我不知道如何克服这一点 非常感

我被困住了,主要是因为我仍然是VBA的新手。因此,我真的很感激你能给我的任何帮助。我已经浏览了这里的许多其他错误1004帖子,但它们要么是针对不同的问题,要么很可能是我太无知,不知道如何处理其中的建议

我的问题是:我有两本工作簿,一本包含原始数据,另一本将原始数据合并到相关统计数据中。我试图根据统计手册中的两个条件汇总原始工作簿(6620)中X:X中的数据,然后更新统计手册中相应单元格中的值

我遇到运行时错误1004:在指定的点上出现应用程序定义的或对象定义的错误。我不知道如何克服这一点

非常感谢您的帮助

就我所知:

Option Explicit

Sub ImportFTEs()

Application.ScreenUpdating = False
Application.EnableEvents = False

    Dim ws As Integer

    Workbooks.Open Filename:=ActiveWorkbook.Path & "\6620\FY19*.xlsb"
        For ws = 1 To Worksheets.Count
            Sheets(ws).Name = "Sheet1"
        Next ws

        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        Dim totalFTE As Long
        Dim lastRow As Integer
            lastRow = Cells(Rows.Count, "D").End(xlUp).Row
        Dim wb As Worksheet
            Set wb = Workbooks.Open(ActiveWorkbook.Path & "\FY19*.xlsb").Sheets("Sheet1")
        Dim wc As Worksheet
            Set wc = ThisWorkbook.Sheets("B")
        Dim sum1R As Range
            Set sum1R = wb.Range("X:X")
        Dim arg2R As Range
            Set arg2R = wb.Range("D:D")
        Dim arg2C As Range
            Set arg2C = wc.Cells(7, i)
                                 >>> Error 1004
        Dim arg3R As Range
            Set arg3R = wb.Range("S:S")
        Dim arg3C As Range
            Set arg3C = wc.Cells(j, 6)
                                 >>> Error 1004
            For k = 8 To 18
                For l = 7 To 18
                    For i = 7 To 18
                        For j = 8 To 18
                            wc.Cells(k, l).value = Application.WorksheetFunction.SumIfs(sum1R, arg2R, arg2C, arg3R, arg3C)
                        Next j
                    Next i
                Next l
            Next k
    ActiveWorkbook.Close savechanges:=True

Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub

应该是这样的-您需要
Set
行,其中包含
i
j
在各自的循环中-这样,值实际上会增加(初始化时不是0):


应该是这样的-您需要
Set
行,其中包含
i
j
在各自的循环中-这样,值实际上会增加(初始化时不是0):


i
j
在这两行上都等于0-您的意图是什么?还有,第一个
ws
循环在做什么?看起来您正试图将工作簿中的每个工作表命名为“Sheet1”?这里的
lastrow
的目的是什么?太多的问题,没有足够的澄清…@dwirony,我的目的是在每个循环中向下和横向移动SUMIFS函数的标准。是的,原始数据工作簿将只有一张工作表,但它将有一个随机名称。所以我试着重命名,这样我就可以引用它了。如果这是你的意图,那些
Set
行需要在你的循环中。否则,您将设置它们一次,并且永远不会返回到它们。你应该试着用F8一行一行地遍历你的代码,你会明白我的意思:)结果我不知道我在寻找什么。在我尝试通过“设置arg2C=wc.Cells(7,I)”之前,它似乎一直在工作。
I
j
在这两行上都等于0-您的意图是什么?另外,第一个
ws
循环在做什么?看起来您正试图将工作簿中的每个工作表命名为“Sheet1”?这里的
lastrow
的目的是什么?太多的问题,没有足够的澄清…@dwirony,我的目的是在每个循环中向下和横向移动SUMIFS函数的标准。是的,原始数据工作簿将只有一张工作表,但它将有一个随机名称。所以我试着重命名,这样我就可以引用它了。如果这是你的意图,那些
Set
行需要在你的循环中。否则,您将设置它们一次,并且永远不会返回到它们。你应该试着用F8一行一行地遍历你的代码,你会明白我的意思:)结果我不知道我在寻找什么。在我尝试通过“Set arg2C=wc.Cells(7,I)”之前,它似乎一直在工作。这就成功了!不要再犯错误了!现在我只需要弄清楚为什么所有的返回值都是零…::叹气:非常感谢!这就成功了!不要再犯错误了!现在我只需要弄清楚为什么所有的返回值都是零…::叹气:非常感谢!
Option Explicit
Sub ImportFTEs()

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    Workbooks.Open Filename:=ActiveWorkbook.Path & "\6620\FY19*.xlsb"

    Dim i As Long, j As Long, k As Long, l As Long
    Dim totalFTE As Long

    Dim wb As Worksheet
    Set wb = Workbooks.Open(ActiveWorkbook.Path & "\FY19*.xlsb").Sheets("Sheet1")

    Dim wc As Worksheet
    Set wc = ThisWorkbook.Sheets("B")

    Dim sum1R As Range
    Set sum1R = wb.Range("X:X")

    Dim arg2R As Range
    Set arg2R = wb.Range("D:D")

    Dim arg3R As Range
    Set arg3R = wb.Range("S:S")

    Dim arg2C As Range
    Dim arg3C As Range

    For k = 8 To 18
        For l = 7 To 18
            For i = 7 To 18

                Set arg2C = wc.Cells(7, i)

                For j = 8 To 18

                    Set arg3C = wc.Cells(j, 6)

                    wc.Cells(k, l).Value = Application.WorksheetFunction.SumIfs(sum1R, arg2R, arg2C, arg3R, arg3C)

                Next j
            Next i
        Next l
    Next k

    ActiveWorkbook.Close True

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub