Laat aanhalingstekens weg bij kopiëren vanuit cel

Probleem:
Bij het kopiëren van een cel uit Excel buiten het programma worden automatisch dubbele aanhalingstekens toegevoegd.

Details:
Ik gebruik Excel 2007 op een Windows 7-machine. Als ik een cel heb met de volgende formule:

="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."

De uitvoer in de cel (opgemaakt als getal) ziet er in Excel als volgt uit:

1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.

Goed en wel. Maar als ik de cel naar een ander programma kopieer, zoals Kladblok, krijg ik vervelende dubbele aanhalingstekens aan het begin en einde. Merk op dat de tabbladen die zijn gemaakt door “CHAR (9)” worden bewaard, wat goed is.

"1  SOME NOTES FOR LINE 1.  2     SOME NOTES FOR LINE 2."

Hoe kan ik voorkomen dat deze dubbele aanhalingstekens verschijnenwanneer ik naar een ander programma kopieer? Met andere woorden, kan ik voorkomen dat deze automatisch worden toegevoegd wanneer de cel naar het klembord wordt gekopieerd?


Antwoord 1, autoriteit 100%

Ik had net dit probleem en het inpakken van elke cel met de functie CLEANloste het voor mij op. Dat zou relatief eenvoudig moeten zijn door =CLEAN(te doen, uw cel te selecteren en vervolgens de rest van de kolom automatisch in te vullen. Nadat ik dit had gedaan, had plakken in Kladblok of een ander programma geen dubbele aanhalingstekens meer .


Antwoord 2, autoriteit 39%

Als je probeert te plakken in Word-Pad, Notepad++ of Word, zou je dit probleem niet hebben.
Om de celwaarde als pure tekst te kopiëren, moet u een macro gebruiken om te bereiken wat u beschrijft:

Plaats de volgende code in een standaardmodule in de werkmap waar u dit wilt toepassen (of in uw Personal.xls als u deze voor meerdere werkmappen wilt gebruiken:

Code:

Sub CopyCellContents()
'create a reference in the VBE to Microsft Forms 2.0 Lib
' do this by (in VBA editor) clicking tools - > references and then ticking "Microsoft Forms 2.0 Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub

Om een ​​standaardmodule aan uw project (werkboek) toe te voegen, opent u de VBE met Alt+F11en klikt u met de rechtermuisknop op uw werkmap in de linkerbovenhoek Project venster en selecteer Insert>Module. Plak de code in het codemodulevenster dat aan de rechterkant wordt geopend.

Terug in Excel, ga naar Tools>Macro>Macro’s en selecteer de macro genaamd “CopyCellContents” en kies vervolgens Opties in het dialoogvenster. Hier kunt u de macro toewijzen aan een sneltoets (bijv. zoals CTRL+Cvoor normaal kopiëren) – ik gebruikte CTRL+Q .

Als u vervolgens een enkele cel naar Kladblok/waar dan ook wilt kopiëren, voert u Ctrl+q (of wat u ook kiest) uit en voert u een CTRL+Vof Bewerken>Plakken in de door u gekozen bestemming.

Mijn antwoord is gekopieerd (met een paar toevoegingen) van: hier

BEWERKEN: (van reacties)

Als u Microsoft Forms 2.0 Library niet kunt vinden in de lijst met referenties,
Je kunt proberen

  • in plaats daarvan op zoek naar FM20.DLL (bedankt @Peter Smallwood)
  • klikken op Bladeren en C:\Windows\System32\FM20.dll(32 bit
    Windows) (bedankt @JWhy)
  • klikken op Bladeren en C:\Windows\SysWOW64\FM20.dllselecteren
    (op 64-bit)

Antwoord 3, autoriteit 30%

Plak het eerst in Word, dan kun je het in Kladblok plakken en het zal verschijnen zonder de aanhalingstekens


Antwoord 4, autoriteit 8%

Als je meerderecellen wilt selecteren en hun waarden naar het klembord wilt kopiëren zonder al die vervelende aanhalingstekens, kan de volgende code handig zijn. Dit is een verbetering van de hierboven gegeven code van user3616725.

Sub CopyCells()
 'Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
 'Then set a keyboard shortcut to the CopyCells Macro (eg Crtl T)
 Dim objData As New DataObject
 Dim cell As Object
 Dim concat As String
 Dim cellValue As String
 CR = ""
  For Each cell In Selection
  If IsNumeric(cell.Value) Then
   cellValue = LTrim(Str(cell.Value))
  Else
   cellValue = cell.Value
  End If
  concat = concat + CR + cellValue
  CR = Chr(13)
 Next
 objData.SetText (concat)
 objData.PutInClipboard
End Sub

5, Autoriteit 4%

Mijn oplossing Wanneer ik de offertes sloeg, was het rendement van het einde van de tekst van het einde van de tekst van de koets. Vanwege deze koetsrendementen (ingevoegd door een extern programma), voegde Excel offertes toe aan de hele reeks.


Antwoord 6, autoriteit 3%

“Als u meerderecellen wilt selecteren en hun waarden naar het klembord wilt kopiëren zonder al die vervelende aanhalingstekens” (zonderde bugs in Peter Smallwood’s multi-Cells-oplossing) “de volgende code kan nuttig zijn.” Dit is een verbetering van de hierboven gegeven code van Peter Smallwood (wat “een verbetering is van de hierboven gegeven code van gebruiker3616725”). Dit lost de volgende bugs op in de oplossing van Peter Smallwood:

  • Vermijdt compilerfout “Variabele niet gedefinieerd” (voor “CR” – “clibboardFieldDelimiter” hier)
  • Converteer een lege cel naar een lege tekenreeks versus “0”.
  • Tabblad toevoegen (ASCII 9) versus CR (ASCII 13) na elke cel.
  • Voeg een CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) toe na elke rij.

OPMERKING: u kunt nog steeds geen tekens kopiëren die in een cel zijn ingesloten en waardoor het doelveld waarin u die cel plakt, wordt verlaten (bijv. Tab of CR bij plakken in het venster Tabel bewerken van Access of SSMS).


Option Explicit
Sub CopyCellsWithoutAddingQuotes()
' -- Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
' -- NOTE: You may have to temporarily insert a UserForm into your VBAProject for it to show up.
' -- Then set a Keyboard Shortcut to the "CopyCellsWithoutAddingQuotes" Macro (i.e. Crtl+E)
Dim clibboardFieldDelimiter As String
Dim clibboardLineDelimiter As String
Dim row As Range
Dim cell As Range
Dim cellValueText As String
Dim clipboardText As String
Dim isFirstRow As Boolean
Dim isFirstCellOfRow As Boolean
Dim dataObj As New dataObject
clibboardFieldDelimiter = Chr(9)
clibboardLineDelimiter = Chr(13) + Chr(10)
isFirstRow = True
isFirstCellOfRow = True
For Each row In Selection.Rows
    If Not isFirstRow Then
        clipboardText = clipboardText + clibboardLineDelimiter
    End If
    For Each cell In row.Cells
        If IsEmpty(cell.Value) Then
            cellValueText = ""
        ElseIf IsNumeric(cell.Value) Then
            cellValueText = LTrim(Str(cell.Value))
        Else
            cellValueText = cell.Value
        End If ' -- Else Non-empty Non-numeric
        If isFirstCellOfRow Then
            clipboardText = clipboardText + cellValueText
            isFirstCellOfRow = False
        Else ' -- Not (isFirstCellOfRow)
            clipboardText = clipboardText + clibboardFieldDelimiter + cellValueText
        End If ' -- Else Not (isFirstCellOfRow)
    Next cell
    isFirstRow = False
    isFirstCellOfRow = True
Next row
clipboardText = clipboardText + clibboardLineDelimiter
dataObj.SetText (clipboardText)
dataObj.PutInClipboard
End Sub

Antwoord 7

Als u regeleinden wilt behouden bij het plakken in Kladblok, vervangt u deze regel in de macro:

strTemp = ActiveCell.Value

door:

strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)

