2017-01-09 61 views
-1

您好所有我继承了这个VBA这是目前回到了我两个错误:VBA在格式化表格按预期

1)运行时错误“91”: 对象变量或带块变量未设置

2)运行时错误'1004': 对象'范围'的方法'偏移'失败

VBA很长,正如我所说的,我继承了它的道歉。

Sub SortMain() 
' 
' SortMain Macro 
' Sortingandcoloring 
' 

' 
    Sheets("Key Performance Audience Metric").Select 
    Range("B5:H5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("C5:C55"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("K5:O5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("L5:L55"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("R5:W5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("S5:S55"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Key Performance Audience Metric").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("A1").Select 
    Sheets("Engagement Quality Metrics").Select 
    Range("B5:L5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("C5:C54"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("O5:W5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("P5:P54"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("Z5:AH5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("AA5:AA54"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Engagement Quality Metrics").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    Selection.AutoFilter 
    End With 

    Sheets("Video Views").Select 
    Range("B5:D5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("C5:C55"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
    Selection.AutoFilter 
    Range("H5:J5").Select 
    Selection.AutoFilter 
    ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort. _ 
     SortFields.Clear 
    ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort. _ 
     SortFields.Add Key:=Range("I5:I55"), SortOn:=xlSortOnValues, Order:= _ 
     xlDescending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Video Views").AutoFilter.Sort 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 


    Sheets("Video Views").Select 
    Range("B5:D6").Select 
    Selection.Copy 
    Range("B5:D55").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("H5:J6").Select 
    Selection.Copy 
    Range("H5:J55").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 


    Sheets("Key Performance Audience Metric").Select 
    Range("B5:H6").Select 
    Selection.Copy 
    Range("B5:H55").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("K5:O6").Select 
    Selection.Copy 
    Range("K5:O55").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("R5:W6").Select 
    Selection.Copy 
    Range("R5:W55").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Sheets("Key Performance Audience Metric").Select 
    Range("A1").Select 
    Sheets("Engagement Quality Metrics").Select 
    Range("B5:L6").Select 
    Selection.Copy 
    Range("B5:L54").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("O5:W6").Select 
    Selection.Copy 
    Range("O5:W54").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("Z5:AH6").Select 
    Selection.Copy 
    Range("Z5:AH54").Select 
    Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 
    Application.CutCopyMode = False 
    Range("A1").Select 
    Sheets("MACROS").Select 

Sheets("Cross Platform Table").Select 
    Range("A1").Select 

Sheets("Circle Charts").Select 
Dim i As Long 
    i = Application.Intersect(Range("A:A"), ActiveSheet.UsedRange).End(xlDown).Row 
    Do While Range("A1").Offset(i, 0).Value = 0 
    Range("A1").Offset(i, 0).EntireRow.Delete xlShiftUp 
    i = i - 1 
    Loop 

Sheets("Key Performance Audience Metric").Select 
Dim j As Long 
    j = Application.Intersect(Range("V:V"), ActiveSheet.UsedRange).End(xlDown).Row 
    Do While Range("V1").Offset(j, 0).Value = 0 
    Range("V1").Offset(j, 0).EntireRow.Delete xlShiftUp 
    j = j - 1 
    Loop 

Sheets("Engagement Quality Metrics").Select 
Dim k As Long 
    k = Application.Intersect(Range("AJ:AJ"), ActiveSheet.UsedRange).End(xlDown).Row 
    Do While Range("AJ1").Offset(k, 0).Value = 0 
    Range("AJ1").Offset(k, 0).EntireRow.Delete xlShiftUp 
    k = k - 1 
    Loop 

    Sheets("MACROS").Select 
    Range("C8:D12").Select 
    With Selection.Font 
     .color = -11489280 
     .TintAndShade = 0 
    End With 
    With Selection.Font 
     .ThemeColor = xlThemeColorLight1 
     .TintAndShade = 0 
    End With 
    ExecuteExcel4Macro "PATTERNS(1,0,5287936,TRUE,2,3,0,0)" 
    ActiveCell.FormulaR1C1 = "DONE! Ready to Use!" 
    Range("A1").Select 


End Sub 
+0

每个错误发生在哪里? – Rory

+0

弹出一个提示,它不会告诉我哪一行是问题 –

+0

按'F8'开始分支,然后反复按'F8'可以进入下一行。直到发生错误为止,您将知道哪一行导致问题。由记录器完全生成的宏(因为这看起来是)通常很难适应,应该更多地用作提示如何实现特定的任务... – Wolfie

回答

1

如果编写得很清楚,你会发现代码更容易诊断和适应。我不打算浏览整个宏,但这里是你的代码的开始应该是什么样子的示例!这从您的第一行到行Range("K5:O5").Select

Dim KPAMSheet as Worksheet 
Set KPAMSheet = Sheets("Key Performance Audience Metric") 

With KPAMSheet.AutoFilter.Sort 

    .SortFields.Clear 

    .SortFields.Add Key:=KPAMSheet.Range("C5:C55"), _ 
     SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 

    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 

End With 

KPAMSheet.Range("B5:H5").AutoFilter 

注意你应该避免使用SelectSelection,这将迟早咬你!如果你花了半个小时修订像上面的代码,这将是更短,更清晰,不容易出错...

看到这个职位:How to avoid using Select in Excel VBA macros

而且我将在这里重复我的评论关于如何调试:

按F8键启动子菜单,然后重复按F8键可以进入下一行。直到发生错误为止,您将知道哪一行导致问题。我相信Mac上的等效快捷键是Cmd + Shift + I。或者,转至Debug菜单并选择Step Into

+0

我收到您提供的这一行的语法错误:'.SortFields.Add Key:= KPAMSheet.Range(“C5:C55”)_ SortOn:= xlSortOnValues,Order:= xlDescending,DataOption:= xlSortNormal ' –

+0

I错过了换行符之前的逗号,现在修复了......请注意,我没有对上面的代码进行测试,这只是第一次通过我如何尝试格式化它,我很不熟悉'AutoFilter'功能!布局是否有意义? – Wolfie

+0

布局很有意义,我会尝试这种格式,非常感谢!不幸的是,VBA仍然有我提到的错误 –