Excel больше 255 символов

Можно так:  
Формула массива =ПОИСКПОЗ(1;ЕСЛИ(B18=B24:B43;1;0);0)  
Возвращает номер «строки» массива, в данном случае 15. Длинна значения, условно, не имеет.  
Потом производим смещение, в вашем случае так:  
=СМЕЩ(D23;ПОИСКПОЗ(1;ЕСЛИ(B18=B24:B43;1;0);0);0;1;1)  
Опять же, массивом.  
Для ввода массива нужно вводить ctrl+shift+enter.  
Но это для случая, когда при выборе из списка в ячейке b18 значение не «обрезается» до 255 знаков. В 2007 не обрезается, насчёт 2003 не уверен. Т е у вас сейчас там 255 знаков, если вы вручную сократили до 255, то верхняя формула подойдёт, если нет, то читаем дальше…  

  Как вариант, если происходит обрезание при выборе из выпадающего списка, поиск по тому же принципу первых 255 знаков по массиву из «обрезанных до 255 знаков» значений.  
=СМЕЩ(D23;ПОИСКПОЗ(ПСТР(B18;1;255);ПСТР(B24:B43;1;255);0);0;1;1)  
массив(ctrl+shift+enter).  
Ищет первое совпадение первых 255 знаков ячейки b18 в массиве из значений «первых 255 знаков».  

  PS: формулы массива вводятся нажатием ctrl+shift+enter, а не просто enter.  
Формулы массива не дружат с объединёнными ячейками. Для ввода формулы массива в объединённую ячейку, нужно вначале убрать объединение ячеек, потом ввести формулу массива, а потом опять объединить эти ячейки.  
В файле-примере приведены оба варианта.

I am using OLE DB driver to insert more than 255 characters into an Excel sheet, but I get the error:

Exception Details: System.Data.OleDb.OleDbException: The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.

Seems from this thread that it’s an Excel limitation. Even the Microsoft site seems to say so here.

So does this mean I can’t programmatically, but I can manually? Because I can enter more than 255 characters when I manually type them in Excel. So is it a Microsoft.ACE.OLEDB.12.0(AccessDatabaseEngine.exe) driver limitation?

Community's user avatar

asked Dec 20, 2010 at 9:35

Joseph's user avatar

0

My workaround to this issue is to add a text which its length is longer than 255 characters on the first row of the column. OleDB will treat this column as MEMO type and then it can insert more than 255 characters in a cell.

answered Jun 25, 2014 at 2:38

kingkong0924's user avatar

1

I found a more efficient way to handle this problem, my references are the 2 links below

http://support.microsoft.com/kb/316934

http://www.codeproject.com/Articles/37055/Working-with-MS-Excel-xls-xlsx-Using-MDAC-and-Oled

Basically do not use data adapter, data set and parameters to insert rows in the Excel (this never worked for me) instead run SQL insert from the code directly using command object

Here what you have to do

  1. Declare the wide field as MEMO instead of string or CHAR
    «CREATE TABLE WorkSheetName ( field1 INT, field2 MEMO, field3 … );»
  2. Build the insert statement like
    «INSERT INTO WorkSheetName (field1, field2, …) VALUES (1234, ‘Any long string here…’, …)»
  3. Declare a DbCommand to run the Create table and Insert statements above, here I am using the command obj from enterprise library

    DbCommand dbCommand = m_dbConnection.CreateCommand();
    dbCommand.CommandText = «Create Table …»;
    dbCommand.CommandType = CommandType.Text;
    dbCommand.ExecuteNonQuery();

    dbCommand.CommandText = «Insert Into …»;
    dbCommand.CommandType = CommandType.Text;
    dbCommand.ExecuteNonQuery();

answered Jul 6, 2012 at 14:27

Waleed's user avatar

1

The link you are refering to, is about 256 columns and not characters. The 256 characters problem is described here with a workaround: http://support.microsoft.com/kb/213841

answered Dec 20, 2010 at 10:59

jvdbogae's user avatar

jvdbogaejvdbogae

1,2599 silver badges15 bronze badges

2


Форум программистов Vingrad

Модераторы: mihanik

Страницы: (2) Все [1] 2 
( Перейти к первому непрочитанному сообщению )

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Как обойти ограничение в 255 символов? при использовании источников данных 

