Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
tolikt
1 / 1 / 0
Регистрация: 08.05.2011
Сообщений: 40
1

Хранение "extra data" в ячейке Экселя

25.01.2007, 19:50. Просмотров 3252. Ответов 15
Метки нет (Все метки)

вместо tag есть свойство ID - тоже строковое, и туда помещается строка больше 256 (сам проверил).
А что такое и как использовать ID? Если использовать Range("A1").Id="My hidden text", то выдаётся ошибка "438" (Объект не поддерживает свойство или метод).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2007, 19:50
Ответы с готовыми решениями:

Прямой запись данных в файл: где сохранить "extra data"?
Прямой запись данных в файл- Где сохранить 'extra data'! 'Прямой' значит с...

Как присвоить ячейке значение типа "=IF(M8="";INT(L8*(1+Q8/100)+1);INT(M8*(1+Q8/100)+1))" ?
собственно сабдж. Средствами VBA не получается. Cells(ShapkaCount + 1,...

Если в ячейке присутствует ":", то ячейку нужно очистить и присвоить 1
У меня такая проблема. В 1 столбце в каждой ячейке у меня куча данных если в...

Если в ячейке значение не равно "да" то нужно скрыть строки
Добрый день уважаемые программисты, прошу помочь со следующей. Нужна ваша...

Как привязать к "выделенной ячейке" закомментированный код?
Здравствуйте! Прошу помощи. Не знаю, как привязать к "выделенной ячейке"...

15
R1001
0 / 0 / 0
Регистрация: 09.09.2009
Сообщений: 118
26.01.2007, 00:02 2
<TABLE cellSpacing=0 cellPadding=0 width="100% <TBODY><TR><TD class=SmallTxt width="80% <DIV id=ctl03_ctlTopic_ctlPanelBar_ctlTopicsRepeater_ctl26_smAuthorName_SimpleMenuDivLayer onmouseover="InstantASP_OpenMenuMouseOver('ctl03_ctlTopic_ctlPanelBar_ctlTopicsRepeater_ctl26_smAuthorName','ctl03_ctlTo pic_ctlPanelBar_ctlTopicsRepeater_ctl26_smAuthorName_SimpleMenuDivLayer','<table width=100% class=PanelBar_OuterTable cellspacing=0 cellpadding=0><tr><td><table width=100% cellspacing=1 cellpadding=7><tr><td class=TableCell_Light><a href=UserInfo3165.aspx Class= 'SmlLinks ' Title= 'View Members Profile '>View Member 's Profile</a></tr><tr><td class=TableCell_Light><a href=BuddyIgnoreList1.aspx?Username=Comanche Class= 'SmlLinks ' Title= 'Add to Buddy List '>Add to Buddy List</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butSendPrivateMessage ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Send Private Message '>Send Private Message</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butSendEmail ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Send Email To Member '>Send Email To Member</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butShowMemberPosts ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Find All Members Posts '>Find All Member 's Posts</a></tr></td></tr></table></td></tr></table>','165px');" style="DISPLAY: inline" onclick="InstantASP_OpenMenu('ctl03_ctlTopic_ctlPanelBar_ctlTopicsRepeater_ctl26_smAuthorName','ctl03_ctlTopic_ctlPanelB ar_ctlTopicsRepeater_ctl26_smAuthorName_SimpleMenuDivLayer','<table width=100% class=PanelBar_OuterTable cellspacing=0 cellpadding=0><tr><td><table width=100% cellspacing=1 cellpadding=7><tr><td class=TableCell_Light><a href=UserInfo3165.aspx Class= 'SmlLinks ' Title= 'View Members Profile '>View Member 's Profile</a></tr><tr><td class=TableCell_Light><a href=BuddyIgnoreList1.aspx?Username=Comanche Class= 'SmlLinks ' Title= 'Add to Buddy List '>Add to Buddy List</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butSendPrivateMessage ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Send Private Message '>Send Private Message</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butSendEmail ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Send Email To Member '>Send Email To Member</a></tr><tr><td class=TableCell_Light><a href=javascript:__doPostBack( 'butShowMemberPosts ', '3165 '); onMouseOver= 'window.status=window.location;return true; ' onMouseOut=window.status= ' 'return true; Class= 'SmlLinks ' Title= 'Find All Members Posts '>Find All Member 's Posts</a></tr></td></tr></table></td></tr></table>','165px'); <STRONG>2 Comanche</STRONG></DIV></TD></TR></TBODY></TABLE>
Классное исследование !!! <IMG style="CURSOR: pointer" onclick="AddSmileyIcon('smileys/extra/s115.gif')" alt=115 src="http://conf.nautilus2001.ru/smileys/extra/s115.gif" border=0>
Мне действительно такое как нужно было, но я тогда использовал примечания, сейчас предcтавляю, как можно было написать. Спасибо!

<STRONG>2
0
tolikt
1 / 1 / 0
Регистрация: 08.05.2011
Сообщений: 40
27.01.2007, 03:14  [ТС] 3
Да, у меня Office 97. В нём, похоже, нет ID. По крайней мере, после набора Range("A1"). в списке свойств и методов ID не появляется. Проверил на Office 2003, там это есть.
Впрочем, после набора полностью строки в виде Range("A1").ID = "My text" она автоматически меняется на Range("A1").Id = "My text" и потом при проверке (Отладка->Компилировать VBAProject) ошибки не выдаётся. При вызове контекстной справки появляется выбор по Id из двух библиотек: из Excel - справка по Hidden Objects, а из библиотеки Office - Id Property для built-in command bar control. Второе - примерно понятно, что к Range не имеет отношение. А про Hidden Objects не совсем понял, ибо не по-русски.
Т. е. использовать ID в Excel 97, похоже, принципиально не получится. И подключение каких-то библиотек тут не поможет, ибо ID у Range - это внутри самого Excel, а не VBA.
Надеюсь, я не прав. И есть способ присобачить ID к Range.
PS. Это тот самый <FONT color=#dd3333>НАИРЕДЧАЙШИЙ СЛУЧАЙ в пользу обновления Office. Чуть чаше встречался с несовместимостью сторонних файлов презентаций PowerPoint и баз данных Access. C Word и Excel таких проблем вообще не было. А в 99.99 % старый Office меня полностью устраивает. Всё равно пользуюсь мизерной частью его возможностей. Ибо <STRONG><FONT color=#33dd33>лучшее - враг хорошего</STRONG>.
0
Johny Walker
0 / 0 / 1
Регистрация: 10.04.2011
Сообщений: 415
29.01.2007, 15:31 4
Насчет ID - будьте осторожны. При сохранении файла значения ID ячеек не сохраняются. То есть пользоваться ими можно только в текущем сеансе работы с открытой книгой. Сохраняется ID только при сохранении книги в Web-формате
0
Comanche
22.07.2011, 16:26 5
Ломал тут голову, как сохранить 'дополнительные' данные в ячейке Экселя, т.е. данные, которые не должны отображаться в самой ячейке (и никак не должны 'зашиваться' в её текст). Вариант хранения в комментариях не подходил: комментарии уже были заняты по своему прямому назначению. Свойства 'Tag' объект 'Range' не имеет. Запихать информацию в имя именованного диапазона (равного ячейке) - нельзя: у этого имени есть ограничение в 255 символов, в нём нельзя использовать пробелы, да и просто - именованные диапазоны могут тоже потребоваться для других целей. И вообще это было бы 'некрасиво'.

Случайно нашёл решение:
Range('A1').Validation.InputMessage = 'нужные мне extra data'
Кроме того, можно ещё и вот сюда запихать:
Range('A1').Validation.InputTitle = 'и ещё какие-нибудь extra data!'

Конечно, нужно сделать ещё и вот это:
Range('A1').Validation.ShowInput = False

В общем, целых два аналога свойства 'Tag'!
Естественно, если вы планируете действительно использовать 'подсказку для текущей ячейки', то портить Validation так нагло нельзя. Лично я за всю жизнь вообще не пользовался этой подсказкой, поэтому использовать её не по назначению - меня не пугает.

Я не претендую на открытие Америки, конечно же. Но по-моему это малоизвестный 'workaround'.
Perceff
0 / 0 / 0
Регистрация: 18.07.2011
Сообщений: 110
22.07.2011, 17:01 6
Это кстати можно сделать и через меню «Данные» —> «Проверка» на вкладке «сообщение для ввода».
Но здесь кол-во символов тоже ограничено 256
0
Johny Walker
0 / 0 / 1
Регистрация: 10.04.2011
Сообщений: 415
22.07.2011, 18:00 7
Классно, но длинновато получается. Кроме того, вместо tag есть свойство ID - тоже строковое, и туда помещается строка больше 256 (сам проверил).
0
Comanche
22.07.2011, 19:27 8
2Johny:
Ой, блин, как же это я его проглядел!!! Аж стыдно стало... С ним-то покрасивше будет. Спасибо!

PS: Хе, зато теперь у нас есть аж целых ТРИ аналога свойства 'Tag'!
Comanche
22.07.2011, 20:28 9
Не-е, не три. Больше. Вот все (вроде и правда все) свойства объекта Range, в которых можно хранить дополнительные данные о диапазоне (ячейке):
Код
.ID                          неограниченное
.Validation.InputMessage     254
.Validation.InputTitle       32
.Validation.ErrorMessage     225
.Validation.ErrorTitle       32
.NoteText                    255
Кроме того, есть ещё именованные диапазоны, с ограничением на 255 символов.
Johny Walker
0 / 0 / 1
Регистрация: 10.04.2011
Сообщений: 415
24.07.2011, 15:27 10
Остается написать (во внешнем модуле) процедурку, которая для текущего файла переносила бы ВСЕ данные из .formula в .ID, стирая первоисточник, и наоборот. Получим файл, в котором данные есть, но их не видно! (это терминатору привет - он все ищет, как бы закрыть доступ к конфиденциальной информации, налегая на пароль, а я его убеждаю, что легче всего спрятать дерево в лесу :-)
0
Comanche
24.07.2011, 16:29 11
>> Получим файл, в котором данные есть, но их не видно!

Это пока мы не сохранили этот файл в HTML-формат )
Johny Walker
0 / 0 / 1
Регистрация: 10.04.2011
Сообщений: 415
24.07.2011, 16:35 12
Смысл-то в том, чтобы незнающий человек не стал искать 'компромат' в безобидном на первый взгляд файле. Можно ведь заставить макрос менять местами содержимое .ID и .formula, показывая реальные/подставные данные :-)
0
Alex_2
26.07.2011, 19:57 13
Comanche Спасибо.
Действительно пригодилось.
Сумрак
05.08.2011, 18:07 14
:-) круто... хехе, может в будующем и пригодится...
Хотя... я уже придумал куда это запихать.. можно хранить id строки из Бд.
Comanche
06.08.2011, 13:28 15
2Сумрак:
Забавно: я использую вышеописанное абсолютно для того же самого - для 'ассоциирования' ячейки с определённой записью БД. Собственно из-за этой задачи и начал ковырять сей вопрос.
Johny Walker
0 / 0 / 1
Регистрация: 10.04.2011
Сообщений: 415
07.08.2011, 13:43 16
Я для ассоциации использую примечание - его править легче :-)
0
07.08.2011, 13:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 13:43

Если в ячейке присутствует "-", то ячейку нужно очистить по всему листку
По всему листку лежит куча информации во всех ячейках в некоторых ячейка где...

Обращение к ячейке Rows("i:y") вызывает ошибку
Есть код для изменения шрифта ячеек Sub Шрифт() Dim i As Integer Dim y As...

Что означает ошибка компиляции: "Fixed or static data can't be larger than 64K"?
Выдает сообщение Compile error: Fixed or static data can't be larger than...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru