1 (изменено: inseption86, 2018-09-17 17:28:26)

Тема: Personal.xlsb на несколько определенных книг

Добрый день! Подскажите, пож-та, возможно ли  использование этого кода в нескольких книгах ? Заранее спасибо!

Dim WithEvents App As Application
  
Private Sub Workbook_Open()
  Set App = Application
End Sub
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' только в определенном файле
  If Sh.Parent.Name <> "1.xlsx" Then Exit Sub
On Error Resume Next
    If Target.Count > 1 Then Exit Sub
    ' запрет на ввод русских букв в столбце 3  (фио на англ)
    If Target.Column = 3 Then
        If Target Like "*[А-Яа-яЁё]*" Then
            ' если есть хоть одна русская буква
            MsgBox "Ввод русских букв недопустим!", vbCritical
            Target.Value = ""        ' очистка ячейки
       End If
    End If
     
    If Target.Column = 2 Then
        If Target Like "*[A-Za-zEe]*" Then
            ' если есть хоть одна англ буква
            MsgBox "Ввод английских букв недопустим!", vbCritical
            Target.Value = ""        ' очистка ячейки
       End If
    End If
End Sub

If Sh.Parent.Name <> "1.xlsx" or Sh.Parent.Name <> "2.xlsx" Then Exit Sub

- код не работает ни в одной из книг

2

Re: Personal.xlsb на несколько определенных книг

If Sh.Parent.Name = "1.xlsx" Or Sh.Parent.Name = "2.xlsx" Then
Else
 Exit Sub
 End If

3 (изменено: alexii, 2018-09-17 18:16:05)

Re: Personal.xlsb на несколько определенных книг

inseption86 пишет:

- код не работает ни в одной из книг

Что значит «не работает»? Что Вы хотели получить этим кодом? Смотрите, имя не может быть одновременно и "1.xlsx", и "2.xlsx", правильно? Рассмотрим три варианта:

1. Имя == "1.xlsx". Тогда Sh.Parent.Name <> "1.xlsx" — ложно, Sh.Parent.Name <> "2.xlsx" — истинно. Ложь ИЛИ Истина ==> Истина, выход из процедуры.

2. Имя == "2.xlsx". Тогда Sh.Parent.Name <> "1.xlsx" — истинно, Sh.Parent.Name <> "2.xlsx" — ложно. Истина ИЛИ Ложь ==> Истина, выход из процедуры.

3. Имя == чему-либо ещё. Тогда Sh.Parent.Name <> "1.xlsx" — истинно, Sh.Parent.Name <> "2.xlsx" — истинно. Истина ИЛИ Истина ==> Истина, выход из процедуры.

Таким образом, какое бы ни было имя — с таким кодом всегда будет происходить выход из процедуры.


Полагаю, Вы хотели получить нечто наподобие:

    If Not (Sh.Parent.Name = "1.xlsx" Or Sh.Parent.Name = "2.xlsx") Then
        Exit Sub
    End If

или:

    If Sh.Parent.Name <> "1.xlsx" And Sh.Parent.Name <> "2.xlsx") Then
        Exit Sub
    End If

или, для большей наглядности:

    Select Case Sh.Parent.Name
        Case "1.xlsx", "2.xlsx"
            ' Nothing to do
        Case Else
            Exit Sub
    End Select

4

Re: Personal.xlsb на несколько определенных книг

alexii

Спасибо большое, уже разобрался