Vba 运行代码后删除工作表中的边框线

Vba 运行代码后删除工作表中的边框线,vba,excel,Vba,Excel,我有一个代码,可以成功地查找外部文件,并将包含该特定条件的行复制/粘贴到当前工作簿中。例如,我正在名为活动主项目文件的外部工作簿中搜索Singapore,并将包含Singapore的所有行复制到当前打开的工作簿中 出现的一个问题是,当我运行同一代码两次时,工作表的最后一行将存在一条边框线。例如,当我运行代码时,它会将包含Singapore的信息复制粘贴到当前名为“新即将到来的项目”的工作表中: 但是,当我再次运行代码时,它将在每列上创建一条边框线,如下图所示: 我现在掌握的代码是: Sub

我有一个代码,可以成功地查找外部文件,并将包含该特定条件的行复制/粘贴到当前工作簿中。例如,我正在名为活动主项目文件的外部工作簿中搜索
Singapore
,并将包含
Singapore
的所有行复制到当前打开的工作簿中

出现的一个问题是,当我运行同一代码两次时,工作表的最后一行将存在一条边框线。例如,当我运行代码时,它会将包含
Singapore
的信息复制粘贴到当前名为“新即将到来的项目”的工作表中:

但是,当我再次运行代码时,它将在每列上创建一条边框线,如下图所示:

我现在掌握的代码是:

Sub UpdateNewUpcomingProj()
    Dim wb1 As Workbook, wb2 As Workbook
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim copyFrom As Range
    Dim lRow As Long '<~~ Not Integer. Might give you error in higher versions of excel
    Dim strSearch As String

    Set wb1 = Application.Workbooks.Open("U:\Active Master Project.xlsm")
    Set ws1 = wb1.Worksheets("New Upcoming Projects")

    strSearch = "Singapore"
    With ws1

        '~~> Remove any filters
        .AutoFilterMode = False

        '~~> I am assuming that the names are in Col A
        '~~> if not then change A below to whatever column letter
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        With .Range("A1:A" & lRow)
            .AutoFilter Field:=1, Criteria1:="=*" & strSearch & "*"
            Set copyFrom = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
        End With

        .AutoFilterMode = False
    End With

    '~~> Destination File
    Set wb2 = ThisWorkbook
    Set ws2 = wb2.Worksheets("New Upcoming Projects")
     With ws2
        If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
            lRow = .Cells.Find(What:="*", _
                          After:=.Range("A1"), _
                          Lookat:=xlPart, _
                          LookIn:=xlFormulas, _
                          SearchOrder:=xlByRows, _
                          SearchDirection:=xlPrevious, _
                          MatchCase:=False).Row
        Else
            lRow = 2
        End If

       copyFrom.Copy .Rows(lRow)
      .Rows.RemoveDuplicates Array(2), xlNo

    End With
End Sub
子更新wupcomingproj()
将wb1设置为工作簿,将wb2设置为工作簿
将ws1标注为工作表,将ws2标注为工作表
从As范围变暗复制
只要“我假设这些名字都是A列的”就可以了
“~~>如果不是,则将下面的A更改为任何列字母
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“A1:A”和lRow)
.AutoFilter字段:=1,标准1:=“=*”&strSearch&“*”
设置copyFrom=.Offset(1,0).SpecialCells(xlCellTypeVisible).EntireRow
以
.AutoFilterMode=False
以
“~~>目标文件
设置wb2=ThisWorkbook
设置ws2=wb2.工作表(“新的即将到来的项目”)
与ws2
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=2
如果结束
copyFrom.Copy.Rows(lRow)
.Rows.RemoveDuplicates数组(2),xlNo
以
端接头
是否需要添加任何改进或附加代码,以便边界线消失?

在代码末尾, 请添加新行以格式化第三行的绘图

所以基本上在最后两行之前 wb1.选择“请确保在此处选择正确的wb1或wb2,然后重试。” 行(“3:3”)。选择 选择,复制 行(“4:10000”)。选择 Selection.Paste特殊粘贴:=xlPasteFormats,操作:=xlNone_ SkipBlanks:=False,转置:=False Application.CutCopyMode=False 以 end sub'这是代码末尾的最后一行

, 请添加新行以格式化第三行的绘图

所以基本上在最后两行之前 wb1.选择“请确保在此处选择正确的wb1或wb2,然后重试。” 行(“3:3”)。选择 选择,复制 行(“4:10000”)。选择 Selection.Paste特殊粘贴:=xlPasteFormats,操作:=xlNone_ SkipBlanks:=False,转置:=False Application.CutCopyMode=False 以
end sub'这是代码的最后一行

,正如EyePeaSea所说,您可以通过vba代码删除边框,例如

ThisWorkbook.Worksheets("XY").Range("A1", "Z99").Borders.LineStyle = xlNone
在您的情况下,代码应该是(未测试的)


复制行后,如EyePeaSea所说,您可以通过vba代码删除边框,例如

ThisWorkbook.Worksheets("XY").Range("A1", "Z99").Borders.LineStyle = xlNone
在您的情况下,代码应该是(未测试的)


复制行后,我假定此格式来自源工作表。如果是这样,您可以
PasteSpecial
只粘贴值,保留目标格式。为此,只需更换

copyFrom.Copy .Rows(lRow)


如果您确实需要源工作表中的某些格式,可以使用
xlpastellexceptborders
而不是
xlPasteValues

我假定此格式来自源工作表。如果是这样,您可以
PasteSpecial
只粘贴值,保留目标格式。为此,只需更换

copyFrom.Copy .Rows(lRow)


如果确实需要源工作表中的某些格式,则可以使用
xlpasteAllExceptbrders
而不是
xlPasteValues

粘贴特殊格式,这将粘贴到A列中的第一个空单元格

copyfrom.Copy
ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
Application.CutCopyMode = 0

特殊粘贴,这将粘贴到A列中的第一个空单元格

copyfrom.Copy
ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
Application.CutCopyMode = 0

删除重复项后,可以添加此行

.UsedRange.Offset(lRow).Borders.Value = 0
这将从插入的行中删除任何边框


p、 s:我仍然不明白这些边界是从哪里来的,很可能来自原始工作表:)

删除重复项后,可以添加此行

.UsedRange.Offset(lRow).Borders.Value = 0
这将从插入的行中删除任何边框


p、 s:我仍然不明白这些边界是从哪里来的,很可能来自原始工作表:)

嗨,我还没有试过你的代码,所以我不知道你为什么会得到一个边界。但是你不能在复制范围后删除边框吗?请参阅:-IanI可以删除边框,但用户会发现每次运行代码时都要删除边框很麻烦。这就是为什么我想知道是否有任何方法可以删除边框,以防止在播放代码时定期删除边框@eyepealast line of code to remove borders,
Cells.borders.LineStyle=xlNone
@nabilah-很抱歉混淆-我提供的链接(以及Katz和DaveXcel给出的答案)与向现有VBA添加代码相关-因此用户无需做任何事情。好的,谢谢!我确实看了一下:)@eyepeahi还没有试过你的代码,所以不知道你为什么会得到一个边界。但是你不能在复制范围后删除边框吗?请参阅:-IanI可以删除边框,但用户会发现每次运行代码时都要删除边框很麻烦。这就是为什么我想知道是否有