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

时间:2015-09-30 06:32:54

标签: excel vba excel-vba

我有一个代码可以成功查看外部文件,并将包含该特定条件的行复制/粘贴到当前工作簿中。例如,我在名为Active master project file的外部工作簿中搜索Singapore,并将包含Singapore的所有行复制到当前打开的工作簿中。

出现的问题是,当我运行两次相同的代码时,工作表的最后一行将存在边框线。例如,当我运行代码时,它会将包含Singapore的信息复制粘贴到当前名为" New Upcoming Projects":

的工作表中。

enter image description here

然而,当我再次运行代码时,它会在每列上创建一个边框线,如下图所示:

enter image description here

我现在的代码是:

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

我是否需要添加任何改进或附加代码以使边界线消失?

5 个答案:

答案 0 :(得分:4)

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

ThisWorkbook.Worksheets("XY").Range("A1", "Z99").Borders.LineStyle = xlNone

在您的情况下,代码应该是(未经测试的)

copyFrom.Borders.LineStyle = xlNone
复制行后

答案 1 :(得分:2)

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

copyFrom.Copy .Rows(lRow)

copyFrom.Copy
.Rows(lRow).PasteSpecial xlPasteValues, xlPasteSpecialOperationNone, False, False

如果您确实需要源表格中的某些格式,则可以使用xlPasteAllExceptBorders代替xlPasteValues

答案 2 :(得分:2)

选择性粘贴,这将粘贴到A列中的第一个空单元格

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

答案 3 :(得分:2)

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

.UsedRange.Offset(lRow).Borders.Value = 0

这将从插入的行中删除任何边框

p.s。:我仍然不明白这些边界的来源,很可能来自原始工作表.. :)

答案 4 :(得分:0)

在代码的最后, 请添加一个新行来格式化第3行的绘画。

所以基本上在最后两行之前     wb1。选择&#39;请确保在此处选择正确的wb1或wb2,然后重试     行(&#34; 3:3&#34)。选择     Selection.Copy     行(&#34; 4:10000&#34;)选择。     Selection.PasteSpecial Paste:= xlPasteFormats,Operation:= xlNone,_         SkipBlanks:= False,Transpose:= False     Application.CutCopyMode = False     结束     end sub&#39;这是代码的最后一行