Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 08:19   #1
Foxx
Форумчанин
 
Регистрация: 23.07.2009
Сообщений: 181
По умолчанию Имена ячеек

Здравствуйте! Как можно сделать так, чтобы не вводить имена ячеек вручную, а чтобы Excel автоматический задавал их (любая комбинация букв, начиная с 1 буквы и кончая совокупностью различных букв, не имеет значения имя, главное, чтобы оно было), это необходимо, чтобы ссылки в Word были из Excel никак строка-столбец, а уже ссылались на имя. То есть возможно будет добавлять строки и столбцы в Excel, при этом, чтобы в Word ничего не смещалось. Важно, чтобы задавались также имена при добавлении новых строк и столцов. Думаю это возможно сделать через макрос. Можно ли будет его применять уже на готовом файле?

Последний раз редактировалось Foxx; 16.03.2010 в 08:21.
Foxx вне форума Ответить с цитированием
Старый 16.03.2010, 12:08   #2
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Вот несколько чудесных кодов от EducatedFool
1. Присваивает имена ячейкам, равным их содержанию
Код:
Sub ПрисвоитьИменаВыделенныхЯчеек()
On Error Resume Next
    Dim ce As Range
    For Each ce In Selection.Cells
        CellName = Trim$(ce.Value): If Len(CellName) > 0 Then ce.Name = CellName
    Next
End Sub
2.
Код:
Sub ОчиститьВсеИменаВКниге()
    For Each n In ThisWorkbook.Names: n.Delete: Next
End Sub
3.
Код:
Sub ОчиститьВсеИменаНаАктивномЛисте()
    For Each n In ActiveSheet.Names: n.Delete: Next
End Sub
4.
Код:
Sub ОчиститьИменаВыделенныхЯчеек()
    Dim n As Name
    For Each n In ThisWorkbook.Names
        addr = Replace(n.Value, "=", "")
        If Not Intersect(Application.Range(addr), Selection) Is Nothing Then n.Delete
    Next
End Sub
Может быть поможет Вам для дальнейшей работы!
Maxx вне форума Ответить с цитированием
Старый 16.03.2010, 15:21   #3
Foxx
Форумчанин
 
Регистрация: 23.07.2009
Сообщений: 181
По умолчанию

Если использовать такое присвоение имен, то ячейкам с цифрами (значения каких либо переменных) не присваиваются значения. Нужно чтобы можно было потом менять эти цифры для новых данных, а имена должны остатся такими же, так как будет ссылка в Word идти. Почему не присваиваются имена ячейкам со значениями?
А нельзя прописать так чтобы задавал имя как комбинацию букв, начиная с любой буквой, их количеством.
Foxx вне форума Ответить с цитированием
Старый 16.03.2010, 18:05   #4
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Как Вам такой вариант.
Код:
Sub ПрисвоитьИменаВыделенныхЯчеек()
On Error Resume Next
    Dim ce As Range
    Dim arr(): arr = Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j")
    For Each ce In Selection.Cells
        CellName = Trim$(ce.Value)
        If Len(CellName) > 0 And Not IsNumeric(CellName) Then
            ce.Name = CellName
        Else
            If IsNumeric(CellName) Then
            newCellName = Empty
                For i = 1 To Len(Int(CellName))
                    newCellName = newCellName & arr(Val(Mid(Int(CellName), i, 1)))
                Next
                ce.Name = newCellName
            End If
        End If
    Next
End Sub
Допустим в ячейке стоит число 1230,45. Ячейке будет присвоено имя 1=b 2=c 3= d 0=j, т.е. bcdj
Maxx вне форума Ответить с цитированием
Старый 16.03.2010, 19:57   #5
Foxx
Форумчанин
 
Регистрация: 23.07.2009
Сообщений: 181
По умолчанию

Спасибо, но в полной мере не подходит. Так как если вписываешь текст в какую нибудь ячейку, то ей не присваивается имя. Также не присваивается имя если например в ячейке s=. Можно ли просто задавать имена не ориентируясь на значения в ней. Просто чтобы программа перебирала все буквы алфавита и всавляла в имя.
Foxx вне форума Ответить с цитированием
Старый 17.03.2010, 07:29   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Не знаю, на сколько Вам это поможет.
Следующий макрос присвоит имена всем используемым ячейкам активного листа по схеме: "имя_A1", "имя_A2" и т.д.
Код:
Sub CellNames()
    For Each cell In ActiveSheet.UsedRange
        cell.Name = "имя_" & cell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Next
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.03.2010, 08:28   #7
Foxx
Форумчанин
 
