2013-06-04 4 views
0

Я написал макрос для выполнения нескольких действий и в конце концов хочу удалить более 20 столбцов.
Я использовал оператор ниже, чтобы выполнить его, но он дает мне ошибку времени выполнения. Похоже, что существует ограничение на количество столбцов, которые вы можете удалить за раз.Удаление более 20 столбцов в excel vba

Я записал макрос, чтобы удалить все приведенные ниже столбцы, и кажется, что excel разбивает оператор диапазона на несколько, но когда я его использую, он, похоже, не работает. PLS, дайте мне знать, что это самый простой способ удалить столько столбцов. спасибо

Range("A:A,C:C,D:D,E:E,F:F,J:J,L:L,M:M,O:O,Q:Q,R:R,T:T,U:U,V:V,W:W,X:X,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AG:AG,AI:AI,AK:AK,AL:AL,AN:AN,AO:AO,AP:AP,AQ:AQ,AR:AR,AT:AT,AU:AU, AV: AV , AW: AW , AX: AX , AY: AY , AZ: AZ , BA: BA , BB: BB , BC: BC , BD: BD , BE: BE , BF: BF , BG: BG , BH: BH, BI:  BI , BJ: BJ , BK: BK , BM: BM , BN: BN , BP: BP , BQ: BQ , BR: BR , BS: BS , BU: BU , BV: BV , BW: BW , BX: BX , BY: BY , CA: CA, CB:  CB , CC: CC , CE: CE ").Select 
Range("CE1").Activate 
Selection.Delete Shift:=xlToLeft 

ответ

2

Адресная строка, передаваемая в свойство диапазона, не может превышать 255 символов. Вы можете сократить ваши, потому что некоторые из столбцов смежны - используйте T: X, а не T: T, U: U, V: V, W: W, X: X. Если строка еще слишком длинная, вам нужно будет создать отдельные диапазоны и объединить их или выполнить удаление за пару шагов.

+0

Есть ли особый синтаксис для объединения, который я должен соблюдать? – user2453587

+0

это будет 'union (range (" a: d, f: h "), range (" y: aa, ad: bq ")). Wholecolumn.delete' например – JosieP

+0

спасибо, ребята, за вашу помощь. ниже - то, что сработало для меня .. надеюсь, было бы полезно, если кто-то еще ищет подобный вопрос ... Range («A1»). Выберите Union (Range («A: A, C: F, J: J, L: («Z: AE, AG: AG»), Range («AI: AI, AK: AL, AN: AR, AT : «BK»), Range («BM: BN, BP: BS, BU: BY»), Range («CA: CC, CE: CE»)). Выберите Range («CE1»). Активируйте Selection.Delete Shift: = xlToLeft – user2453587

3
With Sheets(shtname) 
     .Columns(Range("A").Select).EntireColumn.Delete 
     .Columns(Range("C:F,J,L,M,O").Select).EntireColumn.Delete 
     .Columns(Range("Q:R, T:X").Select).EntireColumn.Delete 
     .Columns(Range("Z:AE,AI,AK:AL,AN:AR,AT:BK").EntireColumn.Delete 
' complete your range in the same way and you should be sorted 
End With 

Похоже, что это должно сработать для вашей цели, если нет, оставьте комментарий, разъясняющий ваш вопрос.

+0

Я давал ему начало, я полагаю, ему понравилось бы все решение, хотя ... – hd1

+0

просто пытался избежать неизбежного сообщения, что «он не делал то, что я хотел!». Убрал мой старый комментарий, потому что теперь он промахивается ... + 1, тем не менее. – sous2817

+0

Без проблем, matey ... :) – hd1

Смежные вопросы