Форма пользователя VBA Редактирование записи с использованием динамического диапазона имен с номерами

#excel #vba #edit #userform

Вопрос:

Давний пользователь, первый пост. У меня проблема с формой РЕДАКТИРОВАНИЯ пользователя в Excel. У меня есть форма пользователя, которая позволяет вводить информацию о проектах в базу данных, которая отлично работает. Каждая запись добавляется в нижнюю часть таблицы. Это выглядит так:

Небольшая выборка базы данных

И так далее. Каждый проект уникален, но имена клиентов, менеджер по работе с клиентами и менеджер проекта могут повторяться, поэтому мне нужно использовать идентификатор проекта для выбора пользователем при редактировании.

Я хочу, чтобы кнопка «РЕДАКТИРОВАТЬ проект» просила пользователя выбрать идентификатор проекта, который он хочет отредактировать. У меня есть динамический диапазон, который использует комбинация. Я пытаюсь проверить, правильно ли работает комбинация. Я следую учебнику на YouTube. Учебник в основном проверяет, используя поле msg, чтобы вернуть значение, выбранное пользователем. Я продолжаю получать ошибку времени выполнения 1004, не могу найти функцию соответствия при использовании Application.WorksheetsFunction.Match . Если я достану WorksheetsFuction и просто сделаю Application.Match , я получу ошибку несоответствия типов данных. Я прочитал комментарий, где кто-то сказал, что они изменили переменную targetrow на двойную от целого числа, и это сработало, но это не работает для меня. У кого — нибудь есть какие-нибудь идеи?

Прямо сейчас код:

 Private Sub EditProjectButton_Click()


Dim TargetRow As Integer

TargetRow = Application.Match(ProjectLineDropDown, Sheets("MetricsTracking").Range("Menu_Control"), 0)

MsgBox TargetRow
 

ProjectLineDropDown это имя поля со списком, в которое пользователь вводит идентификатор проекта, который он хочет изменить. Это поле со списком работает так, как показано только 1-сколько бы проектов ни было. Это основано на именованном диапазоне Menu_Control , который использует команду offset и формулу , вычисляющую количество строк с данными.

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

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

https://www.youtube.com/watch?v=qKf0Gbn0N5Y

Любая помощь будет признательна!

Комментарии:

1. Команды VBA и команды формулы ячейки-это не одно и то же. Вам нужно будет включить функцию WorksheetFunction, чтобы сообщить VBA, чтобы она рассматривалась как формула ячейки. Кроме того, в своем вопросе вы указываете «Функция рабочих листов», и это должно быть «Функция рабочих листов».

2. Спасибо, я только что это увидел и думаю, что случайно добавил букву «с». Я использовал функцию WorksheetFunction и получил ошибку: ошибка во время выполнения «1004» Не удалось получить свойство соответствия класса WorksheetFunction

3. Что такое ProjectLineDropDown ? Application.Match вернет либо индекс (позицию) найденного элемента, либо значение ошибки, если ничего не найдено. Поэтому вы должны объявить его As Variant , а затем проверить результат с IsError помощью или IsNumeric , например If IsNumeric(TargetRow) Then MsgBox TargetRow Else MsgBox "No match."

4. Спасибо @VBasic2008! Я последовал вашей логике для тестирования и понял, что форма пользователя не передавала выпадающее число в виде целого числа, потому что я получил ошибку «Нет совпадения». Я изменил переменную TargetRow обратно на целое число и добавил CInt в формулу, и это сработало! TargetRow = Приложение. Функция рабочего листа. Совпадение(CInt(ProjectLineDropDown), Листы(«Метрика»). Диапазон(«Menu_Control»), 0)