Ограничение 255 символов excel

Можно так:  
Формула массива =ПОИСКПОЗ(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.  
Формулы массива не дружат с объединёнными ячейками. Для ввода формулы массива в объединённую ячейку, нужно вначале убрать объединение ячеек, потом ввести формулу массива, а потом опять объединить эти ячейки.  
В файле-примере приведены оба варианта.

Ограничение MATCH/ПОИСКПОЗ в 255 символов

coreee

Дата: Пятница, 24.07.2015, 12:17 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Добрый день.

Подскажите пожалуйста, можно ли обойти ограничение в 255 символов для функции MATCH (ПОИСКПОЗ)?
Идея использования формулы в том, что при добавлении артикулов возвращается номер соответствующей декларации. Но формула возвращает только номера деклараций, где список артикулов меньше 255 символов, насколько я понял…
По файлу во вложении, думаю, будет понятно.
Буду очень благодарен за помощь!

 

Ответить

coreee

Дата: Пятница, 24.07.2015, 12:20 |
Сообщение № 2

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

Во вложении

К сообщению приложен файл:

_-.xlsx
(40.4 Kb)

Сообщение отредактировал coreeeПятница, 24.07.2015, 12:24

 

Ответить

_Boroda_

Дата: Пятница, 24.07.2015, 12:38 |
Сообщение № 3

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Так можно

Код

=ИНДЕКС($A$19:$A$20;ПОИСКПОЗ(1=1;ЕЧИСЛО(ПОИСК(«* «&B2&»,*»;» «&$C$19:$C$20&»,»));))

Формула массива. Вводится одновременным нажатием Контрл Шифт Ентер


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

coreee

Дата: Пятница, 24.07.2015, 15:03 |
Сообщение № 4

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Excel 2013

_Boroda_, Спасибо Вам огромное! Очень выручили.
Принцип, правда, не понимаю, но главное, что работает :)

 

Ответить

_Boroda_

Дата: Пятница, 24.07.2015, 15:08 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Код

=ИНДЕКС($A$19:$A$20;ПОИСКПОЗ(1=1;ЕЧИСЛО(ПОИСК(«* «&B2&»,*»;» «&$C$19:$C$20&»,»));))

1. ПОИСК(«* «&B2&»,*»;» «&$C$19:$C$20&»,») — дает или число (если находит), или ошибку
2. ЕЧИСЛО(п.1) — дает ИСТИНА 9если в п.1 нашло) или ЛОЖЬ
3. 1=1 — дает ИСТИНА
4. ПОИСКПОЗ(п.3; п.2;) — ищет местоположение первого ИСТИНА в массиве из п.2
5. ИНДЕКС(массив; п.4) — вынимает из из массива то число по порядку, которое нашли в п.4

Добавлено
Звездочки не нужны.

Код

=ИНДЕКС($A$19:$A$20;ПОИСКПОЗ(1=1;ЕЧИСЛО(ПОИСК(» «&B2&»,»;» «&$C$19:$C$20&»,»));))


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Как использовать более 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

The following code will write 500 A into cell A1. Afterwards, every other A will be formatted bold.

Public Sub tmpSO()

For i = 1 To 500
    Range("A1").Value = Range("A1").Value & "A"
Next i

For i = 1 To 500
    If i Mod 2 = 0 Then Range("A1").Characters(i, 1).Font.Bold = True
Next i

End Sub

I hope that solves your problem.

Note: your code won’t work because you are trying to insert a character after L + 1. Yet, your string is currently only L long and not L + 1. Once you have inserted another A you will have L + 1 characters in that cell. But not yet. So, if you are using your code with Range("A1").Characters(L, 1).Insert ("A") then it will work.

Edit#1:

The following code has been tested and correctly inserts 500 A into cell A1. Furthermore, some of the A will be formatted bold.

Sub TestSub()
    Dim i As Integer

    Range("A1").ClearContents
    Range("A1").WrapText = True
    Range("A1").Font.Bold = False

    For i = 1 To 500
        Range("A1").Characters(i, 1).Insert ("A")
    Next i
    For i = 1 To 500 Step 10
        Range("A1").Characters(i, 3).Font.Bold = True
    Next i
End Sub


Форум программистов 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 | Следующая тема »

Like this post? Please share to your friends:
  • Оглавления изображений в word
  • Оглавлением в текстовом редакторе ms word
  • Оглавление в word ссылка в тексте
  • Оглавление таблиц в word 2010
  • Оглавление в word своя нумерация