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

Показать сообщение отдельно

Ветеран


Сообщения: 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