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