2015-09-30 41 views
1

我有一個代碼成功查找外部文件,並將包含該特定條件的行復制/粘貼到當前工作簿中。例如,我在名爲Active master project file的外部工作簿中搜索Singapore,並將包含Singapore的所有行復制到當前打開的工作簿。運行代碼時刪除工作表中的邊框線

發生的一個問題是,當我運行相同的代碼兩次時,工作表的最後一行將存在邊框線。例如,當我運行代碼,它將複製粘貼包含Singapore到調用當前工作表中的信息「即將到來的新項目」:

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 

是否有任何改進或附加代碼,我必須添加以使邊界線消失?

+0

你還沒有試過你的代碼,所以不知道*爲什麼*你得到了一個邊框。但是,您是否能夠在複製範圍後刪除邊框?請參閱:http://stackoverflow.com/questions/6974965/how-to-remove-borders-from-cells-in-a-range-in-excel-using-vb-net - 伊恩 – EyePeaSea

+0

我可以刪除邊框,但用戶會發現每次他或她運行代碼時都必須始終刪除邊界,這很麻煩。這就是爲什麼我想知道是否有任何方法可以刪除邊框,以防止在代碼播放時定期刪除邊框@EyePeaSea – nabilah

+0

刪除邊框的最後一行代碼,'Cells.Borders.LineStyle = xlNone' – Davesexcel

回答

2

後,我認爲這是格式化從源工作表來。如果是這樣,你可以PasteSpecial只是粘貼值,保持目標格式。要做到這一點,只需用

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

更換

copyFrom.Copy .Rows(lRow) 

如果您確實需要從源頭上表一些格式,你可以使用xlPasteAllExceptBorders而不是xlPasteValues

+0

嗨,謝謝!你的代碼適合我! :) – nabilah

0

在代碼的末尾, 請添加一個新行來格式化第三行的paint。

所以基本上前的最後兩行 wb1.Select「請確保您選擇正確的WB1或WB2這裏,然後再試一次 行(‘3:3’)。選擇 Selection.Copy 行(」 4:10000" )選擇 Selection.PasteSpecial粘貼:= xlPasteFormats,操作:= xlNone,_ SkipBlanks:=假,移調:=假 Application.CutCopyMode =假 結束與 端子「這是最後一行您的代碼

+0

嗨,我沒有嘗試你的代碼,但它似乎並沒有工作。邊界仍然存在 – nabilah

4

由於EyePeaSea表示您可以通過vba代碼刪除邊框,例如

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

在你的情況下,代碼應爲(未經測試)

copyFrom.Borders.LineStyle = xlNone 

複製行

+0

感謝您的幫助! – nabilah

2

選擇性粘貼,這將粘貼到列的第一個空單元格一個

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

謝謝!我會嘗試代碼,並讓你:) – nabilah

2

您可以添加此行後刪除重複項

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

這將從插入的行刪除任何邊界

ps:我還是不明白這些邊界來自哪裏,最有可能來自原始工作表.. :)

+0

我也不知道邊界來自哪裏。謝謝!但是,代碼也會刪除我的列標題的邊框 – nabilah

+0

@nabilah是目標工作表中唯一有邊框的地方嗎? –

+0

沒有。每張表格都有一個用於列標題的邊框。你給我的代碼用於其他工作表,結果是一樣的。仍然會在最後一行產生邊框線 – nabilah