V

   

Опции темы

Валк
Дата 26.8.2006, 16:03 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

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

PM MAIL WWW   Вверх
Izuver
Дата 28.8.2006, 23:30 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 352
Регистрация: 13.6.2006
Где: Омск

Репутация: 2
Всего: 2

Можно по подробней о«При использовании источников данных (как пример, при копировании листов) в этом случае никакого слияния данных из этой ячейки не происходит»

Добавлено @ 23:37

Цитата(Валк @ 26.8.2006,  16:03)
в ячейке Excel может быть размещено более 255 символов.

В ячейку я запихнул 6000 символов (это конечно не предел). В одной ячейке, в видимой части или при распечатке вижу 1360 символов. Символы были ввиде:
1,2,3,4,5,6,7…1441,1442,1443,1444,1445,

PM MAIL ICQ   Вверх
Валк
Дата 29.8.2006, 12:02 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Izuver
В ячейку Excel (речь идёт о 2000 и ХР) можно очень много символов «запихнуть». В любом случае, больше чем 255. Однако, это не означает, что потом из неё эти символы можно извлечь.

Попробуй открыть две книги. В любом листе одной из них в любую из ячеек запиши более 255 символов (любых, у меня, в частности, помимо обычных символьных использовались и служебные), затем щёлкни по по названию этого листа правой кнопкой манипулятора. В контекстном меню выбери Переместить/скопировать -> Выбираешь другую книгу -> Отмечаешь чек-бокс «Создавать копию» -> ОК (Внимание, в книге куда копируется лист не должно быть листа с именем как и у копируемого листа). Если у тебя в какой-либо ячейке более 255 символов, то Excel ругнётся, что не может скопировать все символы.
Это тебе как один из примеров «ограничения на 255 символов». Обойти его в этой ситуации возможно (выделяешь весь лист целиком и копируешь его на чистый лист другой книги).

У меня ситуация несколько другая (но она натыкается на такое же ограничение). Я использую слияние. Книга Excel у меня используется как источник данных из которого я их переношу в документ Word. Если в какой-либо ячейке получается более 255 символов, то эти данные либо переносятся не полностью, либо не переносятся вовсе. Я думал, что и в этом случае как-то можно обойти эту проблему. К сожалению, не получилось :-(
Пришлось мне данные, в ячейках где происходит переполнение ограничения в 255 символов, распределять на несколько ячеек и в документе Word их собирать воедино. Недостатком этого способа является то, что (насколько я могу судить по своему небольшому опыту) связывать книгу Excel с документом Word можно используя небольшое количество ячеек (по-моему, около 70). И если перед решением возникшей проблемы я использовал всего 26 ячеек, то при разбивке данных мне пришлось использовать уже 48 ячеек.

Вопрос означенный в теме я помечаю как решённый, однако если кто знает как побороть это ограничение, то прошу отписать тут.
Хотя, как сказал мне Akina, это ограничение вроде как не обходится.

PM MAIL WWW   Вверх
Romikgy
Дата 29.8.2006, 13:42 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

Код

Function CopyLongString(wrbook1, wrsheet1, x, y, wrbook2, wrsheet2) As Integer

Dim i As Integer
Dim sx As String, ss As String
If Len(Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)) > 250 Then
sx = Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = ""
i = Len(sx) / 250
For k = 0 To i
ss = Mid(sx, 1 + k * 250, 250)
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) + ss
Next k
Else
Workbooks(wrbook2).Worksheets(wrsheet2).Cells(x, y) = Workbooks(wrbook1).Worksheets(wrsheet1).Cells(x, y)
End If
CopyLongString = 1
End Function
Function CopyWheet1(wrbook1, wrsheet1, wrbook21, wrsheet21) As Integer

Dim r As Integer
Dim ri As Integer
Dim c As Integer
Dim ci As Integer

r = Workbooks(wrbook1).Worksheets(wrsheet1).UsedRange.Rows.Count
c = Workbooks(wrbook1).Worksheets(wrsheet1).UsedRange.Columns.Count
For ri = 1 To r
For ci = 1 To c
z = CopyLongString(wrbook1, wrsheet1, ri, ci, wrbook21, wrsheet21)
Next ci
Next ri
CopyWheet1 = 1
End Function
Sub rrrr()
 z = CopyWheet1(1, 1, 2, 1)

