У меня есть 2 ComboBox, я использовал опцию ControlForm
для их создания.
Первый ComboBox имеет 6 опций, из которых можно выбрать, а второй имеет 2 варианта на выбор. У меня есть зеленая кнопка «ir», и ей назначен макрос. Этот макрос просматривает параметры, выбранные в обоих комбинированных списках «вектор (x, y)», и отправляет пользователя на соответствующий лист.
Макрос использует выражение " For .. Next * " для просмотра результата вектора и запускает SheetX .select функция. Мой макрос работает очень хорошо, но внезапно он имеет ошибку. Я нашел способ ее решить, но для меня это решение не имеет смысла.
Проблема: Код должен посмотреть на вектор и перенести меня на соответствующий лист. Он отлично работает, даже если я закрываю книгу или использую ее много раз, но вдруг он начинает отправлять меня на тот же лист, и не имеет значения для текущего вектора, который у меня есть, почти как если бы код застрял на первой линии. Если у меня есть вектор (6,1), он отправляет меня на лист вектора (1,1), и это происходит со всеми векторами.
Решение:
Код снова работает хорошо, если я измените связанную ячейку обоих ComboBox.
Только с этой модификацией проблема решена, но я не понимаю почему, и я не Я думаю, что это способ решить эту проблему, потому что в данный момент у меня есть больше кода, и я не могу продолжать изменять все связанные ячейки, когда появляется эта ошибка. Я думаю, что проблема может быть связана с " 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