Прежде всего, не используйте «Selection» в вашем коде. Это плохая практика, и она может создать много разных проблем.
Что я хотел бы предложить для вас:
Dim initialRow As Long, endRow As Long
'starts on line 1 and goes on
initialRow = 1
'checks for bold in column 1
Do While Cells(initialRow,1).Font.Bold = False
initialRow = initialRow + 1
Loop
endRow = initialRow+1
Do While Cells(endRow+1,1).Font.Bold = False
endRow = endRowRow + 1
Loop
Range("A" & initialRow & ":BG" & endRow).Cut
Sheets.Add After:=ActiveSheet
ActiveSheet.Paste
Это даст вам область между одним жирным шрифтом и следующим, если они находятся в первом столбце, в противном случае вам, возможно, придется изменить его. Обратите внимание, что это нужно будет адаптировать в случае, если вы перебираете все ячейки, особенно во избежание ошибки в последнем отчете, где не будет жирных ячеек, чтобы программа перестала их искать
Код состояния HTTP, который Вы возвращаете, должен зависеть от типа ошибки, которая произошла. Если идентификатор не существует в базе данных, возвратите 404; если у пользователя нет достаточных полномочий выполнить тот вызов Ajax, возвратите 403; если база данных испытывает таймаут перед способностью найти запись, возвратите 500 (ошибка сервера).
jQuery автоматически обнаруживает такие коды ошибок и выполняет функцию обратного вызова, которую Вы определяете в своем вызове Ajax. Документация: http://api.jquery.com/jQuery.ajax/
Короткий пример a $.ajax
ошибочный обратный вызов:
$.ajax({
type: 'POST',
url: '/some/resource',
success: function(data, textStatus) {
// Handle success
},
error: function(xhr, textStatus, errorThrown) {
// Handle error
}
});
Посмотрите этот вопрос для некоторого понимания лучших практик для Вашей ситуации.
Известное предложение (из упомянутой ссылки) состоит в том, чтобы стандартизировать структуру ответа (и для успеха и для отказа), который Ваш обработчик ищет, ловя все Исключения на слое сервера и преобразовывая их в ту же структуру. Например (из этого ответа):
{
success:false,
general_message:"You have reached your max number of Foos for the day",
errors: {
last_name:"This field is required",
mrn:"Either SSN or MRN must be entered",
zipcode:"996852 is not in Bernalillo county. Only Bernalillo residents are eligible"
}
}
Это - подход stackoverflow использование (в случае, если Вы задавались вопросом, как другие делают такого рода вещь); операции записи как голосование имеют "Success"
и "Message"
поля, независимо от того, если голосование было позволено или нет:
{ Success:true, NewScore:1, Message:"", LastVoteTypeId:3 }
Как @Phil. H указанный, необходимо быть последовательными в том, что Вы выбираете. Это легче сказать чем сделать (как все в разработке!).
Например, если Вы отправляете комментарии слишком быстро о Так, вместо того, чтобы быть последовательными и возвратиться
{ Success: false, Message: "Can only comment once every blah..." }
ТАК выдаст исключение сервера (HTTP 500
) и поймайте его в их error
обратный вызов.
Так, как это "чувствует себя хорошо" для использования jQuery + .ashx
+ HTTP [коды состояния] IMO, это добавит больше сложности к Вашей клиентской кодовой базе, чем, он стоит. Поймите, что jQuery не "обнаруживает" коды ошибок, а скорее отсутствие кода успеха. Это - важное различие при попытке разработать клиент на основе кодов ответа HTTP с jQuery. Вы только получаете два варианта (действительно ли это был "успех" или "ошибка"?), который необходимо перейти далее самостоятельно. Если у Вас есть небольшое количество WebServices, управляющего небольшим количеством страниц затем, это могло бы быть хорошо, но что-либо более широкий масштаб может стать грязным.
Это намного более естественно в a .asmx
WebService (или WCF в этом отношении) для возврата пользовательского объекта, чем настроить код состояния HTTP. Плюс Вы получают сериализацию JSON бесплатно.
Используя коды состояния HTTP был бы УСПОКОИТЕЛЬНЫЙ способ сделать это, но это предложит, чтобы Вы сделали остальную часть интерфейса RESTful с помощью ресурса URIs и так далее.
По правде говоря, определите интерфейс, как Вам нравится (возвратите ошибочный объект, например, детализировав свойство с ошибкой и блок HTML, который объясняет это, и т.д.), но после того как Вы выбрали что-то, что работает в прототипе, быть безжалостно последовательным.
Я думаю, пузыритесь ли Вы просто исключение, оно должно быть обработано в обратном вызове jQuery, который передается в для 'ошибочной' опции. (Мы также регистрируем это исключение в сторону сервера к центральному журналу). Никакой специальный код Ошибки HTTP не потребовал, но мне любопытно видеть то, что другие люди делают, также.
Это - то, что я делаю, но это - просто мои.02$
Если Вы собираетесь быть УСПОКОИТЕЛЬНЫМИ и коды ошибок возврата, попытайтесь придерживаться стандартных кодов, сформулированных W3C: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Я определенно возвратил бы 500 ошибок с объектом JSON описание состояния ошибки, подобного тому, как ошибка ASP.NET AJAX "ScriptService" возвращается. Я полагаю, что это довольно стандартно. Определенно хорошо иметь ту непротиворечивость при обработке потенциально неожиданных состояний ошибки.
В стороне, почему не только используют созданный в функциональности в.NET, если Вы пишете это в C#? WCF и сервисы ASMX помогают сериализировать данные как JSON без изобретения велосипед.
Я не думаю, что необходимо возвращать любые коды ошибки HTTP, довольно пользовательские исключения, которые полезны для клиентского конца приложения, таким образом, интерфейс знает то, что на самом деле произошло. Я не попытался бы маска реальные проблемы с 404 кодами ошибок или чем-то к той природе.
Если пользователь предоставляет недопустимые данные, это обязательно должен быть 400 Bad Request
( Запрос содержит неверный синтаксис или не может быть выполнен. )