End Sub

CopyWheet1(1, 1, 2, 1) — копирует с 1 книги 1 листа  на 2 книгу 1 лист

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 30.8.2006, 11:04 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
CopyWheet1(1, 1, 2, 1) — копирует с 1 книги 1 листа  на 2 книгу 1 лист
Прости, а зачем мне копировать из одной книги Excel в другую книгу Excel? Пример с копированием листов я приводил в качестве наглядного пояснения «ограничения в 255 символов».
При использовании слияния (данные из книги Excel переносятся в документ Word) как можно использовать твой код?

PM MAIL WWW   Вверх
Romikgy
Дата 30.8.2006, 12:10 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

Цитата(Валк @  30.8.2006,  10:04 Найти цитируемый пост)
данные из книги Excel переносятся в документ Word

точнее ?

Цитата(Валк @  30.8.2006,  10:04 Найти цитируемый пост)
Прости, а зачем мне копировать из одной книги Excel в другую книгу Excel? 

ты сказал , есть проблема с переносом длинных строк из одного листа книги на другой лист книги, я показал как ее обойти, также можно копировать в ворд, юзай только CopyLongString , правда ее переделать надо smile

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 30.8.2006, 12:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
ты сказал , есть проблема с переносом длинных строк из одного листа книги на другой лист книги, я показал как ее обойти
Я тоже показал как её обойти ;о)

также можно копировать в ворд, юзай только CopyLongString
Хм, боюсь, это слишком сложно для такого user posted image как я.

PM MAIL WWW   Вверх
Romikgy
Дата 30.8.2006, 13:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

дык скажи че те конкретно надо , а не закоулками

ЗЫ сверху  есть кнопочка тыстрая цитата , те понравиться smile

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 30.8.2006, 16:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
дык скажи че те конкретно надо , а не закоулками
Так я вроде описал наверху задачу user posted image

Если интересует общая постановка задачи, то уже стыдно признаваться (ибо заранее знаю, что пошлют читать букварь).
Представь, что ты берёшь ипотечный кредит. Само собой у тебя будет целая пачка документов (кредитный договор, договор страхования, пара заявлений, несколько анкет и т. д. и т. п.). Все они стандартные, меняется только данные людей (Ф. И. О., паспортные данные, прописка…).
Менеджеры документы заполняют по порядку: расчёт, договор, заявление… Чтобы данные которые уже заведены не заносить по новой я решил их из какой-то базы раздавать по разным документам.
Раздача крупных кусков у меня провалилась.

PM MAIL WWW   Вверх
Romikgy
Дата 30.8.2006, 16:16 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

Цитата(Валк @  30.8.2006,  15:00 Найти цитируемый пост)
Представь, что ты берёшь ипотечный кредит

не представляю, даже таких страшных слов не знаю

Цитата(Валк @  30.8.2006,  15:00 Найти цитируемый пост)
из какой-то базы 

в качестве базы Эксель?

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 31.8.2006, 07:00 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
в качестве базы Эксель?
Да.
Может выбор не такой уж и верный, и способ решения задачи не совсем оптимальный, только с моими знаниями и навыками — единственный вариант распостранения одинаковых сведений среди одинаковых шаблонов документов.

PM MAIL WWW   Вверх
Romikgy
Дата 31.8.2006, 09:01 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

самый простой вариант , раздели надписи в ячейках , что бы было меньше 250 символов , или переноси как показал я через VBA , имхо так будет даже правильнее и документы можно и формировать и форматировать автоматически

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 31.8.2006, 11:12 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
самый простой вариант, раздели надписи в ячейках , что бы было меньше 250 символов
Да я так и сделал (сообщение от 29.8.2006, 12:02, третий абзац).

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

PM MAIL WWW   Вверх
Romikgy
Дата 31.8.2006, 11:21 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Любитель-программер
****

Профиль
Группа: Участник Клуба
Сообщений: 7325
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146

Цитата(Валк @  31.8.2006,  10:12 Найти цитируемый пост)
Хотелось бы сделать так, а то мой способ не совсем удобен и прост. 

ну дык учи вба, если что тут помагать будут smile
PS а то пространственные высказывания не несут информативности беседы smile

———————

Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности.

smile

