Я работаю с некоторыми данными о Excel 2011 для Mac (версия 14.3.1), которые мне нужны для построения графика и добавления дополнительных данных позже. Для этого я использую имена для диапазонов, как объясняется here. В основном создайте диапазоны имен с формулой =OFFSET($A$2,0,0,COUNTA($A:$A)-1)
(на испанском языке: =DESREF($A$2,0,0,CONTARA($A:$A)-1)
).Запретить включение имен листов при добавлении имени для диапазона ячеек с помощью vba
У меня есть много столбцов, так что я написал эту VBA, чтобы сделать это для меня:
Sub Botón6_AlHacerClic()
For i = 1 To Columns.Count
Names.Add Name:=ActiveSheet.Name & Range(Cells(1, i).Address).Value, RefersTo:="=DESREF(" & Cells(2, i).Address & ",0,0,CONTARA(" & Replace(Cells(1, i).Address, "$1", "") & ":" & Replace(Cells(1, i).Address, "$1", "") & ")-1)"
Next i
End Sub
Где:
Cells(2, i).Address
является идентификатор соты для второго ряда (например: $ A $ 2)Replace(Cells(1, i).Address, "$1", "")
это строка букву (например: $ A)
Проблема, с которой я столкнулась, заключается в том, что при вводе имен вручную она заменяет формулу =DESREF($A$2,0,0,CONTARA($A:$A)-1)
на =DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)
, что прекрасно и отлично работает. Но когда я делаю это с помощью vba, он заменяет его =Sheet1!DESREF(Sheet1!$A$2,0,0,CONTARA(Sheet1!$A:$A)-1)
, который не работает.
Я попытался с различными вариантами Add manual и даже попытался запустить этот код после того, как имена были созданы, чтобы исключить Sheet1! в начале, но в конце они держат Sheet1!:
Sub Botón7_AlHacerClic()
Set nms = ActiveWorkbook.Names
For i = 1 To nms.Count
nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREF")
Next i
End Sub
Другая вещь, которую я попытался было заменить Лист1 DESREF за то, что не является функцией:
Sub Botón7_AlHacerClic()
Set nms = ActiveWorkbook.Names
For i = 1 To nms.Count
nms(i).RefersTo = Replace(nms(i).RefersTo, ActiveSheet.Name & "!DESREF", "DESREFF")
Next i
End Sub
И в этом случае это дает мне: =DESREFF($A$2,0,0,CONTARA($A:$A)-1)
Но я гаванью» t найти способ сделать это с DESREF
без добавления Sheet1!
Как я могу предотвратить лист1! от появления в начале?
Спасибо
Когда вы говорите, что VBA меняется в '= Лист1 DESREF (Лист1 $! A $ 2,0,0, CONTARA (Sheet1! $ A: $ A) -1) ', какой именно VBA это делает? Похоже, что ваш первоначальный фрагмент будет перезаписывать все, что есть. Можете ли вы указать на определенную строку VBA, которая приводит к этому изменению? – Hambone
Это в строке: 'Names.Add Name: = ActiveSheet.Name & Range (Ячейки (1, i) .Address) .Value, RefersTo: =" = DESREF ("& Cells (2, i) .Address & ", 0,0, CONTARA (" & Replace (Ячейки (1, i) .Address, "$ 1", "") & ":" & Replace (Ячейки (1, i) .Address, "$ 1", "") & ") -1)" ' Кроме того, даже когда я пытаюсь заменить его на' nms (i) .RefersTo = Replace (nms (i) .RefersTo, ActiveSheet.Name & "! DESREF", "DESREF") 'он все еще пишет _Sheet1! DESREF_. С другой стороны, если я делаю 'nms (i) .RefersTo = Replace (nms (i) .RefersTo, ActiveSheet.Name &"! DESREF "," DESREFF ")' он будет писать '= DESREFF (Sheet1! $ A $ 2,0,0, CONTARA (Sheet1! $ A: $ A) -1) ' –
Вау, это сумасшествие. Я чувствую, что могу заставить это работать, если только я могу повторить этот вопрос. Каждый раз Excel/VBA делает именно то, что, как я думаю, должен - я не могу заставить его воссоздать вашу ошибку. Если это все еще проблема, и вы можете повторить шаги (в вашем OP), которые вызывают ошибку, я с удовольствием рассмотрю ее. Возможно, вам придется быть конкретным - «Выделите столбец C, назовите его« blah », запустите VBA Sub« XYZ ». Я понимаю, что это не так важно для вас, поэтому я позволю вам решить. – Hambone