Регистрация: 23.07.2009
Сообщений: 181
По умолчанию

SAS888 Огромное спасибо. Но один нюанс, вот если придется добавлять строки или столбцы, и нужно тоже их назвать. Снова нельзя использовать этот макрос, так как имена тех ячеек переименуются, а нужно, чтобы они остались такими же ведь идут ссылки на Word. Как это можно осуществить.?
Foxx вне форума Ответить с цитированием
Старый 17.03.2010, 09:41   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Снова нельзя использовать этот макрос, так как имена тех ячеек переименуются
А Вы пробовали? Если ячейка уже имеет имя, то она не переименуется. Попробуйте выполнить макрос:
Код:
Sub CellNames1()
    For Each cell In [A1:B10]
        cell.Name = "имя_" & cell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Next
End Sub
В результате, получим именованные ячейки в диапазоне "A1:B10" с именами "имя_A1", "имя_A2" и т.д. Затем выполните макрос:
Код:
Sub CellNames2()
    For Each cell In [A1:C20]
        cell.Name = "НОВОЕимя_" & cell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Next
End Sub
который попытается переименовать ячейки в диапазоне "A1:C20". В результате, новое имя будут иметь только те ячейки, которые не имели имени. Ячейки диапазона "A1:B10" будут иметь старое имя.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.03.2010, 12:17   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Наконец-то, я понял, что Вам нужно. Чтобы при вставке строк (столбцов) внутри используемого диапазона, все ячейки сдвигались и сохраняли свои имена при повторном запуске макроса. Так? Если так, то можно поступить очень просто, использовав ячейку листа для хранения служебной информации. В примере - это ячейка "A1", значение которой инкременируется при каждом запуске макроса. В таком случае, макрос будет пытаться переименовывать ячейки каждый раз с новым именем. И, соответственно, присваивать эти имена только тем ячейкам используемого диапазона, которые не имеют имени. все именованные ячейки свои имена сохранят. Единственное условие: нельзя добавлять строку (столбец) выше (левее) первой (первого), т.к. ячейка, содержащая служебную информацию в этом случае сдвинется. Поэтому, лучше для служебных целей использовать ячейку другого листа, в котором она фиксирована. Хранить это значение в глобальной переменной нельзя, т.к. оно потеряется при закрытии книги.
Код:
Sub CellNames()
    For Each cell In ActiveSheet.UsedRange
        cell.Name = "имя_" & [A1] & cell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
    Next: [A1] = [A1] + 1
End Sub
Для более полного сервиса, можно перехватывать команды вставки строк (столбцов) и при этом событии запускать макрос автоматически. Надо?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 17.03.2010, 12:29   #10
Foxx
Форумчанин
 
Регистрация: 23.07.2009
Сообщений: 181
По умолчанию

Да пробовал, ведь если добавляешь в 5 строку еще одну строку и заново применяешь этот макрос cellname. a5 станет a6, имя следовательно также изменится. залил архив. Насчет cellname1, после второго макроса он создал новое имя и для тех же ячеек. Нужно, чтобы при добавлении строк задавались какие то новые имена, так получается раз ссылка идет на a1, то есть на местоположение, при смене его имя будет меняться. может я что то не так делаю, вот залил архив для cellname
Поправка: написал раньше, чем пос 9, не увидел.
Вложения
Тип файла: rar cellname.rar (14.0 Кб, 16 просмотров)
Тип файла: rar cellname12.rar (14.6 Кб, 20 просмотров)

Последний раз редактировалось Foxx; 17.03.2010 в 12:40.
Foxx вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как разделить значения ячеек по формату ячеек? ARIRAN Microsoft Office Excel 6 11.12.2009 15:30
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08
имена файлов Tirendus БД в Delphi 1 01.04.2009 20:49
Имена хостов :( InseR Работа с сетью в Delphi 1 04.07.2007 12:15