Как добавить элемент в комбинированный список (используя AddItem ()), который содержит точку с запятой? - PullRequest
2 голосов
/ 03 октября 2019

У меня есть многоколонный выпадающий список в форме доступа (Access 2019 x64, если это имеет значение), и я хотел бы использовать его метод AddItem(), чтобы заполнить его, как описано в этой документации . Цитируя это:

Для списков из нескольких столбцов используйте точки с запятой для разделения строк для каждого столбца (например, «1010; красный; большой» для списка из трех столбцов). Если аргумент Item содержит меньше строк, чем столбцов в элементе управления, элементы будут добавлены, начиная с самого левого столбца. Если аргумент Item содержит больше строк, чем столбцов в элементе управления, дополнительные строки игнорируются.

То есть невозможно добавить строку для определенного столбца, если сама строка уже содержит точку с запятой?

Ответы [ 2 ]

3 голосов
/ 03 октября 2019

Окружите значение столбца, который содержит точку с запятой с двойными кавычками, например:

AddItem """Column1;A"";Column2;Column3"

Получит:

+-----------+---------+---------+
| Column1;A | Column2 | Column3 |
+-----------+---------+---------+
0 голосов
/ 03 октября 2019

Все кредиты принадлежат @Lee Mac, который полностью ответил на мой первоначальный вопрос. Однако ответ немедленно поднял вопрос о том, как мы должны обращаться со строками, в которых уже есть кавычки.

Поэтому я написал следующую функцию в VBA, которая, кажется, полностью решает проблему. Комментарии должны быть самоочевидными. Пожалуйста, прокомментируйте, если найдете ошибку.

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

'Notes:
'
'The following function quotes an arbitrary string so that it can be
'used as part of the parameter to the ComboBox.AddItem() method.
'Writing that function was necessary because there is no easy way to
'use strings which already contain the ; character as part of that
'parameter, or which even contain the ; character as well as double
'quotes; see also Microsoft's documentation.
'
'To construct the parameter for the AddItem() method, the following
'must be done:
'
'For EACH column, the source string must be quoted using the following
'function. Then, all QUOTED strings must be concatenated, separating
'them only by one ; character.
'
'Successfully tested 2019-10-03 in Access 2019 / 64-bit / VBA with a
'standard combobox on a form.

Public Function QuoteStringForValueList(sString As String) As String

  Dim sTemp As String, sDDQ As String

  'String containing two double quotes to make reading easier
  sDDQ = Chr(34) & Chr(34)

  'Replace each double quote by four double quotes
  sTemp = Replace(sString, Chr(34), sDDQ & sDDQ)

  'Add two leading and two trailing double quotes
  QuoteStringForValueList = sDDQ & sTemp & sDDQ

End Function
...