Excel VBA格式化已关闭的工作表错误1004"应用程序定义或对象定义的错误"

时间:2014-08-13 13:15:29

标签: vba excel-vba excel

我已经写了一大堆VBA代码,不幸的是它最简单的部分是行不通的。我只需要打开一个特定的工作簿(名称不会改变)并在其中绘制边框。写入它的My Sub工作正常,但是当我尝试绘制任何边框时,它会在与VBA代码关联的工作表中绘制它们,而不是它打开的那个。下面的代码是我尝试修复它(为方便起见,我已将其移动到自己的Sub)但错误1004在ActiveSheet.Range(rRng).BorderAround xlContinuous

上启动

我不怀疑这是显而易见的事情,但我不能为我的生活看到它的位置。例如。 xl0.ActiveSheet.Range(rangeAA) = CardDataInputMode这在我创建的WriteToSheet Sub中对我来说绝对正常,但添加下一行:ActiveSheet.Range(rRng).BorderAround xlContinuous将无法正常工作。出于好奇,我将xl0.ActiveSheet.Range("A:AS").Columns.AutoFit添加到了Write Sub,它也自动完成了AutoFits。我绕圈子走了!

这是整个Sub,其他任何需要请告诉我!非常感谢。

Sub OutlineCells()
    Dim xl0 As New Excel.Application
    Dim xlw As New Excel.Workbook
    Dim rRng As Range
    Dim row As Range
    Dim cell As Range

    Set xlw = xl0.Workbooks.Open(Application.ThisWorkbook.Path & "\Outputs\MasterCardTestCaseTemplate.xlsx")
    xlw.Worksheets("Sheet1").Activate

    Set rRng = Sheet1.Range("A1:AS25")

    'Clear existing
    'rRng.Borders.LineStyle = xlNone

    For Each row In rRng.Rows
        For Each cell In row.Cells
            'Apply new borders
            xlw.ActiveSheet.Range(rRng).BorderAround xlContinuous  ' <--- ERROR HERE
            xlw.ActiveSheet.Range(rRng).Borders(xlInsideHorizontal).LineStyle = xlContinuous
            xlw.ActiveSheet.Range(rRng).Borders(xlInsideVertical).LineStyle = xlContinuous
        Next cell
    Next row

    xlw.Save
    xlw.Close

    Set xl0 = Nothing
    Set xlw = Nothing

End Sub

1 个答案:

答案 0 :(得分:3)

你正在使用你的范围对象 - 你在括号中有它导致评估,并且由于范围对象的默认属性是.Value,这一行:

xl0.ActiveSheet.Range(rRng).BorderAround xlContinuous

基本上是这样的:

xl0.ActiveSheet.Range(rRng.Value).BorderAround xlContinuous

如果rRng表示单个单元格并且该单元格的.Value是有效的地址字符串,则不会引发错误。

现在,您可以执行此操作以强制.Address属性:

xl0.ActiveSheet.Range(rRng.Address).BorderAround xlContinuous

但最好让rRng成为xlW工作簿的一部分。 更改此,以使其符合xlw工作簿:

Set rRng = xlw.ActiveSheet.Range("A1:AS25")

然后您可以直接使用该范围:

For Each row In rRng.Rows
    For Each cell In row.Cells
        'Apply new borders
        rRng.BorderAround xlContinuous  ' <--- ERROR HERE
        rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
        rRng.Borders(xlInsideVertical).LineStyle = xlContinuous
    Next cell
Next row

现在我看一下,你根本不需要那个嵌套循环,只省略两个For Each循环,我认为这应该做同样的结果:

'## DELETE THIS For Each row In rRng.Rows   
'## DELETE THIS   For Each cell In row.Cells
        'Apply new borders
        rRng.BorderAround xlContinuous  ' <--- ERROR HERE
        rRng.Borders(xlInsideHorizontal).LineStyle = xlContinuous
        rRng.Borders(xlInsideVertical).LineStyle = xlContinuous
 '## DELETE THIS    Next cell
 '## DELETE THIS Next row