У меня есть некоторый код, который копирует данные из одного мастер-файла в другой, а затем удаляет именованные диапазоны и воссоздает их на основе мастер-файла (не смог найти лучшего способа сделать это). Проблема в том, что, если я запускаю код один раз, копии данных и все именованные диапазоны удаляются ТОЛЬКО. Если я запускаю его второй раз, именованные диапазоны создаются. Есть идеи, почему он это делает?
Sub RateCardUpdate()
Dim RCWkbk As Workbook
On Error Resume Next
Set RCWkbk = Workbooks("ICARUS - Rate Card.xlsb")
If Err Then MsgBox "Please download the latest Rate Card file and open it in order to update this Rate Card."
If Err Then Exit Sub
Application.EnableCancelKey = xlDisable
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim UserWkbk As Workbook
Set UserWkbk = ThisWorkbook
Dim NR As Name
UserWkbk.Activate
UserWkbk.Unprotect Password:="8910"
UserWkbk.Worksheets("rc_data").Visible = True
UserWkbk.Worksheets("rc_data").Unprotect Password:="8910"
UserWkbk.Worksheets("drop_downs").Visible = True
UserWkbk.Worksheets("drop_downs").Unprotect Password:="8910"
RCWkbk.Activate
RCWkbk.Unprotect Password:="8910"
RCWkbk.Worksheets("rc_data").Visible = True
RCWkbk.Worksheets("rc_data").Unprotect Password:="8910"
RCWkbk.Worksheets("drop_downs").Visible = True
RCWkbk.Worksheets("drop_downs").Unprotect Password:="8910"
RCWkbk.Worksheets("rc_data").Activate
RCWkbk.Worksheets("rc_data").UsedRange.Select
Selection.Copy
UserWkbk.Activate
UserWkbk.Worksheets("rc_data").Activate
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormulasAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
RCWkbk.Activate
RCWkbk.Worksheets("drop_downs").Activate
RCWkbk.Worksheets("drop_downs").UsedRange.Select
Selection.Copy
UserWkbk.Activate
UserWkbk.Worksheets("drop_downs").Activate
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
For Each NR In RCWkbk.Names
UserWkbk.Names(NR.Name).Delete
UserWkbk.Names.Add Name:=NR.Name, RefersTo:=NR.Value
Next NR
RCWkbk.Activate
RCWkbk.Worksheets("rc_data").Protect Password:="8910"
RCWkbk.Worksheets("rc_data").Visible = False
RCWkbk.Worksheets("drop_downs").Protect Password:="8910"
RCWkbk.Worksheets("drop_downs").Visible = False
RCWkbk.Protect Password:="8910"
RCWkbk.Close
UserWkbk.Activate
UserWkbk.Worksheets("rc_data").Protect Password:="8910"
UserWkbk.Worksheets("rc_data").Visible = False
UserWkbk.Worksheets("drop_downs").Protect Password:="8910"
UserWkbk.Worksheets("drop_downs").Visible = False
UserWkbk.Protect Password:="8910"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.EnableCancelKey = xlEnable
MsgBox "The Rate Card has been updated."
End Sub
Вот и весь код. Рассматриваемый раздел:
For Each NR In RCWkbk.Names
UserWkbk.Names(NR.Name).Delete
UserWkbk.Names.Add Name:=NR.Name, RefersTo:=NR.Value
Next NR