Я пытаюсь разработать приложение для Excel, которое запрашивает информацию в нашей базе данных 4D. Для этого я построил построитель запросов, и он работает. Теперь я хочу сделать его более общим, чтобы при вызове построителя запросов я мог передать ему диапазон, в котором хранятся таблицы и поля, на которых основан запрос. Вот строка, где я вызываю подпрограмму и передаю ей параметры:
QueryDatabase Worksheets("TablesAndFields").Range("A2:R20"), Worksheets("TablesAndFields"), Worksheets("Import")
Вот первая строка в подпункте:
Sub QueryDatabase(QuerySpecs As Range, QuerySheet As Worksheet, TargetSheet As Worksheet)
Одна из вещей, которые мне нужно сделать, - это чтобы VBA вычислил ряд последних полей в различных столбцах. Вот мой текущий код:
LastRowReportTables = QuerySpecs.Offset(0, 3).End(xlDown).Row
LastRowQuery = QuerySpecs.Offset(0, 6).End(xlDown).Row
LastRowSort = QuerySpecs.Offset(0, 14).End(xlDown).Row
Возвращает одинаковое значение для всех 3 из них (вторая строка диапазона). Кажется, это происходит независимо от того, в каких ячейках есть значения. Например, в случае указанного выше диапазона он вернет 3. Если диапазон равен «A22: R40», он возвращает 23. Что мне действительно нужно, так это чтобы он возвратил строку относительно своей позиции в диапазоне, но я может подделать это, если необходимо, вычитая наибольшее кратное 20 меньше, чем результат. (Я форматирую свой построитель запросов, чтобы он поместился в 19 строк + строку буфера.) До сих пор я даже не смог заставить его возвращать разные результаты для переменных LastRow.
В дополнение к методу смещения, который вы видите выше, я также попытался поместить его в блок With QuerySpecs ... End With. Я не помню точный результат, но я не мог заставить это работать.
Следующее, что мне нужно будет сделать, это вытащить значения из различных ячеек вроде этого:
strStartCell = QuerySpecs.Offset(0, 18).Value
Это приводит к ошибке времени выполнения 13: Несоответствие типов. Кто-нибудь есть какие-либо советы о том, как достичь моих целей? Спасибо вам!