В Excel 2013 я использую список данных (например, rng.Valadation.Type = xlValidateList равен 3)
На листе я создал рабочую формулу
OFFSET(Criteria_Evaluatie;0;1;ROWS(Criteria_Evaluatie);1)
Используя VBA, я закодировал
txtFormula = "OFFSET(Criteria_Evaluatie;0;1;ROWS(Criteria_Evaluatie);1)"
rng.Validation.Add xlValidateList, xlValidAlertStop, xlBetween, txtFormula
вызывая ошибку при отладке
Я обнаружил, что:
a) Ввод (OFFSET (nameCriteria; 0; 1; ROWS (nameCriteria); 1) ТРЕБУЕТСЯ при вводе источника в EXCEL - Окно проверки данных
b), но СБОИ при вводе с использованием VBA (заботятся о конкатенации)
c) Использование: txtFormula = "= OFFSET (" & nameCriteria & ", 0,1, ROWS (" & nameCriteria & "), 1)" из VBA работает
d), а ',' будет автоматически преобразовано в ';' EXCEL - окно проверки данных!
txtFormula = "=OFFSET(" & nameCriteria & ",0,1,ROWS(" & nameCriteria & "),1)"
работает из VBA, но НЕ, если введено в поле Проверка данных - источник
при извлечении формулы из VBA с использованием
txtSource = rng.Validation.Formula1
OFFSET (Criteria_Evaluatie; 0; 1; ROWS (Criteria_Evaluat ie); 1) будет получено, но это не может быть использовано в
set rng = Range(txtSource)
Мне нужно преобразовать это обратно в OFFSET (Criteria_Evaluat * 1045) *, 0,1, ROWS (Criteria_Evaluat ie), 1) перед использованием его в качестве ссылки в формуле.
Поэтому я пришел к выводу, что мне нужно проверить XlApplicationInternational и преобразовать разделители, если я хочу используйте формулы в VBA.
Конечно, я могу использовать
txtsource = Replace(txtSource, Application.International(xlListSeparator), ",")
и
txtsource = Replace(txtSource, ",", Application.International(xlListSeparator))
, но это МОЖЕТ вызвать проблемы, если "," использовался как часть текст в кавычках в формуле (например, «Мне нравится ходить, ездить на велосипеде и читать»)
Поэтому мой вопрос заключается в том, как обеспечить, чтобы ТОЛЬКО необходимые замены были сделаны?