У меня есть несколько вещей, которых я хочу достичь, используя 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