Я думаю, что так оно и есть. К сожалению, любой, за которым не следует {, расколоет строку, но я смогу их восстановить позже. Меня обманывает одинаковый приоритет правил и жадность регулярных выражений.
/[^"~]+/
все, что не является или «(регулярная строка)
"~{" expression "}"
, нормальное выражение
/~(?!{)/
handle ~ без {. use? !, потому что мы не должны потреблять следующий символ (это может быть "или другое ~)
from lark import Lark
print (Lark(r"""
string: "\"" string_thing* "\""
string_thing: /[^"~]+/
| "~{" expression "}"
| /~(?!{)/
expression: /[^}]+/
""", start='string', ambiguity="explicit").parse(
# '"a"'
'"a~b{}c}d~{1}g"'
# '"~abc~"'
# '"~{1}~~{1}~~~{1}"'
).pretty())
Переменная x1
не объявлена. Поэтому это должен быть вариант. Похоже, что [myCar]
подразумевается как имя диапазона. Если это так, можно было бы присвоить его x1
, если бы его местоположение было известно. Возможно, ваш TextBox находится на рабочем листе, и ссылка на самом деле работает. Возможно, x1
пусто с этого момента. Я предлагаю вам проверить.
Затем вы назначаете «MyCar» свойству RowSource в ListBox. Как вы знаете, это свойство содержит строку. Если MyCar
является именем ранга, он не может быть действительным адресом диапазона. Возможно, что-то вроде Range(MyCar).Address
подойдет. .RowSource = "myCar"
просто назначает слово «MyCar» для RowSource, и это должно дать сбой. В For i = 1 To UBound(x1, 1)
вы теперь ожидаете, что x1
будет массивом. Возможно, x1 = [myCar]
эквивалентно ActiveSheet.Range(MyCar).Value
. Я бы не использовал этот синтаксис, но вы проверили его функциональность выше.
Предполагается, что x1
действительно содержит значения диапазона. назначить их свойству List в ListBox не удастся, если свойство ColumnsCount не установлено. Это не видно из вашего кода. Мы также не можем сказать, равны ли столбцы, доступные в x1, столбцам, доступным в списке, или столбцам, требуемым кодом.
ListBox имеет строки и столбцы. Учитывая, что ваша переменная i считает строки, ваша переменная ii должна считать столбцы (я бы использовал R и C, чтобы помочь мне следить за тем, что я делаю). Затем, с учетом всех строк и столбцов, на что рассчитывает ваша переменная iii?
Итак, совершенно очевидно, что в вашем коде недостаточно контроля над строками и столбцами ListBox. Однако после сортировки вы можете обнаружить, что значения, которые вы хотите присвоить, не существуют. Поэтому строка, которая вылетает из вашей программы, может содержать более одной ошибки.