Подтвердить что ты не робот

MS Excel добавляет разрыв строки при копировании ячейки

MS Excel 2010 или 2007 или любая версия, если вы копируете ячейку (не выбирая текст из ячейки), и вставка в любой редактор добавляет разрыв строки и отправляет курсор на следующую строку. Его раздражает, чтобы переместить курсор обратно в последнюю строку.

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

Я пробовал смотреть в Интернете, не нашел ничего, а также искал варианты excel, ничего не нашел.

4b9b3361

Ответ 1

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

Sub OwnCopy()
    Dim DataObj As New MSForms.DataObject

    DataObj.SetText ActiveCell.Value 'depending what you want, you could also use .Formula here
    DataObj.PutInClipboard
End Sub

Чтобы скомпилировать макрос, вам нужно включить "Библиотека объектов Microsoft Forms 2.0" в качестве ссылки (в редакторе Visual Basic, goto Tools- > References).

Теперь вы можете назначить этот макрос другому ярлыку (например, Ctrl - Shift - C), используя диалог макроса запуска по умолчанию - или даже перезаписать Ctrl - C, выполнив Application.OnKey "^c", "OwnCopy". Однако я бы не рекомендовал перезаписывать Ctrl - C, поскольку вы, скорее всего, захотите использовать всю другую информацию, которая обычно копируется с ним в любом другом случае, кроме вставки в редактор.

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

Если вам нужна более сложная процедура копирования, которая также может обрабатывать несколько ячеек/областей выделения, используйте этот код:

Sub OwnCopy2()
    Dim DataObj As New MSForms.DataObject
    Dim lngRow As Long
    Dim intCol As Integer
    Dim c As Range
    Dim strClip As String

    Const cStrNextCol As String = vbTab
    Const cStrNextRow As String = vbCrLf

    With Selection
        If Not TypeOf Selection Is Range Then
            On Error Resume Next
            .Copy
            Exit Sub
        End If

        If .Areas.Count = 1 Then
            For lngRow = 1 To .Rows.Count
                For intCol = 1 To .Columns.Count
                    strClip = strClip & _
                        Selection(lngRow, intCol).Value & cStrNextCol
                Next intCol
                strClip = Left(strClip, Len(strClip) - Len(cStrNextCol)) _
                    & cStrNextRow
            Next lngRow
        Else
            For Each c In .Cells
                strClip = strClip & c.Value & vbCrLf
            Next c
        End If
        strClip = Left(strClip, Len(strClip) - Len(cStrNextRow))
        DataObj.SetText strClip
        DataObj.PutInClipboard
    End With
End Sub

Ответ 2

Я копировал/вставлял большой файл переводов для нашего приложения между электронной таблицей Excel из переводческой компании и нашего кода. Чтобы удалить новую строку, я каждый раз подталкивал меня к стене.

В конце концов я скопировал весь лист и ввел его в новую таблицу Google Docs. Затем я использовал это для моих потребностей копирования, так как он не добавляет новую строку на копии, которую делает Excel.

Надеюсь, что это поможет!

Ответ 3

Я согласен, что это раздражает, но не уверен, что что-то будет сделано.

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

Чтобы проверить: В .NET Clipboard.GetText() показывает, что форматирование уже находится в буфере обмена

Вот некоторые IronPython для иллюстрации:

# Copy some cells in Excel, then run the following
import sys, clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Clipboard
Clipboard.GetText()