FillDown方法在Excel 2010中失败

时间:2016-11-08 16:15:44

标签: vba excel-vba excel-2010 excel

我收到与Excel 2010中下面的VBA宏相关的错误消息。

宏的目的:

我在Excel工作表中有一个表,它通过SQL查询刷新。该表包含每列数据1周,以及包含日期列之前的属性的几列。

每周刷新表后,Macro应执行以下操作:

  1. 在第2行的表格中找到最后一列并标记该单元格“Over Capacity%”

  2. 查找表的最后一行(行是可变的,每次刷新数据时都可能会更改)

  3. 复制&将最后一列第3行中的公式一直填充到表格最后一列的最后一行。

  4. 将最后一列中的数字格式化为带有2位小数的百分比。

  5. 根据最后一栏中的百分比对整个表格进行排序。

  6. 发生错误的位置

    错误发生在上面的步骤3中。我尝试了AutoFillFillDown方法。

    VBA的相关行是:

    Worksheets("Heatmap - FTE").Range(Cells(3, LastCol + 1), Cells(LastRow, LastCol + 1)).FillDown
    

    显示错误消息

    运行时错误'1004': 应用程序定义或对象定义的错误

    宏的完整VBA代码:

    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
    

    任何输入都表示赞赏。谢谢。

1 个答案:

答案 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

但是,如果你有一个更优雅的解决方案或我的错误的解释,这是值得赞赏的。

感谢。