2016-07-29 84 views
0

我需要你的帮助。我是新的使用范围作为变量,所以可能有一些明显的我失踪,但我似乎无法找到一个解决方案后,大量的谷歌搜索。Excel VBA范围变量引发错误1004 - 我在

我格式化四张数据(标题,漂亮的填充颜色,漂亮的边框)。他们几乎都是一样的,但他们有不同数量的列。为了节省重复的代码,我写了一个过程来完成格式化,另一个过程来改变变量并调用格式化代码。调用代码的

样品:

' Set Customer detail variables. 

varGlobalID = Sheets(varWST1Dockets).Cells(2, 13).Value 
varCustomerName = Sheets(varWST1Dockets).Cells(2, 14).Value 

'格式悬浮的格式代码

' Set Variables 

    varReportHeading = "Suspended Dockets Investigation" 

    Set rngDataHeadings = Range("B11", "T11") 

    Range("B1048576").End(xlUp).Select 
    Set rngDataTable = Range(Selection, "T11") 

    Range("B1048576").End(xlUp).Select 
    Set rngData = Range(Selection, "T12") 

' Run Format Reports Procedure 

    Sheets(varWSSuspended).Select 
    Call FormatReports 

样品

' Format Data Headings 

rngDataHeadings.Select 
With Selection.Interior 
    .Pattern = xlSolid 
    .PatternColorIndex = xlAutomatic 
    .Color = -4300032 
    .PatternTintAndShade = 0 
End With 
With Selection.Font 
    .ColorIndex = 2 
    .TintAndShade = 0 
    .Bold = True 
End With 
With Selection 
    .HorizontalAlignment = xlLeft 
    .VerticalAlignment = xlCenter 
    .WrapText = True 
    .Orientation = 0 
    .AddIndent = False 
    .IndentLevel = 0 
    .ShrinkToFit = False 
    .ReadingOrder = xlContext 
    .MergeCells = False 
End With 

' 应用边框

rngDataTable.Select 

With Selection.Borders(xlEdgeLeft) 
    .LineStyle = xlContinuous 
    .ColorIndex = 2 
    .TintAndShade = 0 
    .Weight = xlMedium 
End With 

该代码似乎工作在变量的第一次运行,但不是第二次。我需要在重置之前卸载它们吗?还是我在做别的愚蠢明显的错误?

在此先感谢。

+2

步骤通过它与F8 ......哪一行,你得到的错误? – Rodger

+1

'varWST1Dockets'是一个字符串还是工作表? – 2016-07-29 03:00:39

+2

如果严格遵循[THIS](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros),那么所有这些问题将消失:) –

回答

1

Set rngDataHeadings = Range("B11", "T11")参考文献B11:T11的ActiveSheet。选择另一个工作表并尝试rngDataHeadings.Select将抛出异常运行时错误'1004'范围类别的选择方法失败

最好避免选择和激活。你应该看Selecting Cells (Range, Cells, Activecell, End, Offset)

如果你有标准表,这将工作。

Sub FormatTable(wsWorksheet As Worksheet, HeaderAddress As String) 
    Dim rDataBody As Range 
    Dim rHeader As Range 

    With wsWorksheet 
     Set rHeader = .Range(HeaderAddress, .Range(HeaderAddress).End(xlToRight)) 
     Set rDataBody = Range(HeaderAddress).CurrentRegion 
     Set rDataBody = rDataBody.Offset(1).Resize(rDataBody.Rows.Count - 1) 
    End With 
    With rHeader.Interior 
     .Pattern = xlSolid 
     .PatternColorIndex = xlAutomatic 
     .Color = -4300032 
     .PatternTintAndShade = 0 
    End With 
    With rHeader.Font 
     .ColorIndex = 2 
     .TintAndShade = 0 
     .Bold = True 
    End With 
    With rHeader 
     .HorizontalAlignment = xlLeft 
     .VerticalAlignment = xlCenter 
     .WrapText = True 
     .Orientation = 0 
     .AddIndent = False 
     .IndentLevel = 0 
     .ShrinkToFit = False 
     .ReadingOrder = xlContext 
     .MergeCells = False 
    End With 

    ' Apply Borders 
    With rDataBody.Borders(xlEdgeLeft) 
     .LineStyle = xlContinuous 
     .ColorIndex = 2 
     .TintAndShade = 0 
     .Weight = xlMedium 
    End With 

End Sub 

这样称呼它

FormatTable工作表( “工作表Sheet1”), “B11”

+0

谢谢托马斯。我想我明白你的建议。我会放弃它。我是自学的,所以有很多我不知道:s。 –

+0

谢谢托马斯。这工作非常好。我从你设置的方式中学到了很多东西。特别是选择范围。我有一个问题。虽然,rHeader似乎没有选择任何东西。 rDataBody虽然工作出色。有任何想法吗?这个链接很有趣,但它涵盖了我已经知道的大部分内容。我已经订阅他们回来看。我也有一个我正在教授的人,这也会派上用场。谢谢。 –

+0

在'rHeader'范围设置后,你可以放这段代码:'Debug.Print rHeader.Address'吗?那么你可以检查结果的立即窗口并将其发回给我评论? – 2016-07-29 08:21:07