Ошибка компиляции при использовании разных кодов VBA в одном окне - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть несколько вещей, которых я хочу достичь, используя VBA на определенном листе.

1) При появлении определенного условия появляется окно с 3 кнопками.

2 ) Отобразите адрес активной ячейки в указанной ячейке c.

3) При нажатии Enter после ввода данных только для пустых ячеек в определенном столбце, переведите курсор на другой столбец в той же строке.

(коды для каждого из них находятся в конце поста)

У меня есть код для выполнения всех трех этих вещей, и все они отлично работают сами по себе, на самом деле коды для предметов 1 и 2 также отлично работают вместе, но когда я добавляю код для элемента 3, появляется сообщение с сообщением «Ошибка компиляции: обнаружено неоднозначное имя: Worksheet_SelectionChange», и статья с ошибками в окне кода также выделяется.

Я заметил, что код для элементов 2 и 3 имеет заголовок "Private Sub Worksheet_SelectionChange (ByVal Target As Range)"

Если я удаляю код для элемента 2, то я сталкиваюсь с другим окном сообщения «Ошибка компиляции: после End Sub, End Function или End Property могут появляться только комментарии» и выделяются слова «Option Explicit» в окне кода. Это также, кажется, нарушает код для пункта 1.

Я подозреваю, что проблема заключается в том, что у меня есть два набора кода в одном окне с одним и тем же заголовком. Есть ли способ для меня, чтобы "смешать" их так, чтобы они хорошо играли друг с другом?

**---CODE FOR ITEM 1---**

Private Sub Worksheet_Calculate()
Dim r As Range
For Each r In Range("L:L")
    If r.Value < 0 Then
result = MsgBox("You do not have enough stock to fulfil this request" & vbNewLine & vbNewLine & vbNewLine & _
    "Please click: -" & vbNewLine & vbNewLine & _
    "    -Abort to order more stock" & vbNewLine & _
    "    -Retry to enter a different value" & vbNewLine & _
    "    -Ignore to receive stock", _
 _
vbAbortRetryIgnore + vbDefaultButton2 + vbExclamation, "Negative Stock Level Warning")
End If
Next r

If result = vbAbort Then
MsgBox "Opening web browser", vbOKOnly + vbInformation, "New program warning!"
ActiveWorkbook.FollowHyperlink _
      Address:="https://uk.rs-online.com/login", _
      NewWindow:=True
End If

If result = vbRetry Then
MsgBox "Please enter a smaller parts count value", vbOKOnly + vbInformation, "Parts Count Input"
ActiveCell.Offset(-1, 0).Select
End If


If result = vbIgnore Then
MsgBox "You will now be directed to the Goods In window", vbOKOnly + vbInformation, "Receive Stock"
Sheets("Goods In").Activate
End If

End Sub

--- КОД ДЛЯ ПУНКТА 2 ---

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Range("A1048575") = ActiveCell.Address

End Sub

--- КОД ДЛЯ ПУНКТА 3 ---

   Option Explicit

    Dim emptyCell As Boolean

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.CountLarge > 1 Then Exit Sub ' don't bother with multicell selections
        If Cells(1, Target.Column).Value <> "S.I.#" Then Exit Sub ' don't bother with selections outside "S.I.#" column
        If emptyCell And Not IsEmpty(Target.Value) Then Cells(Target.Row, Range("A1", Cells(1, Columns.Count).End(xlToLeft)).Find(what:="Count", _
        LookIn:=xlValues, lookat:=xlWhole).Column).Select ' if current cell was empty and now it is not then skip to "Count" column same row
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        emptyCell = IsEmpty(Target.Value) ' store the info about current selection being empty
    End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...