Antwoord 8

Veel eenvoudigere methode:
Plak eerst in een concept nieuwe e-mail – er worden geen aanhalingstekens opgenomen.
Ctrl-A en kopieer vanaf daar opnieuw, gooi de concept-e-mail weg.


Antwoord 9

Gebruik de onderstaande formule

=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

en je krijgt wat je wilt 😉


10

OPMERKING: De oorzaak van de aanhalingstekens is dat wanneer gegevens van Excel naar het klembord volledig voldoen aan de CSV-normen, waaronder citaten waarden die tabbladen bevatten, nieuwe lijnen enz. (en dubbele quote tekens worden vervangen door twee dubbele aanhalingstekens tekens)

Dus een andere benadering, vooral zoals in het geval van O OP wanneer tabs / nieuwe regels te wijten zijn aan de formule, is om alternatieve tekens te gebruiken voor tabbladen en harde rendementen. Ik gebruik ASCII-eenheidsscheider = Char (31) voor tabbladen en ASCII Record Separator = Char (30) voor nieuwe regels.

Plak vervolgens in de teksteditor, zal de extra CSV-regels niet betrekken en kunt u snel zoeken en vervangen om ze weer terug te zetten.

Als de tabbladen / nieuwe regels zijn ingebed in de gegevens, kunt u een zoekopdracht doen en vervangen in Excel om ze te converteren.

Of het nu gaat om het gebruik van de Formule of het wijzigen van de gegevens, de sleutel tot het kiezen van delimiters maakt nooit gebruik van tekens die in de feitelijke gegevens kunnen zijn. Dit is de reden waarom ik de ASCII-tekens met een laag niveau aanraden.


Antwoord 11

Het is ook mogelijk om deze dubbele aanhalingstekens te verwijderen door uw resultaat op de functie “Opschonen” te plaatsen.

Voorbeeld:

=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

De uitvoer zal worden geplakt zonder de dubbele aanhalingstekens in andere programma’s zoals Notepad++.

Other episodes