Скопируйте более 255 символов в Excel - PullRequest
0 голосов
/ 09 марта 2011

Компания располагает огромным ассортиментом отчетов о превосходстве, и, несмотря на то, что я не являюсь моей работой и не являюсь ее экспертом, я помогаю им:)

Один из отчетов представляет собой дневную матрицу из 100 тыс. Ячеек, разделенную на 8 аналитиков, где они получают список ссылок и другие разные данные от созданных сущностей. Каждый аналитик в своем отчете преобразовал все столбцы в один (подумайте сотни, скопировал по одному), упорядочил по имени, извлек все http ... и добавил инструмент для проверки ссылок.

Помимо макросов для удаления дубликатов и пустых ячеек, я написал один для преобразования матрицы ячеек в один столбец. Он работает, выбирая нужные ячейки, запускает макрос, пункт назначения и все готово.

Вот оно:

Sub SingleColumnSelection()

Dim v       As Variant
Dim nCol    As Long
Dim nRow    As Long
Dim rOut    As Range
Dim iCol    As Long

v = Selection

nRow = UBound(v, 1)
nCol = UBound(v, 2)
Set rOut = Application.InputBox("Select destination", Type:=8).Resize(nRow, 1)
If rOut Is Nothing Then Exit Sub
For iCol = 1 To nCol
    rOut.Value = WorksheetFunction.Index(v, 0, iCol)
    Set rOut = rOut.Offset(nRow)
Next iCol
End Sub

Я сделал это 2 месяца назад, теперь сегодня мне иногда говорили, что у них проблемы, я начал копать и нашел 2 ссылки, которые сломали макрос (в отчете с 20k).

Оба имеют около 300 символов, и приложение разрывается после 255 в rOut.Value = WorksheetFunction.Index (v, 0, iCol), когда оно читает из> 255 символьных ячеек (я думаю).

Любой обходной путь, для неграмотного, у меня есть идеи, и я пытаюсь найти альтернативы, но изменит рабочий процесс для аналитика в этом отчете

1 Ответ

0 голосов
/ 19 мая 2011

Попробуйте вместо этого:

Sub SingleColumnSelection()

Dim rngOut    As Range
Dim rngSelection As Range
Dim rngCol As Range

Set rngSelection = Selection
Set rngOut = Application.InputBox("Select destination", Type:=8).Resize(rngSelection.Rows.Count, 1)
If rngOut Is Nothing Then Exit Sub

For Each rngCol In rngSelection.Columns
  rngCol.Copy Destination:=rngOut
  Set rngOut = rngOut.Offset(rngSelection.Rows.Count)
Next rngCol

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...