Форма ввода данных в VBA для исследования o - PullRequest
0 голосов
/ 08 июня 2019

Я занимаюсь исследовательским проектом и пытаюсь упростить процесс ввода данных. Хотя теоретически я мог бы просто ввести данные непосредственно в таблицу, я боюсь, что я окажусь в неправильном ряду и в итоге случайно перезаписываю предыдущую запись или просто полностью теряюсь, когда получаю пару сотен строк. В идеале я хотел бы сделать форму, которая будет автоматически заполнять строки Excel. Я бы предпочел сделать это с помощью программного обеспечения, но я не нашел ничего хорошего и пришел к выводу, что мне нужно использовать VBA. Это проблема, так как я не делал никакого кода, кроме нескольких недель HTML в компьютерном лагере, когда я был ребенком. Я впервые отхожу от базовых процессов в Excel (также почему VBA выглядит точно так же, как Office 2003?)

Я хочу, чтобы у меня было несколько стилей ввода данных (свободный ввод, раскрывающийся список, переключатели и чтобы информация по каждому предмету помещалась в отдельную строку. В идеале, я бы также хотел, чтобы некоторые варианты были выделены серым цветом). всю строку (и исключить ее из моих данных), если она удовлетворяет моим критериям исключения. В некоторых случаях я бы также хотел иметь возможность ввести значение и иметь следующий столбец поверх помечать его как «ненормальный», если он выпадает из заданного диапазона, но я могу сделать обе эти вещи вручную, если он становится слишком сложным.

До сих пор моим главным выводом из моих исследований было то, что VBA, похоже, то, что я должен использовать. Я попытался просмотреть несколько разных видео по этой теме, и я в некоторой степени могу создать форму. Моя единственная проблема здесь заключается в том, что я не могу понять, как добавить опции в мои выпадающие списки. Я пытаюсь сделать это, перейдя в «просмотр» «код» и затем введя

Private Sub ComboBox1_Change()
ComboBox1.AddItem([apples],[bananas])
End Sub

Но я получаю "Ошибка компиляции: ожидается =", поэтому, очевидно, я где-то ошибаюсь.

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

Тем не менее, большая проблема здесь, очевидно, заключается в том, чтобы выяснить, как на самом деле я получаю свои данные для отправки на сам лист Excel, чтобы я мог их проанализировать. Я даже не знаю, с чего начать. Пример кода, который я вижу в Интернете, кажется очень отличным от того, что я пытаюсь сделать (для моих неподготовленных глаз) - например, пример на https://www.contextures.com/xlUserForm02.html

У кого-нибудь есть код, который ближе к тому, что я пытаюсь? Я возьму любую помощь, которую смогу получить.

Редактировать: Я нашел в сети какой-то код, который, кажется, соответствует тому, что я пытаюсь сделать (мне все еще нужно выяснить радио-блоки, я могу просто использовать больше выпадающих меню, даже если это больше кликов), но я получаю "ошибка компиляции: элемент уже существует в объектном модуле, из которого этот объект выводится" Я скопировал его отсюда, как указано, а затем отредактировал его, чтобы он соответствовал моим полям, поэтому я не уверен, что пошло не так:

Private Sub problem()
    'Populate control.
    Me.cboClass.AddItem "Amphibian"
    Me.cboClass.AddItem "Bird"
    Me.cboClass.AddItem "Fish"
    Me.cboClass.AddItem "Mammal"
    Me.cboClass.AddItem "Reptile"

End Sub

Private Sub addcase()
    'Copy input values to sheet.
    Dim lRow As Long
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
    With ws
        .Cells(lRow, 1).Value = nmbr
        .Cells(lRow, 2).Value = problem
        .Cells(lRow, 3).Value = age
    End With

    'Clear input controls.
    patientnmbr = ""
    Chiefcomplaint = ""
    agebox = ""


End Sub

Private Sub cmdClose_Click()
    'Close UserForm.
    Unload Me

End Sub

1 Ответ

0 голосов
/ 08 июня 2019

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

Попытайтесь заполнить из других мест (вы обычно начинаете с инициализации пользовательской формы для некоторых основных вещей), возможных других событий (нажатие кнопки, изменение текстового поля, другое изменение комбинированного списка):

Посмотрите, поможет ли это:

Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "one item"
        .AddItem "two items"
        .AddItem "three items"
        .AddItem "more items"
        .AddItem "how many items?!"
    End With
End Sub

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

Что касается того, с чего начать, и более подробной информации, я бы сделал поиск (любой общий поисковик) для Ввод данных VBA Userforms , есть несколько отличных и подробных учебников, которые можно создать из базовых в более сложные формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...