Excel 如果范围为A:A,则粘贴边框的VBA代码

Excel 如果范围为A:A,则粘贴边框的VBA代码,excel,vba,Excel,Vba,我写了一个代码,每当我输入一个条目时,它会将边框粘贴到Sheet1使用范围上,而Sheet2也是如此。数据自动被边框覆盖 如果我同时应用表1和表2中的代码,我将面临一个错误,range class的选择方法失败 如果我使用单页代码,它就可以工作 有没有一种方法可以合并这两种代码,或者有什么方法可以让它工作,或者以一种有效的方式来做这件事 任何帮助都将不胜感激 表1 表2 如果我使用单页代码,它就可以工作 这可能是因为您没有完全限定范围:如果您没有限定单元格和范围,它将在活动工作表上工作,因此您需

我写了一个代码,每当我输入一个条目时,它会将边框粘贴到Sheet1使用范围上,而Sheet2也是如此。数据自动被边框覆盖

如果我同时应用表1和表2中的代码,我将面临一个错误,range class的选择方法失败

如果我使用单页代码,它就可以工作

有没有一种方法可以合并这两种代码,或者有什么方法可以让它工作,或者以一种有效的方式来做这件事

任何帮助都将不胜感激

表1

表2

如果我使用单页代码,它就可以工作


这可能是因为您没有完全限定范围:如果您没有限定单元格和范围,它将在活动工作表上工作,因此您需要使用包含范围的工作表预先限定Wu,因此target.parent.Cells和target.parent.Range可能会解决您的问题

有没有办法将这两种代码合并

定义将工作表作为参数的子对象

sub do_the_work(byref ws as worksheet)


Application.ScreenUpdating = False
lngLstRow = Worksheets("Current Stock").UsedRange.Rows.Count
lngLstCol = Worksheets("Current Stock").UsedRange.Columns.Count

For Each rngCell In ws.Range("A2:A" & lngLstRow)
    If rngCell.Value > "" Then
        r = rngCell.Row
        c = rngCell.Column
        ws.Range(ws.Cells(r, c), ws.Cells(r, lngLstCol)).Select
            With Selection.Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
                End With
                With Selection.Font
                .Name = "Calibri"
               .Size = 10
            End With
    End If
Next
Application.ScreenUpdating = True

end sub
然后在工作表内。更改调用

改进删除选择


首先最好是这样。当然@BigBen我会避免。是的,我看到了你的观点,并且已经投了赞成票:我只是对现有代码进行了修改,以实现我对问题的回答,而不是同时对代码进行改进,从而使之混淆——但我完全同意,基于选择做事情没有什么好处,也有很多坏处。谢谢你@JohnnieL,我明白了。你所介绍的对我帮助很大。BigBen也感谢您的澄清。如果您不限定单元格和范围,它在活动表上工作-这是不准确的。看见这里的隐式限定词是我。顺便问一下,Target.Parent可以简化为我。我在@BigBen这里缺少的微妙之处是什么?你发布的推荐信肯定会有帮助。它同样指出,标准模块中的非限定范围或单元格或行/列将引用ActiveSheet,那么我写的内容和您知道的内容之间的增量有什么微妙之处呢?提前感谢您隐式限定符始终为ActiveSheet的说法是不准确的。对于工作表事件,隐式限定符是Me。从同一句话。。。但在工作表代码模块中,隐式限定符是Me,并将引用相应的工作表。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
lngLstRow = Worksheets("Current Stock").UsedRange.Rows.Count
lngLstCol = Worksheets("Current Stock").UsedRange.Columns.Count

For Each rngCell In Range("A2:A" & lngLstRow)
    If rngCell.Value > "" Then
        r = rngCell.Row
        c = rngCell.Column
        Range(Cells(r, c), Cells(r, lngLstCol)).Select
            With Selection.Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
                End With
                With Selection.Font
                .Name = "Calibri"
               .Size = 10
            End With
    End If
Next
Application.ScreenUpdating = True
End Sub
sub do_the_work(byref ws as worksheet)


Application.ScreenUpdating = False
lngLstRow = Worksheets("Current Stock").UsedRange.Rows.Count
lngLstCol = Worksheets("Current Stock").UsedRange.Columns.Count

For Each rngCell In ws.Range("A2:A" & lngLstRow)
    If rngCell.Value > "" Then
        r = rngCell.Row
        c = rngCell.Column
        ws.Range(ws.Cells(r, c), ws.Cells(r, lngLstCol)).Select
            With Selection.Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
                End With
                With Selection.Font
                .Name = "Calibri"
               .Size = 10
            End With
    End If
Next
Application.ScreenUpdating = True

end sub
Private Sub Worksheet_Change(ByVal Target As Range)
  do_the_work target.parent
End Sub
        With ws.Range(ws.Cells(r, c), ws.Cells(r, lngLstCol))
            With .Borders
                .LineStyle = xlContinuous
                .Weight = xlThin
                .ColorIndex = xlAutomatic
            End With
            With .Font
                .Name = "Calibri"
               .Size = 10
            End With
        End With