Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - как пакетно назначить имена для клеток excel?

Ответить
Настройки темы
2010 - как пакетно назначить имена для клеток excel?

Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Мне нужно определенному диапазону клеток размером 50 столбцов на 2000 строк присвоить произвольные имена. Как это можно сделать? Может кто скриптом VBA подсобит?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 00:18, 21-01-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Pozia, пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Sub CopyFromExcel()
    Dim objExcel As Excel.Application
    Dim strAddress As String
    Dim strNewName As String
    
    Dim i As Long
    
    Set objExcel = GetObject(, "Excel.Application")
    
    With objExcel.Selection
        If .Worksheet.Type = Excel.xlWorksheet Then
            i = .Worksheet.Names.Count + 1
            
            Do
                strNewName = "_" & CStr(i)
                
                If Not NameExists(.Worksheet, strNewName) Then
                    Exit Do
                Else
                    i = i + 1
                End If
            Loop
            
            If Not RangeHasName(objExcel.Selection) Then
                .Worksheet.Names.Add strNewName, "=" & .Address(, , Excel.xlR1C1, True)
            End If
            
            .Copy
            
            Selection.PasteSpecial , True, , , wdPasteRTF
            
            .Application.CutCopyMode = False
        End If
    End With
    
    Set objExcel = Nothing
End Sub

Function NameExists(objWorksheet As Excel.Worksheet, strName As String) As Boolean
   On Error Resume Next
   
   NameExists = Len(objWorksheet.Names(strName).Name) <> 0
End Function

Function RangeHasName(objRange As Excel.Range) As Boolean
   On Error Resume Next
   
   RangeHasName = Len(objRange.Name.Name) <> 0
End Function


Цитата Pozia:
… при его наличие у клетки »
Будет работать с любыми диапазонами (не только состоящими из одной клетки).
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:28, 25-01-2012 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Цитата Iska:
Будет работать с любыми диапазонами (не только состоящими из одной клетки). »
работает. только вот если диапазон выбираю то имена не присваиваются клеткам при вставке. Это можно поправить?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 22:39, 25-01-2012 | #22


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Pozia, у меня присваивается. Описывайте подробно пример, а я попробую воспроизвести у себя.

Отправлено: 01:36, 26-01-2012 | #23


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Iska, разобрался, присваивает. Просто думал что каждой ячейке в выбранном диапазоне будет присвоено имя, что предпочтительнее для меня. Так можно сделать?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 07:48, 26-01-2012 | #24


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pozia:
…что каждой ячейке в выбранном диапазоне будет присвоено имя, что предпочтительнее для меня. Так можно сделать? »
А смысл?

Отправлено: 16:19, 26-01-2012 | #25


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Цитата Iska:
А смысл? »
для меня есть:
1. Решается вопрос, который звучит в шапке изначально. Это позволит в дальнейшем работать быстрее без скрипта там где его нет.
2. Постоянно сделав одну связь на какую то клетку, я затем в ворде просто ее копирую в другие нужные места, и связи вешаются. Если я скопирую диапазон ячеек с одним общим именем, то потом из него я не смогу копировать нужные мне ячейки в другие места документа ворд, связь повесится не верно.

Поэтому, если это возможно сделать, буду признателен. В любом случае, еще раз огромное спасибо.

Iska, правильно ли я исправил кусок кода для более наглядности:
Код: Выделить весь код
            Do
                strNewName = "i" & CStr(i) & "i"
                If Not NameExists(.Worksheet, strNewName) Then

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:12, 26-01-2012 | #26


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pozia:
1. Решается вопрос, который звучит в шапке изначально. Это позволит в дальнейшем работать быстрее без скрипта там где его нет. »
Вставьте в проект рабочей книги и выполните:
Код: Выделить весь код
Option Explicit

Sub SetNames()
    Dim objWorksheet As Worksheet
    Dim objCell As Range
    Dim i As Long
    
    Set objWorksheet = Selection.Worksheet
    
    If objWorksheet.Type = xlWorksheet Then
        i = 1
        
        For Each objCell In Selection
            objWorksheet.Names.Add "_" & CStr(i), "=" & objCell.Address(, , xlR1C1, True)
            
            i = i + 1
        Next
    End If
    
    Set objWorksheet = Nothing
End Sub
Решите вопрос, который звучит в шапке изначально.

Цитата Pozia:
Если я скопирую диапазон ячеек с одним общим именем, то потом из него я не смогу копировать нужные мне ячейки в другие места документа ворд, связь повесится не верно. »
Данное утверждение неверно. Сможете.