PM   Вверх
Валк
Дата 31.8.2006, 12:07 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.5.2006

Репутация: нет
Всего: нет

Romikgy
учи вба, если что тут помагать будут
Не сегодня-завтра куплю букварь, денег уже выделили.
В связи с этим у меня вопрос не совсем по теме, какую книжку лучше купить? Мне на этом форуме посоветовали: Андрей Гарнаев, VBA, 848 с., БХВ-Петербург. Нашёл в нашем книжном магазине — 449 руб.
Я её просмотрел мельком, смущает, что не указана версия VBA (или хотя бы для какого он офиса), т. к. на работе я пользую Microsoft Office 2000, то боюсь, что если в ней рассматривается версия для более позднего офиса, то не все функции рассмотренные в книге будут работать у меня.
Может ещё какую книгу посоветуешь?

PM MAIL WWW   Вверх



















Страницы: (2) Все [1] 2 

Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Программирование, связанное с MS Office»

mihanik

staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми
компонентами


  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль «Помогите!» таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в

    «Книге отзывов о работе администрации»

  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!

С уважением
mihanik и
staruha.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »

Как использовать более 255 символов в функции СЦЕПИТЬ в Excel? На самом деле я также использую функцию СЦЕПИТЬ в функции ГИПЕРССЫЛКА в EXCEL. Пример выглядит так:

=HYPERLINK(CONCATENATE("http://www.google/com/morethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255charsmorethan255chars","morethan255chars morethan255charsmorethan255charsmorethan255charsmorethan25"),"link");

ОБНОВЛЕНИЕ: это не проблема с функцией СЦЕПИТЬ, а проблема с первым параметром функции ГИПЕРССЫЛКА. Использование строки длиной более 255 символов прямо / косвенно (например: = ГИПЕРССЫЛКА (K204, «ссылка»), где K204 содержит ссылку длиной 256 символов) приводит к сбою функции ГИПЕРССЫЛКА.

Я понимаю, что могу использовать укорочитель URL-адресов, но я делаю это для МНОГО ссылок, которые потребуют ВСЕГО ручного использования сокращателя URL-адресов.

12 ответов

Лучший ответ

ОБНОВЛЕНИЕ: из-за комментария Карла я пересмотрел свой ответ и обнаружил, что Excel 2007, похоже, не позволяет функциям, определяемым пользователем, больше устанавливать гиперссылки (вполне разумно, см. Мой собственный комментарий в коде). Таким образом, исходный код (под строкой) не работает в более поздних версиях Excel (я не тестировал Excel 2010, но предполагаю, что результат такой же). По историческим причинам я не удаляю старый код (редактор может подумать иначе — не стесняйтесь редактировать / удалять соответственно).

Остается установить длинные гиперссылки программно, например

Sub insertVeryLongHyperlink()

    Dim curCell As Range
    Dim longHyperlink As String

    Set curCell = Range("A1")   ' or use any cell-reference
    longHyperlink = "http://www.veryLongURL.com/abcde"  ' Or a Cell reference like [C1]

    curCell.Hyperlinks.Add Anchor:=curCell, _
                    Address:=longHyperlink, _
                    SubAddress:="", _
                    ScreenTip:=" - Click here to follow the hyperlink", _
                    TextToDisplay:="Long Hyperlink"

End Sub

Следующее больше не работает в Excel 2010; см. мой комментарий выше

«Скопировать гиперссылку из Word и вставить в Excel» заставило меня задуматься. Таким образом, очевидно, что ограничение есть как во встроенной функции ГИПЕРССЫЛКИ, так и в диалоговом окне «редактировать гиперссылку». С другой стороны, должно быть — и это действительно возможно — установить более длинные гиперссылки через VBA.

Этот код больше не работает в Excel 2010

