VBA - Значения ячеек листа не обновляются в событии изменения рабочего листа - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь получить ссылку на ячейку с другого листа, относящуюся к имени в строке E ... У меня работает функция вставки, работает функция копирования листа и все такое. НО - у меня есть «НЕПРАВИЛЬНЫЕ» формулы для заблокированных ячеек на wsMASTER, ссылающиеся на ячейки «shtNAME» - я хочу, чтобы ячейки на wsMASTER обновлялись информацией из листа с динамическим «shtNAME» ... Надеюсь, это объясняет это а кто-то может помочь ??

wsMASTER - кнопка для добавления новой строки и копирования листа с заданным значением InputBox ....

Private Sub NewServer_Click()

Dim shtName As String, ws As Worksheet
Dim wsMASTER As Worksheet, wsTEMP As Worksheet, wsGENERAL As Worksheet
Dim shNAMES As Range, nmANCHOR As Range
Dim eRow As Long, wasVISIBLE As Boolean
Dim shANCHOR As Range
    'Get name for new sheet
With ThisWorkbook
    Set wsMASTER = .Sheets("Main")
    Set wsTEMP = .Sheets("ServerTemplate")
    Set nmANCHOR = wsMASTER.Range("E10:E" & Rows.Count).End(xlUp).Offset(1)
'set ServerTemplate to visible
    wasVISIBLE = (wsTEMP.Visible = xlSheetVisible)
    If Not wasVISIBLE Then wsTEMP.Visible = xlSheetVisible
'Turn off updates, alerts and events
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
    End With
'prompt for user to enter new server name
    wsMASTER.Unprotect Password:="J786djh$"
    Do
        wsMASTER.Activate
        shtName = Application.InputBox("Please enter the hostname of the new server..." & vbCrLf & vbCrLf & _
                 "Click Cancel To Quit", "Define Hostname", Type:=2)
                 If shtName = "False" Then Exit Sub
        'Check for existing sheet name
        Set ws = Nothing
        On Error Resume Next
        'set variable to input name
            Set ws = Sheets(shtName)
        On Error GoTo 0
        If ws Is Nothing Then Exit Do
        'incorrect input alert
        MsgBox "Please try again, ensuring no spaces are used in the new server name.", vbExclamation, "Name Exists"
    Loop

'add new row with input value
        eRow = wsMASTER.Range("E" & Rows.Count).End(xlUp).Row + 1
        wsMASTER.Cells(eRow, "E").Value = shtName
'add worksheet and rename it
        wsTEMP.Copy After:=Worksheets(Sheets.Count)
        ActiveSheet.Name = shtName
'Create hyperlink
        Set shANCHOR = wsMASTER.Range("E" & Rows.Count).End(xlUp)
            wsMASTER.Hyperlinks.Add anchor:=shANCHOR, Address:="", SubAddress:="'" & shtName & "'!A1", TextToDisplay:=shtName
'delete any copies of the Server Template
        For Each wsGENERAL In ThisWorkbook.Worksheets
        If wsGENERAL.Name = "ServerTemplate(1)" Then
            wsGENERAL.Delete
        End If
        Next wsGENERAL
'back to Main Sheet
wsMASTER.Activate
're-enable screen updating
    'Turn off updates, alerts and events
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
    End With
wsMASTER.Protect Password:="J786djh$"
End With
'set ServerTemplate to hidden
        If wasVISIBLE Then wsTEMP.Visible = xlSheetHidden Else: If Not wasVISIBLE Then wsTEMP.Visible = xlSheetHidden

End Sub

wsMASTER - формула, ссылающаяся на ячейки на скопированном листе wsTEMP. E67 - линия, на которой находится формула.

=IF(E67="","",IF(INDIRECT(E67 & "!B93" )="","",IF(INDIRECT(E67 & "!B93" )="Yes","Yes","No")))

Функция shtNAME (динамическая) WorkSheetChange ...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim wsMASTER As Worksheet, wsTEMP As Worksheet
With ThisWorkbook
Set wsMASTER = .Sheets("Main")
Set wsTEMP = .Sheets("ServerTemplate")
Target = wsTEMP
wsMASTER.Unprotect Password:="J786djh$"
With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
    End With
    wsTEMP.Unprotect Password:="J786djh$"
    ActiveSheet.Calculate
    wsMASTER.Calculate
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .EnableEvents = True
    End With
    wsTEMP.Protect Password:="J786djh$"
wsMASTER.Protect Password:="J786djh$"
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...