В Excel, как мне получить строку кода, чтобы проверить, каково значение выпадающего списка. Затем, как я могу проверить это значение против другого значения - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь создать макрос, который сначала позволит пользователю легко переносить данные на другой лист на основе раскрывающегося списка для выбора месяца. Я хочу, чтобы пользователь мог ввести дату в поле, которое я создал, а затем с помощью кнопок на листе сначала выбрать, какой месяц вставить, а затем подтвердить вставку. У меня есть двенадцать именованных диапазонов от Ref_Jan до Ref_Dec на листе с именем «DB - Ref Monthly». Я работаю над составлением кусочков, но я застрял здесь с моей тестовой программой:

   Sub Button8_Click()


Dim MonthSelector As Range
Dim Ref_May As Range

    If Range("MonthSelector") = Range("Ref_May") Then
            Sheets("DB - Ref Current").Range("Ref_Current").Copy
            Sheets("DB - Ref Monthly").Range("Ref_May").PasteSpecial xlPasteAll

        Application.CutCopyMode = False
        Application.ScreenUpdating = True
    Else
    End If




End Sub

Мой текущий планэто использовать 12 операторов if для ссылки на каждый месяц, так как у меня уже есть часть кода копирования / вставки, работающая на другом листе. Если я все сделаю неправильно, я не возражаю против некоторых указаний. Пожалуйста, дайте мне знать, если я был неясен и могу предоставить дополнительную информацию.

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Предположим, Range("MonthSelector") - это ячейка, которая имеет значение из списка месяцев (январь, февраль, март и т. Д.), И у вас есть соответствующие именованные диапазоны Ref_Jan, Ref_Feb, Ref_Mar,и т.д., вы можете просто сделать это:

Sub Button8_Click()
    Sheets("DB - Ref Current").Range("Ref_Current").Copy
    Sheets("DB - Ref Monthly").Range("Ref_" & Range("MonthSelector").Value).PasteSpecial xlPasteAll

    Application.CutCopyMode = False
    Application.ScreenUpdating = True
End Sub
0 голосов
/ 11 октября 2019

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

Dim arrMonth As New Collection
Dim idx As Integer
Dim val As String

Call arrMonth.Add("Jan")
Call arrMonth.Add("Feb")
Call arrMonth.Add("Mar")
'..etc..
Call arrMonth.Add("Dec")

For idx = 1 To arrMonth.Count
    val = arrMonth.Item(idx)
    Call MsgBox(idx & "=" & val)
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...