Excel — обновление и проверка данных из SQL (VBA)

Я использую офис 2013 и SQLServer 2008 R2. У меня есть процедура Excel VBA, которая вставляет список комиссий за продажи в базу данных. Один из столбцов — SalesRepID, который явно должен быть действительным. Когда это было написано, у нас была довольно статичная команда по продажам, но с тех пор мы приобрели две другие компании, которые занимаются менее специализированной работой, так что сейчас в отделе продаж произошли небольшие изменения.

Текущие методы имеют список торговых представителей и имен в отсортированном именованном диапазоне, который затем используется в качестве критерия проверки: пользователю предоставляется список торговых представителей в раскрывающемся списке в Excel, и когда они выбирают один, он использует VLookup для вставки SalesRepID в скрытой ячейке. Затем это используется в операции вставки.

Что я хочу сделать сейчас, так это дать пользователям кнопку обновления (и в идеале запускать обновление при открытии). Некоторые биллеры работают дома по выходным, поэтому это должно работать в автономном режиме (очевидно, если новый представитель добавлен и они не обновились, они не увидят нового представителя).

Я не хочу определять что-либо вроде источников ODBC на физической машине пользователя.

Я пытаюсь найти способ решить эту проблему. Один из способов — добавить кнопку обновления, которая будет выполнять запрос, вставить текущий список торговых представителей и обновить диапазон (или использовать динамический диапазон), чтобы он соответствовал текущему количеству возвращенных записей. (Я предполагаю, что могу обновить адрес именованного диапазона или динамический диапазон будет обновляться, если данные будут вставлены из SQL-запроса)

Например:

Начальный диапазон

1 Tom
2 Dick
3 Harry

Диапазон торговых представителей = A1:B3

User Hits Refresh: Удаляет содержимое старых диапазонов. вставить новый список

Новый диапазон

1 Tom
2 Dick
3 Harry
4 Fred

Диапазон торговых представителей = A1:B4

Может ли кто-нибудь придумать лучший способ для этого?

С Уважением

Отметка


person mark1234    schedule 02.03.2015    source источник
comment
Что ты сделал до сих пор?   -  person Maciej Los    schedule 02.03.2015


Ответы (1)


Попробуйте это для вашего динамического диапазона

Dim LastRow as integer
    LastRow = Sheets("yoursheet").Cells(Rows.Count, "A").End(xlUp).Row

    Range("A1:B" & LastRow).name = "SalesReps"

Код работает немного неинтуитивно. Cells(Rows.Count, "A") находит самую последнюю ячейку на листе в столбце A (строка 1048576 или что-то в этом роде).

End(xlUp).Row эквивалентен нажатию Ctrl+Up из этой ячейки и возврату номера строки первой ячейки, содержащей информацию.

person JS1991    schedule 02.03.2015
comment
Большое спасибо. Работал отлично, но не уверен, что понимаю, почему. Мой начальный диапазон I6:J6. Очевидно, я изменил ссылки в вашем примере, чтобы они соответствовали моему диапазону, но не уверен насчет xlUp. Я бы подумал, что начинать с первой строки и использовать xlDown было бы решением. Ваш пример начинается с конца всего листа и смотрит оттуда вверх? Просто пытаюсь понять. Спасибо Марк - person mark1234; 02.03.2015