2012-10-08 47 views
10

Tôi có bảng tính excel trong đó macro được gắn với nút vẽ hình dạng động dựa trên thông số nhập của người dùng trong trang tính.Xóa tất cả các hình dạng trong bảng tính excel ngoại trừ các điều khiển biểu mẫu

Tôi đang cố viết macro mới để làm sạch trang tính hoặc nói cách khác là xóa tất cả các hình trong trang tính.

Tôi đã thử sử dụng mã bên dưới và thực sự xóa tất cả các hình dạng, tuy nhiên các nút điều khiển biểu mẫu nút cũng bị xóa trong quá trình. Có cách nào dễ dàng để loại bỏ các hình dạng (mũi tên, hộp văn bản, hình elip, v.v.) trong bảng tính không? Cảm ơn nhiều!!!

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    Shp.Delete 
Next Shp 

End Sub 

Trả lời

15

Để xóa trạng thái tự động và hộp văn bản duy nhất mà bạn có thể sử dụng:

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Shp.Type = msoAutoShape Or Shp.Type = msoTextBox Then Shp.Delete 
Next Shp 

End Sub 

Hoặc bạn có thể làm việc theo cách khác xung quanh và chỉ định các loại không xóa. Bạn có thể sử dụng các kiểu liệt kê nhưng nó có thể đọc được hơn để sử dụng các tên kiểu. Đoạn mã sau sẽ xóa mọi thứ ngoài các Điều khiển biểu mẫu và đối tượng điều khiển OLE.

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete 
Next Shp 

End Sub 

Danh sách đầy đủ các loại hình dạng MSO. http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Ron de Bruin có một bộ sưu tập các đoạn mã có liên quan đến bất kỳ ai khác gặp phải câu hỏi này. http://www.rondebruin.nl/controlsobjectsworksheet.htm

+0

tiếc là nó không hoạt động: 1. điều khiển biểu mẫu bị xóa cũng như các hình dạng khi tôi thực thi mã số 1 của bạn. 2. thứ hai hoạt động tốt hơn: nó xóa các hình dạng và lá điều khiển hình thức một mình. tuy nhiên, lần này "hộp văn bản" không bị xóa. Tôi gần như chắc chắn có một mã lót mà thực hiện thủ thuật, nhưng tôi không thể nhớ nó. – marillion

+0

Bạn có loại điều khiển biểu mẫu nào? Tôi vừa thử nghiệm nó (thứ hai) trên hộp kiểm ActiveX Control và các nút Form Control và nó hoạt động tốt. –

+0

Rất tiếc, tôi vừa chỉnh sửa nhận xét của tôi sau khi tôi nhìn thấy câu hỏi thứ hai của bạn. Như bạn đã nói, mã thứ hai không chạm vào các điều khiển biểu mẫu, điều này hoàn hảo. Tuy nhiên, nó không xóa các hộp văn bản vì lý do nào đó. – marillion

Các vấn đề liên quan