Цитата Pozia:
Iska, правильно ли я исправил кусок кода для более наглядности: »
Вы получите имена вида: «i1i», «i2i», «i3i» и т.д.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:34, 26-01-2012 | #27


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Цитата Iska:
Решите вопрос, который звучит в шапке изначально. »
скрипт хитрый оказался ). Он забирает имена у клеток ранее названных. То есть если уже есть имена _1, _2, _3... и я выбираю другой диапазон задать имена, то он стирает имена на прежних клетках, и дает их новым клеткам. Можно ли это исправить?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:25, 26-01-2012 | #28


Аватара для Pozia

Ветеран


Сообщения: 2756
Благодарности: 211

Профиль | Отправить PM | Цитировать


Iska, начал активно пользоваться скриптом и заметил, что часто вылетает ошибка как скрине. Отчего?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Последний раз редактировалось Pozia, 31-01-2012 в 20:27.


Отправлено: 22:25, 26-01-2012 | #29


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Pozia:
Он забирает имена у клеток ранее названных. »
Он тупо назначает имена, начиная с «_1», на адреса ячеек.

Цитата Pozia:
Можно ли это исправить? »
Исправить-то можно. Я ориентировался на:
Цитата Pozia:
вопрос, который звучит в шапке изначально.
Цитата Pozia:
нужно определенному диапазону клеток размером 50 столбцов на 2000 строк присвоить произвольные имена. »
»
Я рассчитывал именно на то, что сие будет однократным действием.

Я понимаю, Вы никак не хотите манипулировать целыми диапазонами, а в обязательном порядке давать имена исключительно отдельным ячейкам (хотя я не вижу в этом требовании никакой необходимости). Впрочем, дело Ваше, пусть будет так, пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Sub CopyFromExcel()
    Dim objExcel As Excel.Application
    Dim objWorksheet As Excel.Worksheet
    Dim objCell As Excel.Range
    
    Dim strNewName As String
    Dim i As Long
    
    
    Set objExcel = GetObject(, "Excel.Application")
    Set objWorksheet = objExcel.Selection.Worksheet
    
    If objWorksheet.Type = Excel.xlWorksheet Then
        i = objWorksheet.Names.Count
            
        For Each objCell In objExcel.Selection
            If Not RangeHasName(objCell) Then
                Do
                    strNewName = "_" & CStr(i)
                    
                    i = i + 1
                    
                    If Not NameExists(objWorksheet, strNewName) Then
                        Exit Do
                    End If
                Loop
                
                objWorksheet.Names.Add strNewName, "=" & objCell.Address(, , Excel.xlR1C1, True)
            End If
        Next
        
        objExcel.Selection.Copy
        
        Selection.PasteSpecial , True, , , wdPasteRTF
        
        objExcel.CutCopyMode = False
    End If
    
    Set objWorksheet = Nothing
    Set objExcel = Nothing
End Sub

Function NameExists(objWorksheet As Excel.Worksheet, strName As String) As Boolean
   On Error Resume Next
   
   NameExists = Len(objWorksheet.Names(strName).Name) <> 0
End Function

Function RangeHasName(objRange As Excel.Range) As Boolean
   On Error Resume Next
   
   RangeHasName = Len(objRange.Name.Name) <> 0
End Function


Цитата Pozia:
Iska, начал активно пользоваться скриптом и заметил, что часто вылетает ошибка как скрине. Отчего? »
Опишите условия, при которых сие происходит.

Последний раз редактировалось Iska, 27-01-2012 в 03:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:26, 27-01-2012 | #30



Компьютерный форум OSzone.net » Сфера Microsoft » Microsoft Office (Word, Excel, Outlook и т.д.) » 2010 - как пакетно назначить имена для клеток excel?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как назначить разделителем для FOR конец строки? NordWest Скриптовые языки администрирования Windows 2 13-11-2011 21:12
Разное - Как назначить программу для открытия файлов одного типа fonarik Microsoft Windows 2000/XP 1 09-10-2010 11:08
Установка - Кардридер. Установка с нуля. Как назначить C: для системы при включеном кардридере?? yurfed Microsoft Windows 2000/XP 2 17-09-2008 11:10
назначить действие для файлов в firefox graverman Программное обеспечение Linux и FreeBSD 1 26-11-2007 17:00
k3b: Назначить устройство для записи? SVlads Общий по FreeBSD 27 28-03-2006 12:39




 
Переход