Существуют три листовых коллекции: Worksheets
, Charts
и DialogSheets
. Свойство Index
этих коллекций возвращает индекс коллекции Sheets
, а не фактический индекс в коллекции для конкретного листа.
Скажем, у вас есть четыре листа:
В этом случае Worksheets("Sheet3").Index
возвращает 4
, когда реальный индекс равен 3
. Нижняя строка никогда не полагается на свойство Index
коллекции, относящейся к листу, когда дело доходит до обработки всех листов.
Для решения вашей проблемы вам просто нужно использовать коллекцию Sheets
:
Sub FFF()
Dim x%, sheet As Variant
For x = ActiveSheet.Index + 1 To Sheets.Count
Set sheet = Sheets(x)
'// Do something with sheet
Next
End Sub
Единственная реализация скидки с цены, о которой я знаю, который использует фактический синтаксический анализатор, Jon MacFarleane ’s скидка с цены штепселя . Его синтаксический анализатор основан Грамматика, разбирающая выражение парсер-генератор, названный штепсель .
<час>РЕДАКТИРОВАНИЕ: Mauricio Fernandez недавно выпустил его Простой синтаксический анализатор Скидки с цены Разметки , который он записал как часть его механизм OcsiBlog Блога. Поскольку синтаксический анализатор записан в OCaml, это чрезвычайно просто и коротко (268 SLOC для синтаксический анализатор , 43 SLOC для эмиттер HTML ), все же ослепительно быстрый (на 20% быстрее, чем [1 112] скидка (записанный в оптимизированном рукой C) и sixhundred в 1119 раз быстрее, чем [1 113] BlueCloth ( Ruby)), несмотря на то, что он еще даже не оптимизирован для производительности. Поскольку это только предназначается для внутреннего пользования самим Mauricio для его блога, существует несколько отклонений от официальная спецификация Скидки с цены, но Mauricio создал ответвление, которое возвращается большинство тех изменений .
Если бы я должен был попытаться проанализировать скидку с цены (и ее расширение Скидка с цены, дополнительная ), я думаю, что попытался бы использовать конечный автомат и проанализировать его один символ за один раз, соединив некоторые внутренние структуры, представляющие биты текста, поскольку я продвигаюсь тогда, как только все анализируется, генерируя вывод от объектов все струнные вместе.
В основном, я создал бы mini-DOM-like дерево, когда я считал входной файл.
Для генерации вывода я просто пересек бы дерево и произвел бы HTML или что-либо еще (PS, Латекс, RTF...)
Вещи, которые могут увеличить сложность:
то, что можно смешать HTML и скидку с цены, хотя правило могло быть легко реализовать: просто проигнорируйте что-либо, что это между двумя сбалансированными тегами и произвело его дословно.
URL и примечания могут иметь свою ссылку в нижней части текста. Используя структуры данных для гиперссылок мог просто записать что-то как:
[my text to a link][linkkey]
results in a structure like:
URLStructure:
| InnerText : "my text to a link"
| Key : "linkkey"
| URL : <null>
Заголовки могут быть определены с подчеркиванием, которое могло вынудить нас использовать простую структуру данных для универсального абзаца и изменить его свойства, поскольку мы читаем файл:
ParagraphStructure:
| InnerText : the current paragraph text
| (beginning of line until end of line).
| HeadingLevel : <null> or 1-4 when we can assess
| that paragraph heading level, if any.
Так или иначе, просто некоторые мысли.
я уверен, что существует много маленьких деталей для заботы о, и я вполне уверен, что Regexes мог стать удобным во время процесса.
, В конце концов, они были предназначены к тексту процесса.
Я, вероятно, считал спецификацию синтаксиса достаточно раз, чтобы знать это и получить ощущение того, как проанализировать его.
Чтение существующего кода синтаксического анализатора является, конечно, блестящим, и видеть то, что, кажется, основной источник сложности, и если какие-либо специальные умные приемы используются. Использование вычисления контрольной суммы MD5 кажется немного странным, но я не изучил код достаточно для понимания, почему это делается. Комментарий в стандартной программе, названной _EscapeSpecialChars()
состояния:
Мы заменяем каждый такой символ его соответствующим значением контрольной суммы MD5; это - вероятное излишество, но оно должно препятствовать тому, чтобы мы столкнулись со значениями Escape случайно.
Замена отдельного символа полным MD5 действительно кажется экстравагантной, но возможно она действительно имеет смысл.
, Конечно, это было бы умно, чтобы полагать, что создание "истинного" синтаксиса, для инструмента такой как Flex выходит из regex трясины.
Если Perl не является Вашей вещью, существуют реализации Скидки с цены в по крайней мере 10 других языков . Они, вероятно, все не имеют 100%-й совместимости, но имеют тенденцию быть достаточно близкими.
При использовании языка программирования, который имеет больше чем трех других пользователей, необходимо быть в состоянии найти, что библиотека анализирует его для Вас. Быстрый луг Google показывает библиотеки для CL, Haskell, Python, JavaScript, Ruby, и так далее. Очень маловероятно, что необходимо будет заново изобрести это колесо.
, Если действительно необходимо записать это с нуля, я рекомендую писать надлежащий синтаксический анализатор. С этой техникой Вы не должны будете выходить из вещей с хешами MD5. (Я соглашаюсь, что, если необходимо сделать что-то вроде этого, пора пересмотреть дизайн.)
Существуют библиотеки, доступные на многих языках, включая php, рубин, Java, c#, JavaScript. Я предложил бы смотреть на некоторые из них для идей.
Это зависит, на котором языке Вы хотите использовать для лучшего способа реализовать его, там будет идиоматично и не идиоматические способы сделать это.
Regexes работают в жемчуге, потому что жемчуг и regex являются лучшими друзьями.
Здесь можно найти реализацию JavaScript Скидки с цены. Это также полагается в большой степени на регулярные выражения, поскольку это - просто самый быстрый и самый легкий способ проанализировать текст.
, Но это экономит часть MD5.
я не могу помочь непосредственно с кодированием парсинга, но возможно эта ссылка может помочь Вам так или иначе.
Скидка с цены является JAWL (просто другой язык Wiki)
существует много Wiki с открытым исходным кодом там, что можно исследовать код синтаксического анализатора. Большая часть Выезда REGEX
использования screwturn Wiki, имеет интересный многопроходный конвейер средства форматирования, очень хорошая техника - видят/core/Formatter.cs, и/core/FormatterPipeline.cs
Лучше всего должен использовать/присоединяться существующий проект, эти виды вещей всегда намного более тверды, чем они появляются
На прошлой неделе я выпустил новую Java-реализацию Markdown на основе парсера под названием pegdown. pegdown использует парсер PEG для построения абстрактного синтаксического дерева, которое впоследствии записывается в HTML. Как таковой, он довольно чист и гораздо легче читается, поддерживается и расширяется, чем подход, основанный на regex. Грамматика PEG основана на реализации "peg-markdown" Джона Макфарлана на языке Си.
Возможно, вас что-то заинтересует...