Превышение максимального предела Char в Excel - PullRequest
7 голосов
/ 08 октября 2010

Как использовать более 255 символов в функции CONCATENATE в Excel?На самом деле я также использую функцию CONCATENATE в функции HYPERLINK в EXCEL.Пример выглядит следующим образом:

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

ОБНОВЛЕНИЕ: Это не проблема с функцией CONCATENATE, а проблема с первым параметром функции HYPERLINK.Прямое / косвенное использование строки длиной более 255 символов (например, = HYPERLINK (K204, «ссылка»), где K204 содержит ссылку длиной 256 символов) не работает с функцией HYPERLINK

укорочение, но я делаю это для ALOT ссылок, которые потребуют ALOT ручного использования сокращателя URL.

Ответы [ 10 ]

4 голосов
/ 08 ноября 2010

ОБНОВЛЕНИЕ: Из-за комментария Карлса я вновь пересмотрел свой ответ и обнаружил, что 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» заставило меня задуматься.Очевидно, что ограничение находится как во встроенной HYPERLINK-функции, так и в диалоговом окне «Редактировать гиперссылку».С другой стороны, должно быть - и на самом деле - возможно устанавливать более длинные гиперссылки через 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.

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

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

1 голос
/ 11 декабря 2015

Не знаю, если мой ответ все еще полезен, но у меня была та же проблема пару дней назад, лучший способ и проверенный способ сделать работоспособную гиперссылку, которая превышает ограничение в 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 голос
/ 08 января 2014

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

  1. Создать бесплатную учетную запись на bitly .
  2. Действительный адрес электронной почты с bitly .
  3. Получить токен доступа от bitly .
  4. Заменить токен доступа в приведенном ниже коде VBA, где указано MY_TOKEN.
  5. Copyи вставьте код в VBA-файл Excel.
  6. В ячейке напишите следующее '= Гиперссылка (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 голос
/ 09 октября 2010

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

1 голос
/ 08 октября 2010

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

Тогда я сделал C1 = CONCATENATE(A1, B1).

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

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

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

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

0 голосов
/ 29 мая 2019

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

Источник

0 голосов
/ 18 мая 2017

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

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

Макрос необходимо создать, открыв опцию VIEW CODE, когда вы щелкаете правой кнопкой мыши вкладку в нижней части рабочего листа.Затем напишите следующий феноменально короткий, простой и безболезненный фрагмент кода:

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 илиХром.Вы должны сами назвать ячейку или изменить макрос, чтобы иметь жесткую ссылку на ячейку, например «A2».И, конечно же, это значение ячейки должно быть допустимым путем браузера!

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

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

ThisWorkbook.FollowHyperlink Address:=Target.Value 

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

0 голосов
/ 25 ноября 2015

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

0 голосов
/ 23 августа 2012

Ребята, я думаю, что сокращение URL VBA поможет вам. Вот тот, который я нашел сегодня. Отлично работает: http://www.jpsoftwaretech.com/shorten-urls-with-bit-ly-web-api-and-vba/

0 голосов
/ 08 октября 2010

Вместо записи

=CONCATENATE("Toto";"Tata")

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

=CONCATENATE(Z1;Z2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...