2016-08-18 88 views
0

我在試圖製作一個宏,它將提示用戶輸入單元格區域,然後刪除工作表中的所有其他內容(包括顏色,邊框等)。用戶輸入的單元格區域必須與以前相同,其他所有內容都應該與空白表單一樣。刪除並保持佈局 - VBA

我已經嘗試過類似的東西,但不知道如何完成它。希望您能夠幫助我。

Public Sub Removeformulas() 


'Prompt user to select cell range to keep 

Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 

rngrows = rng.Rows.Count 
rngcols = rng.Columns.Count 

For i = 1 To rngrows 
    For j = 1 To rngcols 
     celltocopy = Cells(i, j) 
    Next j 
Next i 

End Sub 
+0

爲什麼不將用戶輸入的範圍複製到新工作表並刪除舊工作表?似乎簡單得多 – Andreas

+0

這符合下面發佈的答案,並且可以擴展。但是,如果你這樣做,是否有可能保持原始列和行的寬度和高度? – selfexplanatory

回答

0

試試這個:


Sub Clean() 

    Application.DisplayAlerts = False 
    Rng = InputBox("input range, format A1:B5") 

    Range(Rng).Copy 
    oldname = ActiveSheet.Name 
    Sheets.Add.Name = "Test" 
    'Range(Rng).PasteSpecial xlPasteAll 

    With Range(Rng) 
     .Cells(1).PasteSpecial xlPasteColumnWidths 
     .Cells(1).PasteSpecial xlPasteValues, , False, False 
     .Cells(1).PasteSpecial xlPasteFormats, , False, False 
     .Cells(1).Select 
     Application.CutCopyMode = False 
    End With 

    Sheets(oldname).Delete 

    Sheets("Test").Name = oldname 
    Application.DisplayAlerts = True 
End Sub 

它會創建一個名爲「Test」的新工作表並粘貼值出現,然後再刪除舊錶,並重新命名「測試」無論老表被調用。

+0

這與我所尋找的非常接近。但是,如果不同單元格的大小已被更改,則在運行程序時不會保留這些大小。是否可以保持列和行的寬度和高度? – selfexplanatory

+0

@selfexplanatory現在試試吧 – Andreas

+0

@ Andreas我找到了粘貼列寬的解決方案。但是,是否有類似的命令行高(我也需要保留)。此外,作爲單元格區域的一部分的圖像(例如公司徽標)也需要被複制,該程序目前不執行。 – selfexplanatory