ปัญหาที่เป็นไปได้เกี่ยวกับคำตอบจาก "user3616725":
ฉันใช้ Windows 8.1 และดูเหมือนว่าจะมีปัญหากับรหัส VBA ที่เชื่อมโยงจากคำตอบที่ยอมรับจาก "user3616725":
Sub CopyCellContents()
' !!! IMPORTANT !!!:
' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub
รายละเอียด:
เรียกใช้โค้ดด้านบนและวางคลิปบอร์ดลงในเซลล์ใน Excel ฉันได้รับสองสัญลักษณ์ที่ประกอบด้วยสี่เหลี่ยมที่มีเครื่องหมายคำถามอยู่ด้านในดังนี้: ⍰⍰ การวางลงใน Notepad จะไม่แสดงอะไรเลย
การแก้ไข:
หลังจากการค้นหาสำหรับค่อนข้างบางเวลาผมพบอีก VBA สคริปต์จากผู้ใช้ "Nepumuk" ซึ่งทำให้การใช้ API นี่คือรหัสของเขาที่ได้ผลสำหรับฉันในที่สุด:
Option Explicit
Private Declare Function OpenClipboard Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As Long
Private Const CF_TEXT As Long = 1&
Private Const GMEM_MOVEABLE As Long = 2
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
Private Sub StringToClipboard(strText As String)
Dim lngIdentifier As Long, lngPointer As Long
lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1)
lngPointer = GlobalLock(lngIdentifier)
Call lstrcpy(ByVal lngPointer, strText)
Call GlobalUnlock(lngIdentifier)
Call OpenClipboard(0&)
Call EmptyClipboard
Call SetClipboardData(CF_TEXT, lngIdentifier)
Call CloseClipboard
Call GlobalFree(lngIdentifier)
End Sub
หากต้องการใช้ในลักษณะเดียวกับรหัส VBA แรกจากด้านบนให้เปลี่ยน Sub "Beispiel ()" จาก:
Public Sub Beispiel()
Call StringToClipboard("Hallo ...")
End Sub
ถึง:
Sub CopyCellContents()
Call StringToClipboard(ActiveCell.Value)
End Sub
และเรียกใช้ผ่านเมนูมาโครของ Excel เช่นคำแนะนำจาก "user3616725" จากคำตอบที่ยอมรับ:
กลับไปที่ Excel ไปที่ Tools> Macro> Macros แล้วเลือกมาโครชื่อ "CopyCellContents" จากนั้นเลือก Options จากกล่องโต้ตอบ ที่นี่คุณสามารถกำหนดมาโครให้กับคีย์ลัด (เช่น Ctrl + c สำหรับสำเนาปกติ) - ฉันใช้ Ctrl + q
จากนั้นเมื่อคุณต้องการคัดลอกเซลล์เดียวไปยัง Notepad / ทุกที่เพียงแค่กด Ctrl + q (หรืออะไรก็ได้ที่คุณเลือก) จากนั้นกด Ctrl + v หรือ Edit> Paste ในปลายทางที่คุณเลือก
แก้ไข (21 พฤศจิกายน 2015):
@ ความคิดเห็นจาก "dotctor":
ไม่จริงจังนี่ไม่ใช่คำถามใหม่! ในความคิดของฉันมันเป็นส่วนเสริมที่ดีสำหรับคำตอบที่ยอมรับเนื่องจากคำตอบของฉันช่วยแก้ปัญหาที่คุณสามารถเผชิญได้เมื่อใช้รหัสจากคำตอบที่ยอมรับ ถ้าฉันจะมีชื่อเสียงมากขึ้นฉันจะสร้างความคิดเห็น
@ ความคิดเห็นจาก "Teepeemm":
ใช่คุณพูดถูกคำตอบที่ขึ้นต้นด้วยชื่อ "ปัญหา:" ทำให้เข้าใจผิด เปลี่ยนเป็น: "ปัญหาที่เป็นไปได้เกี่ยวกับคำตอบจาก" user3616725 ":" ตามความคิดเห็นฉันคงจะเขียนได้กระชับกว่านี้มาก