Как сослаться на лист excel по переменной

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

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

    Dim DestWS1 As Worksheet
    Dim InputValue As Integer
    InputValue = InputBox("Please enter your month index number", "Selecting month index to generate your report")
    
    ' Print the name of the airport to the Immediate Window(Ctrl + G)

        Dim MonthIndexResult As String
        
        MonthIndexResult = _
        "=LOOKUP(" & InputValue & ",InputData!R3C17:R14C17,InputData!R3C16:R14C16)"

Set DestWS1 = ThisWorkbook.Sheets(" & MonthIndexResult & ")
DestWS1.Select

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

Рассматривали ли вы функцию косвенного() - строит рабочую ссылку из текста и ссылки на ячейку. Много примеров здесь.

Solar Mike 16.02.2023 14:09
MonthIndexResult = Format(DateSerial(Year(Date), Inputvalue, 1), "mmm")
CDP1802 16.02.2023 14:24
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Похоже, вы хотите оценить формулу в своем коде и прочитать ее вывод в переменную, а затем использовать эту переменную в качестве имени листа? Если да, то попробуйте следующее:

    Dim DestWS1 As Worksheet
    Dim InputValue As Integer
    InputValue = InputBox("Please enter your month index number", "Selecting month index to generate your report")
    
    ' Print the name of the airport to the Immediate Window(Ctrl + G)

        Dim MonthIndexResult As String
        
        ' MonthIndexResult = _
        ' "=LOOKUP(" & InputValue & ",InputData!R3C17:R14C17,InputData!R3C16:R14C16)"
        MonthIndexResult = Application.Evaluate("=LOOKUP(" & InputValue & ",InputData!R3C17:R14C17,InputData!R3C16:R14C16)")

Set DestWS1 = ThisWorkbook.Sheets(MonthIndexResult)
DestWS1.Select

Подробнее об этом методе можно узнать здесь: Метод Application.Evaluate (Excel)

К сожалению, это не сработало со мной

Mostafa Nabil 17.02.2023 17:29
Ответ принят как подходящий

Определить рабочий лист по частичному имени

Sub SelectByMonth()

    Dim InputString As String
    InputString = InputBox("Please enter your month index number", _
        "Selecting month index to generate your report")
    If Len(InputString) = 0 Then Exit Sub ' no input
    
    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = wb.Sheets("InputData")
    Dim slrg As Range: Set slrg = sws.Range("Q3:Q14")
    Dim srrg As Range: Set srrg = sws.Range("P3:P14")
    
    Dim srIndex As Variant
    srIndex = Application.Match(CLng(InputString), slrg, 0)
    If IsError(srIndex) Then Exit Sub ' month (number) not found
    Dim sMonth As String: sMonth = srrg.Cells(srIndex)
    
    Dim dws As Worksheet
    
    For Each dws In wb.Worksheets
        If InStr(1, dws.Name, sMonth, vbTextCompare) > 0 Then Exit For
    Next dws
    
    If dws Is Nothing Then Exit Sub ' worksheet not foundd
    
    If Not wb Is ActiveWorkbook Then wb.Activate
    
    dws.Select

End Sub

Другие вопросы по теме