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