Параметры поля со списком, основанные на другом поле со списком (не пользовательская форма) - Макрос, застрявший код - PullRequest
0 голосов
/ 12 марта 2020

У меня есть 2 ComboBox, я использовал опцию ControlForm для их создания.

FIG1

Первый ComboBox имеет 6 опций, из которых можно выбрать, а второй имеет 2 варианта на выбор. У меня есть зеленая кнопка «ir», и ей назначен макрос. Этот макрос просматривает параметры, выбранные в обоих комбинированных списках «вектор (x, y)», и отправляет пользователя на соответствующий лист.

FIG2

Макрос использует выражение " For .. Next * " для просмотра результата вектора и запускает SheetX .select функция. Мой макрос работает очень хорошо, но внезапно он имеет ошибку. Я нашел способ ее решить, но для меня это решение не имеет смысла.

Проблема: Код должен посмотреть на вектор и перенести меня на соответствующий лист. Он отлично работает, даже если я закрываю книгу или использую ее много раз, но вдруг он начинает отправлять меня на тот же лист, и не имеет значения для текущего вектора, который у меня есть, почти как если бы код застрял на первой линии. Если у меня есть вектор (6,1), он отправляет меня на лист вектора (1,1), и это происходит со всеми векторами.

Решение:

Код снова работает хорошо, если я измените связанную ячейку обоих ComboBox.

FIG4

Только с этой модификацией проблема решена, но я не понимаю почему, и я не Я думаю, что это способ решить эту проблему, потому что в данный момент у меня есть больше кода, и я не могу продолжать изменять все связанные ячейки, когда появляется эта ошибка. Я думаю, что проблема может быть связана с " For .. Следующее утверждение " Честно говоря, у меня есть базовые c знания в области программирования, я использую код из разных источников, таких как это сообщество.

Спасибо за ваше внимание и поддержку.

С уважением!

КОД :

'HOJAS DE VIDA CUSIANA
Sub cushvtc()
 Application.ScreenUpdating = False

 Dim wSheet2 As Worksheet
      For Each wSheet2 In Worksheets
        If wSheet2.Range("O31") = "1" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.MP1.T").Select
        ElseIf wSheet2.Range("O31") = "1" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.MP1.GB").Select
        ElseIf wSheet2.Range("O31") = "2" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.HP1.T").Select
        ElseIf wSheet2.Range("O31") = "2" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.HP1.GB").Select
        ElseIf wSheet2.Range("O31") = "3" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.MP2.T").Select
        ElseIf wSheet2.Range("O31") = "3" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.MP2.GB").Select
        ElseIf wSheet2.Range("O31") = "4" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.HP2.T").Select
        ElseIf wSheet2.Range("O31") = "4" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.HP2.GB").Select
        ElseIf wSheet2.Range("O31") = "5" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.MP3.T").Select
        ElseIf wSheet2.Range("O31") = "5" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.MP3.GB").Select
        ElseIf wSheet2.Range("O31") = "6" And wSheet2.Range("P31") = "1" Then
        Sheets("HV.TC.CUS.HP3.T").Select
        ElseIf wSheet2.Range("O31") = "6" And wSheet2.Range("P31") = "2" Then
        Sheets("HV.TC.CUS.HP3.GB").Select
        End If
     Next wSheet2
End Sub

ОБНОВЛЕНИЕ:

Я нашел решение, я удалил For..Next оператор , и я использую ActiveSheet . Код работает отлично, но я все еще сомневаюсь, почему For..Next оператор был неверным. Я знаю, что может быть гораздо лучше написать этот код, но я не профессионал, ¿Как бы вы написали этот код более эффективным способом?

     'HOJAS DE VIDA CUSIANA
Sub cushvtc()

      If ActiveSheet.Range("O32") = "1" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.MP1.T").Select
        ElseIf ActiveSheet.Range("O32") = "1" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.MP1.GB").Select
        ElseIf ActiveSheet.Range("O32") = "2" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.HP1.T").Select
        ElseIf ActiveSheet.Range("O32") = "2" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.HP1.GB").Select
        ElseIf ActiveSheet.Range("O32") = "3" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.MP2.T").Select
        ElseIf ActiveSheet.Range("O32") = "3" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.MP2.GB").Select
        ElseIf ActiveSheet.Range("O32") = "4" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.HP2.T").Select
        ElseIf ActiveSheet.Range("O32") = "4" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.HP2.GB").Select
        ElseIf ActiveSheet.Range("O32") = "5" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.MP3.T").Select
        ElseIf ActiveSheet.Range("O32") = "5" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.MP3.GB").Select
        ElseIf ActiveSheet.Range("O32") = "6" And ActiveSheet.Range("P32") = "1" Then
        Sheets("HV.TC.CUS.HP3.T").Select
        ElseIf ActiveSheet.Range("O32") = "6" And ActiveSheet.Range("P32") = "2" Then
        Sheets("HV.TC.CUS.HP3.GB").Select
        End If

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