Function myHyperlink(cell As Range, _
                        hyperlinkAddress As String, _
                        Optional TextToDisplay As Variant, _
                        Optional ScreenTip As Variant)

    ' Inserts a Hyperlink
    '   at the position     cell (this should be the position where the UDF is used,
    '                       since the return value of the UDF is = TextToDisplay)
    '   with the            hyperlinkAddress
    '   optional            TextToDisplay
    '   optional            ScreenTip

    ' #######################################
    ' Warning Warning Warning Warning Warning
    ' #######################################

    ' 1) Since it is really bad practice to have a function perform procedural
    '    tasks, you should not do this.
    ' 2) You have no garantee, the link is updated when the value hyperlinkAddress changes

    ' USE AT YOUR ONE RISK AND ONLY IN CASE OF EMERGENCIES :-)


    ' If more than one cell is selected as target range,
    ' use the top left cell
    Set cell = cell.Resize(1, 1)

    If IsMissing(TextToDisplay) Then
        TextToDisplay = hyperlinkAddress
    End If

    If IsMissing(ScreenTip) Then
        ScreenTip = hyperlinkAddress & " - Click here to follow the hyperlink"
    End If

    cell.Hyperlinks.Add Anchor:=ActiveCell, _
                        Address:=hyperlinkAddress, _
                        SubAddress:="", _
                        ScreenTip:=ScreenTip, _
                        TextToDisplay:=TextToDisplay

    ' There doesn't seem to be another way to set TextToDisplay
    myHyperlink = TextToDisplay

End Function

Используйте как обычную функцию Excel, но обязательно добавьте текущую ячейку в качестве первого параметра (т.е. следующая формула вставляется в ячейку A1)

=myHyperlink(A1,B1)
=myHyperlink(A1,B1,"TextToDisplay", "ScreenTip")

Вы не можете ни перетащить формулу, ни скопировать ее в другую ячейку. Если вы это сделаете, вам нужно разрешить пересчет формулы (ни ALT-CTRL-F9, ни ALT-CTRL-SHIFT-F9, поскольку принудительный пересчет, похоже, не работают), поэтому войдите в каждую ячейку, нажмите F2, чтобы активировать ее, и закончите с Return.

Надеюсь, я не помогу вам испортить слишком много Excel-Workbooks.

Вероятно, безопаснее написать явно запускаемый VBA, который выполняет итерацию по списку и записывает в гиперссылки. Таким образом, их можно использовать повторно, и в них не будет никаких функций.

С уважением, Андреас


4

Andreas J
29 Окт 2013 в 12:25

Возможно, вам не повезло. Кажется, что ограничение на количество символов для гиперссылок в Excel составляет 256, как указано здесь . Если вы проверите это самостоятельно (у меня тоже есть Excel 2007), =HYPERLINK(REPT("a",255)) работает, а =HYPERLINK(REPT("a",256)) — нет, и выдает ошибку #VALUE! .


1

ktdrv
9 Окт 2010 в 00:17

У меня есть Excel 2007, и я попытался создать ячейку с 300 символами в A1 и другую с 300 разными символами в B1.

Затем я сделал C1 = CONCATENATE(A1, B1).

Я вижу всех персонажей из обеих ячеек. Ничего не пропущено или усечено, и ошибок не было. Мне это нравится.

Что заставляет вас думать, что конкатенация не работает? У вас проблемы с просмотром результатов? Если ваша ячейка содержит более 1024 символов, в ячейке отображаются только первые 1024 символа. Однако они все еще там, и если вы скопируете и вставите их, все символы будут скопированы.

Изменить: Теперь, когда вы отредактировали свой вопрос, я понимаю, что проблема связана с HYPERLINK, а не с CONCATENATE.

Единственный способ обойти ограничение в 255 символов формулы HYPERLINK в Excel — скопировать гиперссылку из Word и вставить ее в ячейку Excel. Тогда это может быть очень долго. Я знаю, что это необоснованный ручной процесс, если у вас много ссылок, но кажется, что это единственный способ поместить его в электронную таблицу Excel и при этом все еще иметь гиперссылку, по которой можно щелкнуть и перенаправить. Если вам не нужно, чтобы он действовал как гиперссылка, я бы предложил переписать ваши запросы, чтобы гиперссылка возвращалась в виде собственного текстового поля, и тогда все будет в порядке.


1

hyprsleepy
9 Окт 2010 в 00:42

Вот пример VBA, который использует bitly.com для сокращения URL-адреса. Он основан на документации bitly API.

  1. Создайте бесплатную учетную запись на bitly.
  2. Действительный адрес электронной почты с bitly.
  3. Получите токен доступа от bitly.
  4. Замените токен доступа в коде VBA ниже, где написано MY_TOKEN.
  5. Скопируйте и вставьте код в Excel VBA.
  6. В ячейке напишите следующее ‘= Hyperlink (GetURL («какой-то действительно длинный URL»))’ без одинарных кавычек ‘. Примечание. Вместо передачи строки в GetURL () передайте ссылку на ячейку, в которой есть URL-адрес в виде текста.
