powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Для ячейки есть возможность сохранить дополнительный параметр типа string?
11 сообщений из 11, страница 1 из 1
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #34334552
ora_dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В двух словах примерно так: я заполняю ячейки Cells(i, j) значениями, но кроме этого, для каждой ячейки хочу сохранить, назовем так, адрес, откуда я это значение взял. Есть ли такая возможность?
...
Рейтинг: 0 / 0
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #34334729
SoftParanoik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cells(i,j).ID="Любой текст"
...
Рейтинг: 0 / 0
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #34334780
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это свойство, и зовется оно Comment.
...
Рейтинг: 0 / 0
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #34334881
Фотография izali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даа... в обычном ВБ у контролов есть Tag, куда можно много чего записать...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #38479260
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #38484591
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Для ячейки есть возможность сохранить дополнительный параметр типа string?
    #38484599
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDR,

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

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

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

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


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