VBA:如何自动包括单元格边框而不会出现错误(运行时1004)线型

时间:2019-05-29 08:25:44

标签: excel vba runtime-error

所以这是一个与其他人一样的大项目的问题。

我现在只是整理一些格式,本质上是想要一个子程序(我可以从另一个子程序中调用),该子程序将自动在发布到工作表的新数据周围添加所需的边框。

我记录了添加边框的宏(并将范围更改为可变的行-RowToPasteTo),并且一切正常。

我试图从另一段代码中调用它,但它却一团糟,现在给我一个错误:

Run-Time error '1004':

Unable to set the LineStyle Property of the Borders class

正如错误所提到的,.LineStyle似乎是一个错误,但是我使用的是与他们的录音机给我的风格相同的风格。

我如何才能再次使它正常工作,从而完成所有边界?

编辑:忘记添加代码-对不起!

Sub Borders()

Dim RowToPasteTo As Long

With Sheets(4)

 RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
 Range("B" & RowToPasteTo & ":" & "Z" & RowToPasteTo).Select
  With Selection.Borders
    .LineStyle = xlContinuous
    .ThemeColor = 3
    .TintAndShade = -9.99786370433668E-02
    .Weight = xlThin
    End With
End With

End Sub

编辑2:这段代码是在将每行新数据移动到此工作表时插入边框(网格标记已关闭,因为仅在带有数据的行上显示边框。

到目前为止,我已经尝试了所有建议的修订,并且仅运行上述代码时仍然收到错误。

我现在还创建了一张空白纸(并相应地调整了纸页编号),在那里我收到了另一个错误。

(最小化)代码,稍后将如下所示调用此代码段:

Sub ToTank()
Dim RowToPasteTo As Long
        RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1

        Sheets(4).Unprotect
        .Range("A" & RowToPasteTo & ":" & "Z" & RowToPasteTo).Locked = False
Call Borders()

End Sub

2 个答案:

答案 0 :(得分:1)

如上所述,.Borders至少需要1个自变量才能起作用。一种实现您要完成的任务的方法是:

Sub Borders()

Dim RowToPasteTo As Long

With Sheets(4)

    RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1

    For X = 1 To 4
        With .Range("B" & RowToPasteTo & ":" & "Z" & RowToPasteTo).Borders(X)
            .LineStyle = xlContinuous
            .ColorIndex = 3
            .Weight = xlThin
        End With
    Next X
End With

End Sub
按照@Damian的评论,

更正,尽管以上内容也非常有用:

Sub Borders()

Dim RowToPasteTo As Long

With Sheets("Sheet1")

    RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
    With .Range("B" & RowToPasteTo & ":" & "Z" & RowToPasteTo).Borders
        .LineStyle = xlContinuous
        .ColorIndex = 3
        .Weight = xlThin
    End With
End With

End Sub

有关更多详细信息,请参见Borders

答案 1 :(得分:1)

我认为主子边界中发生了一些事情。为了避免此类问题,您需要完全限定所有范围,另一种方法是:

Option Explicit
Sub ToTank()

    Dim RowToPasteTo As Long

    With ThisWorkbook.Sheets(4) 'If the code runs for the same workbook the code is in
        RowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
        .Unprotect
        Borders .Range("B" & RowToPasteTo & ":" & "Z" & RowToPasteTo) 'call the procedure inserting the borders passing the range you need
    End With

End Sub
Sub Borders(MyRange As Range)

    With MyRange.Borders
        .LineStyle = xlContinuous
        .ThemeColor = 3
        .TintAndShade = -9.99786370433668E-02
        .Weight = xlThin
    End With

End Sub

通过这种方式,您始终可以调用Borders子项,而无需进行任何修改即可给出所需的范围。您还可以通过传递更多参数来使变量成为LineStyle和所需的所有属性。