Public Function GetURL(longUrl As String) As String
  Dim xml As Object

  longUrl = URLEncode(longUrl)
  Set xml = CreateObject("MSXML2.XMLHTTP.6.0")

  xml.Open "GET", "https://api-ssl.bitly.com/v3/shorten?format=xml&access_token=MY_TOKEN=" & longUrl, False
  xml.Send

  GetURL = xml.responsetext

  head = InStr(GetURL, "<url>") + 5
  tail = InStr(GetURL, "</url>")

  GetURL = Mid(GetURL, head, tail - head)

End Function

Function URLEncode(ByVal Text As String) As String
  Dim i As Integer
  Dim acode As Integer
  Dim char As String
  URLEncode = Text
  For i = Len(URLEncode) To 1 Step -1
    acode = Asc(Mid$(URLEncode, i, 1))
    Select Case acode
      Case 48 To 57, 65 To 90, 97 To 122
        ' don't touch alphanumeric chars
      Case 32
        ' replace space with "+"
        Mid$(URLEncode, i, 1) = "+"
      Case Else
        ' replace punctuation chars with "%hex"
        URLEncode = Left$(URLEncode, i - 1) & "%" & Hex$(acode) & Mid$(URLEncode, i + 1)
    End Select
  Next
End Function


1

Nathan
8 Янв 2014 в 00:35

Не знаю, если мой ответ все еще полезен, но у меня была такая же проблема пару дней назад, лучший способ и проверенный способ сделать работоспособную гиперссылку, превышающую ограничение в 255 символов, — сначала разделить ее с помощью CONCATENATE() и использовать ячейка с функцией CONCATENATE() в VBA .

Для меня это выглядит так:

A1 = LinkPart1
A2 = LinkPart2
A3 = LinkPart3

A5 = CONCATENATE( A1; A2; A3 )

VBA Код, который необходимо связать с A5 :

Sub insertVeryLongHyperlink()

    Dim curCell As Range
    Dim longHyperlink As String

    Set curCell = Range("A7")   ' or use any cell-reference
    longHyperlink = [A5]

    curCell.Hyperlinks.Add Anchor:=curCell, _
                    Address:=longHyperlink, _
                    SubAddress:="", _
                    ScreenTip:=" - Click here to follow the hyperlink", _
                    TextToDisplay:="Click Here"

    End Sub


1

user3666197
11 Дек 2015 в 21:21

Вместо того чтобы писать

=CONCATENATE("Toto";"Tata")

Поместите Toto в ячейку Z1 (например) и Tata в ячейку Z2 и напишите

=CONCATENATE(Z1;Z2)


0

GôTô
8 Окт 2010 в 23:14

Функция гиперссылки имеет жесткий предел, который нельзя переступить. У меня была аналогичная проблема, и я просто импортировал лист Excel в Open Office Calc и вуаля — все сработало мгновенно, и гиперссылка, которая раньше была слишком долгой, теперь может существовать столько, сколько я хотел.


0

Hexodus
25 Ноя 2015 в 16:59

Вы можете использовать процедуру VBA Shell () для запуска браузера и передачи ему URL-адреса в командной строке, переданной через вызов Shell (). Таким образом, URL-адрес может иметь любую длину, поддерживаемую механизмом оболочки.

Кроме того, вы можете получить этот URL-адрес из любого значения ячейки, дважды щелкнув эту ячейку пользователем. Это значение может быть создано из множества ячеек с помощью одного вызова функции CONCATENATE ()! Правильно: всего один звонок. CONCATENATE () примет большое количество параметров и создаст строку длиной более 255 символов. Вам не нужно кропотливо объединять множество отдельных конкатенаций или использовать множество ячеек-строителей. Подойдет один!

Макрос необходимо создать, открыв параметр ПРОСМОТР КОДА, когда вы щелкаете правой кнопкой мыши вкладку в нижней части рабочего листа. Затем напишите следующий феноменально короткий, простой и безболезненный фрагмент кода:

