2016-08-18 87 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