我收到与Excel 2010中下面的VBA
宏相关的错误消息。
我在Excel工作表中有一个表,它通过SQL查询刷新。该表包含每列数据1周,以及包含日期列之前的属性的几列。
每周刷新表后,Macro应执行以下操作:
在第2行的表格中找到最后一列并标记该单元格“Over Capacity%”
查找表的最后一行(行是可变的,每次刷新数据时都可能会更改)
复制&将最后一列第3行中的公式一直填充到表格最后一列的最后一行。
将最后一列中的数字格式化为带有2位小数的百分比。
根据最后一栏中的百分比对整个表格进行排序。
错误发生在上面的步骤3中。我尝试了AutoFill
和FillDown
方法。
VBA的相关行是:
Worksheets("Heatmap - FTE").Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).FillDown
运行时错误'1004': 应用程序定义或对象定义的错误
Sub Heatmap_FTE_Update()
Dim LastCol As Long
Dim LastRow As Long
Dim rng As Range
Dim DateValue As String
Set rng = Sheets("Heatmap - FTE").Range("B2:BZ2")
LastCol = Worksheets("Heatmap - FTE").Cells(2, Columns.Count).End(xlToLeft).Column
'MsgBox LastCol
rng.Parent.Cells(2, LastCol + 1).Value = "% Over Capacity"
DateValue = rng.Parent.Cells(2, LastCol).Value
Worksheets("Heatmap - FTE").Cells(3, LastCol + 1).Formula = "=IFERROR(COUNTIF(Table_Query_from_MS_Access_Database[@[1/1/2016]:[" & DateValue & "]],"">""&40)/(COUNT(Table_Query_from_MS_Access_Database[@[1/1/2016]:[" & DateValue & "]])),0)"
LastRow = Worksheets("Heatmap - FTE").Cells(Rows.Count, "B").End(xlUp).Row
'MsgBox LastRow
Worksheets("Heatmap - FTE").Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).FillDown
Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).NumberFormat = "0.00%"
Range(Cells(3, 2), Cells(LastRow, LastCol + 1)).Sort key1:=Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)), order1:=xlDescending, Header:=xlYes
End Sub
任何输入都表示赞赏。谢谢。
答案 0 :(得分:0)
找到解决方案。
显然,我不需要引用FillDown方法的工作表。注意到如果我在工作表上运行它,宏工作,但如果我在另一个工作表上,则在FillDown方法失败。
通过选择工作表解决了这个问题。
工作代码是:
Sub Heatmap_FTE_Update()
Dim LastCol As Long
Dim LastRow As Long
Dim rng As Range
Dim DateValue As String
Sheets("Heatmap - FTE").Select
Set rng = Sheets("Heatmap - FTE").Range("B2:BZ2")
LastCol = Worksheets("Heatmap - FTE").Cells(2, Columns.Count).End(xlToLeft).Column
'MsgBox LastCol
rng.Parent.Cells(2, LastCol + 1).Value = "% Over Capacity"
DateValue = rng.Parent.Cells(2, LastCol).Value
Worksheets("Heatmap - FTE").Cells(3, LastCol + 1).Formula = "=IFERROR(COUNTIF(Table_Query_from_MS_Access_Database[@[1/1/2016]:[" & DateValue & "]],"">""&40)/(COUNT(Table_Query_from_MS_Access_Database[@[1/1/2016]:[" & DateValue & "]])),0)"
LastRow = Worksheets("Heatmap - FTE").Cells(Rows.Count, "B").End(xlUp).Row
'MsgBox LastRow
Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).FillDown
Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).NumberFormat = "0.00%"
Range(Cells(3, 2), Cells(LastRow, LastCol + 1)).Sort key1:=Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)), order1:=xlDescending, Header:=xlYes
Sheets("Control").Select
End Sub
但是,如果你有一个更优雅的解决方案或我的错误的解释,这是值得赞赏的。
感谢。