Excel VBA — объединение нескольких изменений выбора листа

#excel #vba

#excel #vba

Вопрос:

Я новичок в vba, пытаюсь разобраться в этом для электронной таблицы, над которой я работаю.

У меня есть два кода, которые работают по отдельности, но мне очень трудно их комбинировать. Есть идеи о наилучшем способе их объединения?

Первый код заключается в открытии диалогового окна при нажатии на столбец 18.

Второй код предназначен для выбора нескольких вариантов из выпадающего списка проверки. Взято по этой ссылке:https://trumpexcel.com/select-multiple-items-drop-down-list-excel /

Я также заинтересован в применении второго кода к нескольким столбцам, возможно ли это каким-либо образом?

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 17 Then
        ActiveSheet.Shapes("Rectangle 3").Visible = True
        ActiveSheet.Shapes("Rectangle 2").Visible = True
        ActiveSheet.Shapes("Rectangle 2").TextFrame.Characters.Text = Range("A" amp; (ActiveCell.Row)) amp; " - " amp; Range("B" amp; (ActiveCell.Row))
        With ActiveSheet.Shapes("Rectangle 3")
            .Left = Target.Offset(, 1).Left
            .Top = Target.Offset(0).Top
        End With
        With ActiveSheet.Shapes("Rectangle 2")
            .Left = Target.Offset(0, 2).Left
            .Top = Target.Offset(0, 0).Top
        End With
    Else
        ActiveSheet.Shapes("Rectangle 3").Visible = False
        ActiveSheet.Shapes("Rectangle 2").Visible = False
    End If
End Sub
  
 Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oldvalue As String
Dim Newvalue As String
Application.EnableEvents = True
On Error GoTo Exitsub
If Target.Column = 12 Then
  If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then
    GoTo Exitsub
  Else: If Target.Value = "" Then GoTo Exitsub Else
    Application.EnableEvents = False
    Newvalue = Target.Value
    Application.Undo
    Oldvalue = Target.Value
      If Oldvalue = "" Then
        Target.Value = Newvalue
      Else
        If InStr(1, Oldvalue, Newvalue) = 0 Then
            Target.Value = Oldvalue amp; ";" amp; Newvalue
      Else:
        Target.Value = Oldvalue
      End If
    End If
  End If
End If
Application.EnableEvents = True
Exitsub:
Application.EnableEvents = True
End Sub
  

Заранее спасибо за любую помощь!

Комментарии:

1. Идентичны ли эти два кода? Возьмите это Event и превратите в Sub Procedure . Затем ваш Event просто вызовет ваш Sub Procedure , и вы сможете применить его к любым листам, которые вы хотите

2. Спасибо за ответ. Извините, я вставил неправильный код — исправлено сейчас!