Вчера на Планете был задан вопрос, и разбираясь с ним выяснил критерий не работоспособности кодов, использующих конструкцию [vba]
Код
Application.Trim(Диапазон.Value)
[/vba] В такой записи число символов в ячейке не более 255. Иначе ошибка. [vba]
Код
Sub q() arr = Application.Trim(Range("a1:a2")) ' число символов в ячейке не ограничено [d1] = arr(2, 1) arr1 = Application.Trim(Range("a1:a2").Value) ' max 255 символов в ячейке [d10] = arr1(2, 1) End Sub
[/vba]
Вчера на Планете был задан вопрос, и разбираясь с ним выяснил критерий не работоспособности кодов, использующих конструкцию [vba]
Код
Application.Trim(Диапазон.Value)
[/vba] В такой записи число символов в ячейке не более 255. Иначе ошибка. [vba]
Код
Sub q() arr = Application.Trim(Range("a1:a2")) ' число символов в ячейке не ограничено [d1] = arr(2, 1) arr1 = Application.Trim(Range("a1:a2").Value) ' max 255 символов в ячейке [d10] = arr1(2, 1) End Sub
Да не вопрос. Давно у меня валяется несколько вариантов
[vba]
Код
Glue_TXT() ' СКЛЕИТЬ тексты из выделенных ячеек If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim Delimeter$, sLF$, sText$, rCell As Range If MsgBox("Переносить тексты из ячеек по строкам?", vbYesNo + vbQuestion + vbDefaultButton2, "Параметры объединения") = vbYes Then sLF = vbLf Delimeter = InputBox("Введите разделитель текстов ячеек:", "Параметры объединения", " ") For Each rCell In rRng If Len(rCell.Value) Then sText = sText & IIf(Len(sText), Delimeter & sLF, "") & rCell.Value Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
и упрощённый - без вопросов вставляющий как разделитель перевод строки
[vba]
Код
Sub Glue_TXT_with_Chr10() ' СКЛЕИТЬ тексты из выделенных ячеек с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim sText$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If Len(rCell.Value) Then sText = sText & IIf(Len(sText), vbLf, "") & rCell.Value Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
ну и ещё - экзотика - с нумерацией строк (давно делал, уже не помню зачем, но было очень нужно)
[vba]
Код
Sub Glue_TXT_and_Num() ' СКЛЕИТЬ тексты из выделенных ячеек в нумерованный список с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim sText$, rCell As Range, iItem%: iItem = 1 ' начальный номер пункта списка For Each rCell In rRng If Len(rCell.Value) Then sText = sText & IIf(Len(sText), vbLf, "") & CStr(iItem) & ". " & rCell.Value iItem = iItem + 1 End If Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
Да не вопрос. Давно у меня валяется несколько вариантов
[vba]
Код
Glue_TXT() ' СКЛЕИТЬ тексты из выделенных ячеек If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim Delimeter$, sLF$, sText$, rCell As Range If MsgBox("Переносить тексты из ячеек по строкам?", vbYesNo + vbQuestion + vbDefaultButton2, "Параметры объединения") = vbYes Then sLF = vbLf Delimeter = InputBox("Введите разделитель текстов ячеек:", "Параметры объединения", " ") For Each rCell In rRng If Len(rCell.Value) Then sText = sText & IIf(Len(sText), Delimeter & sLF, "") & rCell.Value Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
и упрощённый - без вопросов вставляющий как разделитель перевод строки
[vba]
Код
Sub Glue_TXT_with_Chr10() ' СКЛЕИТЬ тексты из выделенных ячеек с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim sText$, rCell As Range For Each rCell In Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If Len(rCell.Value) Then sText = sText & IIf(Len(sText), vbLf, "") & rCell.Value Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub
[/vba]
ну и ещё - экзотика - с нумерацией строк (давно делал, уже не помню зачем, но было очень нужно)
[vba]
Код
Sub Glue_TXT_and_Num() ' СКЛЕИТЬ тексты из выделенных ячеек в нумерованный список с переносами строк If TypeName(Selection) <> "Range" Then Exit Sub Dim rRng As Range: Set rRng = Intersect(Selection, ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible)) If rRng Is Nothing Then Exit Sub If rRng.Cells.Count = 1 Then Exit Sub Dim sText$, rCell As Range, iItem%: iItem = 1 ' начальный номер пункта списка For Each rCell In rRng If Len(rCell.Value) Then sText = sText & IIf(Len(sText), vbLf, "") & CStr(iItem) & ". " & rCell.Value iItem = iItem + 1 End If Next rCell sText = Application.Trim(sText) With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}"): .SetText sText: .PutInClipBoard: End With MsgBox "Объединённый текст помещён в буфер обмена", , "Операция завершена успешно!" End Sub