Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Для ячейки есть возможность сохранить дополнительный параметр типа string? / 11 сообщений из 11, страница 1 из 1
15.02.2007, 17:54
    #34334552
ora_dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
В двух словах примерно так: я заполняю ячейки Cells(i, j) значениями, но кроме этого, для каждой ячейки хочу сохранить, назовем так, адрес, откуда я это значение взял. Есть ли такая возможность?
...
Рейтинг: 0 / 0
15.02.2007, 18:43
    #34334729
SoftParanoik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
Cells(i,j).ID="Любой текст"
...
Рейтинг: 0 / 0
15.02.2007, 18:56
    #34334780
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
Это свойство, и зовется оно Comment.
...
Рейтинг: 0 / 0
15.02.2007, 19:38
    #34334881
izali
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
Даа... в обычном ВБ у контролов есть Tag, куда можно много чего записать...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.11.2013, 07:50
    #38479260
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
VladConn,

Мне тоже понадобилось прицепить к ячейкам таблицы служебную информацию.

Свойство Comment работает дюже медленно, ниже текст теста (Excel 2010).
Где-то 8-11 сек на создание 7110 комментов.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Option Explicit
Sub testComment()
    Dim asheet As Worksheet
    Dim rowNo As Integer, colNo As Integer
    Dim myr As Range, s As String, c As Comment
    Dim i As Integer, j As Integer
    
 'определяем используемую область листа
    Set asheet = ActiveSheet

    rowNo = asheet.UsedRange.Rows.Count
    colNo = asheet.UsedRange.Columns.Count
    
'Application.ScreenUpdating = False
'Application.EnableEvents = False
'Application.Calculation = xlCalculationManual

Debug.Print Now

    'перебираем ячейки
        
    For i = 1 To rowNo '=========================== цикл по строкам листа
    
        'формирование строки данных
        For j = 1 To colNo
            Set myr = asheet.Cells(i, j)
            If Not myr.Comment Is Nothing Then
                myr.ClearComments
            End If
            myr.AddComment
            myr.Comment.Visible = False
            myr.Comment.Text Text:="testComment:" & Str(i) & ":" & Str(j)
        Next j

    Next i              '================================
    
'Application.ScreenUpdating = True
'Application.EnableEvents = True
'Application.Calculation = xlCalculationAutomatic
'с этими скобками выполняется 11 сек, без них 8 сек создание 7110 комментов :(

Debug.Print Now
    
End Sub




Возможно ли оптимизировать? Или надо искать другие варианты.
Пока приходит в голову только сделать скрытый лист, в ячейках которого хранить служебную информацию о ячейках рабочего листа.
Будет ли это производительней? Какие еще варианты можете предложить?

SoftParanoik , похоже, пошутил Cells(i,j).ID="Любой текст"
Попробовал, ошибки не выдает, начинает работать и жрать память. Через пять минут снял Task Manager-ом.
...
Рейтинг: 0 / 0
30.11.2013, 19:16
    #38484591
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
DirksDR,

Проблема в ClearComments.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Sub testComment()
    Dim asheet As Worksheet
    Dim myr As Range
    Dim i As Integer, j As Integer

    Set asheet = ActiveSheet

    Debug.Print Now

    Set myr = asheet.Range("A1:J711")
    myr.ClearComments

    For i = 1 To 711

        For j = 1 To 10
            Set myr = asheet.Cells(i, j)
            myr.NoteText Text:="testComment:" & Str(i) & ":" & Str(j)
        Next j

    Next i

    Debug.Print Now

End Sub
...
Рейтинг: 0 / 0
30.11.2013, 19:25
    #38484599
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
DirksDR,

У меня myr.ID = "testComment:" & Str(i) & ":" & Str(j) работает, быстро получается.
...
Рейтинг: 0 / 0
02.12.2013, 09:56
    #38485555
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
VladConn,

Спасибо.
Метод myr.NoteText Text:= работает значительно быстрее, чем myr.Comment.Text,
21330 комментов формируются менее 2 сек.
Так же быстро отработало свойство myr.ID, видно прошлый раз я Excel поломал своими тестами (вышибал Task Manager-ом и т.д.).
Как и ожидалось, еще быстрее работает запись в массив - доли секунды на тех же объемах.
Здесь у меня затруднение в том, как поставить в соответствие нескольким открытым таблицам один массив, ведь в коде я могу использовать только одно имя массива.
Может попытаться засунуть массив в класс и переключаться между несколькими экземплярами класса?
...
Рейтинг: 0 / 0
02.12.2013, 11:59
    #38485736
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
DirksDR,

Попробуйте вместо массива использовать Scripting.Dictionary. Ключами сделайте адреса рангов, или что угодно, хотя неясно, почему у Вас ограничение на число массивов. Как Key, так и Item можно прeдставлять в виде строки, составленной из значений, разделенных специальным символом, например, #. Такую строку можно парсить функцией Split и брать элементы возвращаемого ею массива.
...
Рейтинг: 0 / 0
02.12.2013, 17:34
    #38486302
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
VladConn,

Вы снова правы. Я и раньше подозревал, что Dictionary должно быстро работать, да не попадалось нормального описания.
Вставка 21330 пар ключ-значение, плюс 21330 чтений по ключу работает меньше секунды.
Длина ключа большая, использовал больше 100 байт.

Добавить в References библиотеку Microsoft Scripting Runtime и ниже код
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Sub testDic()

    Dim dicTest
    Set dicTest = CreateObject("Scripting.Dictionary")

    Dim asheet As Worksheet
    Dim rowNo As Integer, colNo As Integer
    Dim i As Integer, j As Integer, k As Integer
    Dim Key As String
    Dim DataValue As String
    
    'определяем используемую область листа
    With ThisWorkbook
        Set asheet = .Worksheets("Лист1")
    End With
    
    rowNo = asheet.UsedRange.Rows.Count
    colNo = asheet.UsedRange.Columns.Count
    
    Debug.Print Now
        
    'загрузка словаря
    For i = 1 To rowNo
        For j = 1 To colNo
            Key = "test___________________________________________________________________________________________________Comment:" & Str(i) & ":" & Str(j)
            DataValue = asheet.Cells(i, j)
            dicTest.Item(Key) = DataValue
        Next j
    Next i
    
Debug.Print Now
Debug.Print dicTest.Count

    'чтение значений по ключу
    For i = 1 To rowNo
        For j = 1 To colNo
            Key = "test___________________________________________________________________________________________________Comment:" & Str(i) & ":" & Str(j)
            DataValue = dicTest.Item(Key)
        Next j
    Next i

Debug.Print Now

End Sub



Хорошее описание по ссылке http://www.osp.ru/win2000/2006/07/3643019/

Кстати, Scripting.Dictionary содержит объект FileSystemObject, тоже нужная штука.
Пожалуй, попробую применить Scripting.Dictionary, спасибо за наводку.
...
Рейтинг: 0 / 0
02.12.2013, 22:18
    #38486687
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для ячейки есть возможность сохранить дополнительный параметр типа string?
DirksDR,

My pleasure
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Для ячейки есть возможность сохранить дополнительный параметр типа string? / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]