Option Explicit             
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)               
   If Selection.Count = 1 Then              
      If Left(Target.Value, 7) = "HTTP://" Then             
         Cancel = True              
         Shell ("""" + Range("Browser").Value + """" + " " + """" + Target.Value + """")                
      End If                
   End If               
End Sub     

Обратите внимание, что «Браузер» — это именованная ячейка, которая должна содержать путь вашего браузера без кавычек, будь то IE, Opera, Mozilla или Chrome. Вы должны назвать ячейку самостоятельно или изменить макрос, чтобы он имел жесткую ссылку на ячейку, например «A2». И, конечно же, это значение ячейки должно быть допустимым путем в браузере!

После того, как все это будет готово, вы можете дважды щелкнуть ЛЮБУЮ ячейку, значение которой начинается с текста «HTTP: //», и Excel откроет браузер с этим полным значением, независимо от его длины. Все, что вам затем нужно, это построить свою строку в этой ячейке и, возможно, отформатировать ее по цвету / шрифту, чтобы было очевидно, что это ячейка гиперссылки, которую нужно дважды щелкнуть. Текстовая подсказка рядом также может быть уместна!

Кстати, альтернативой строке Shell () в макросе является:

ThisWorkbook.FollowHyperlink Address:=Target.Value 

Хотя это также будет обрабатывать URL-адреса, длина которых превышает 255 символов, я обнаружил, что эта функция FollowHyperlink () вызывает отправку URL-адреса ДВАЖДЫ. Один раз самой функцией Excel (предположительно, чтобы проверить ее), а затем снова браузером по умолчанию, который открывается в Excel! Это может быть нежелательно (и не в моем случае). Вот почему я решил использовать вместо этого функцию Shell ().


0

Alex T
18 Май 2017 в 07:06

Вы можете создать гиперссылку в Microsoft Word, а затем скопировать ее в Excel. По какой-то причине эти элементы гиперссылки не ограничены 255 символами, но вы не сможете использовать функцию HYPERLINK().

Источник


0

towe
29 Май 2019 в 08:58

Предполагая, что у вас не так много URL-адресов гиперссылок> 255 символов, просто используйте функцию Link. Функция ссылки доступна из контекстного меню. Нет необходимости переходить в Word или любое другое приложение MSOffice. Я знаю, что это работает, поскольку у меня есть URL-адрес длиной 281 символ, и этот работает. У меня есть только два очень длинных URL-адреса в моем листе, поэтому, когда / если они нуждаются в обновлении, я отмечаю, что они должны быть выполнены в целевой ячейке, а не в моем листе адресов гиперссылок.


0

H’berger
27 Мар 2020 в 16:34

Отработав ответ Андреаса Дж., вы можете использовать приведенный ниже фрагмент кода VBA для создания столбца гиперссылок из столбца простого -текстовые URI. Предполагая, что столбец A содержит URI в виде обычного текста, а столбец B содержит желаемый текст ссылки, следующий код проходит через каждую строку в Range("A:C") и генерирует гиперссылку в столбце C:

Sub createLink(a As Range, b As Range, c As Range)
    Dim curCell As Range
    Dim longHyperlink As String
    Dim linkText As String

    Set curCell = a
    longHyperlink = b
    linkText = c

    curCell.Hyperlinks.Add Anchor:=curCell, _
                    Address:=longHyperlink, _
                    SubAddress:="", _
                    ScreenTip:="", _
                    TextToDisplay:=linkText
End Sub

Sub insertLinks()
    Dim a As Range, b As Range
    Set a = Range("A:C")
    
    For Each b In a.Rows
        Dim curCell As Range, longHyperlink As Range, linkText As Range
        Set curCell = b.Cells().Item(1, 3)
        Set longHyperlink = b.Cells().Item(1, 1)
        Set linkText = b.Cells().Item(1, 2)
        
        If longHyperlink = "" Then
            Exit For
        End If
        createLink curCell, longHyperlink, linkText
    Next
End Sub


0

mark
19 Май 2021 в 18:14

Понравилась статья? Поделить с друзьями:
  • Excel больше 1000000 строк
  • Excel больше 1 млн строк
  • Excel блокируется файл с общим доступом
  • Excel блокировка ячейки при условии
  • Excel блокировка формулы в ячейке