2013-02-10 1 views
0

Интересно, сможет ли кто-нибудь помочь мне.Исключить текстовое значение от VBA Autosort

Я использую следующий код, чтобы выполнить сортировку до закрытия книги.

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Sheets("Input").Protect "password", UserInterFaceOnly:=True 
    With ThisWorkbook.Worksheets("Input") 

     If .Range("B7").Value = "" Then Exit Sub 
     .Range("B7:AH400").Sort Key1:=.Range("B7"), _ 
     Order1:=xlAscending, _ 
     Header:=xlGuess, _ 
     OrderCustom:=1, _ 
     MatchCase:=False, _ 
     Orientation:=xlTopToBottom, _ 
     DataOption1:=xlSortNormal 
    End With 
End Sub 

код работает отлично, но я хотел бы расширить функциональные возможности немного дальше и исключить текстовое значение «Введите свое имя» из рода, так что клетки с этим значением в столбце B будет всегда будет последней строкой под всеми моими строками данных.

Я потратил хорошую неделю или около того на это, пытаясь найти решение, но, к сожалению, я не смог этого сделать. Я также посмотрел сайт Microsft, чтобы узнать, есть ли какие-либо встроенные функции в методе Range.sort, но я снова нарисовал пробел.

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

Большое спасибо и добрые пожелания

Крис

+0

Моей первой мыслью (так как это только один, но данные) будет удалить «Введите свое имя» значение данных ... то вроде .... затем повторно - верните его в нижнюю часть набора данных. Очевидно, что это не очень удобно. Кроме того, если «Введите свое имя», естественно, находится в нижней части набора данных, вы можете просто исключить его из диапазона сортировки. – Pynner

+0

Привет, @ Pynner, спасибо, что нашли время ответить на мой пост. Мне было бы очень интересно узнать, можно ли исключить это значение из сортировки. Я просто задавался вопросом, можете ли вы предложить некоторые рекомендации о том, как я могу это сделать. Большое спасибо и добрые пожелания. Chris – IRHM

ответ

0

Поскольку данные, которые вы хотите исключить находится в нижней части диапазона вы можете просто «правильный размер» диапазон сортировки, чтобы исключить его. использовать .end и .row методы, чтобы выяснить, сколько данных вы имеете

Dim EndRow as long 

после если даного добавить

'find last row of data 
EndRow = Range("B7").end(xldown).row -1 

Изменение диапазона использовать вновь вычисленное конец строки.

.Range("B7:AH400") 

становится

.Range("B7:AH" & EndRow) 
+0

Привет, @ Pynner, большое вам спасибо за то, что нашли время, чтобы ответить на мой пост и собрать решение вместе. Это именно то, чем я был. С уважением. Крис – IRHM