#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)