Soru Birleştirilmiş Hücre Kopyalama (Makro veya VBA ile)

ZuCChiNi

Altın Üye
Katılım
26 Haziran 2006
Mesajlar
265
Excel Vers. ve Dili
Excel 2016, TR, x32
Altın Üyelik Bitiş Tarihi
10-10-2029
Bilgisayar kullanırken fareden çok klavyeyi kullanıyorum.
Excel'deki verileri sürekli olarak bir yerlere kopyalayıp yapıştırmam gerekiyor.
Tek hücredeki verileri Ctrl+C ile kopyalayıp Windows ortamındaki diğer alanlara (Word, internet tarayıcı, metin dosyası vs) yapıştırmak kolay oluyor.
Ancak birleştirilmiş hücrelerde genelde sıkıntı çıkıyor. Bu yüzden birleştirilmiş hücreye çift tıklamak ya da F2 ile hücre içinden kopyalamam gerekiyor.

Konu ile ilgili araştırma yaptığımda daha çok aşağıdaki komutlarla karşılaştım.
Örneğin aşağıdaki kodları denediğimde hücreleri kopyalıyor.
Range("A1").MergeArea.Copy (A1:C1 birleştirilmiş hücreleri)
Range("A1:C1").Copy (A1:C1 birleştirilmiş hücreleri)
Ama bu şekilde değil panoya (clipboard'a) kopyalamak istiyorum.
Panodaya kopyaladığım veriyi istediğim ortama biçimlendirilmemiş salt metin olarak yapıştırmak istiyorum.

Birleştirilmiş hücrelerin içeriğini Makro veya VBA ile kopyalamayı kolaylaştıracak bir yöntem var mıdır?
 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,122
Excel Vers. ve Dili
Microsoft Office 2019 English
Range("A1").Copy
Range("xfd1").PasteSpecial Paste:=xlPasteValues
Range("xfd1").Copy

Xfd ssatırını temporary olarak kullanabilirsin
 

ZuCChiNi

Altın Üye
Katılım
26 Haziran 2006
Mesajlar
265
Excel Vers. ve Dili
Excel 2016, TR, x32
Altın Üyelik Bitiş Tarihi
10-10-2029
Maalesef "xfd1" kullanınca XFD1 hücresine yapıştırıyor, panoyo kopyalamıyor.
Normal kopyalamada sıkıntı yok. Tek istediğim panoya kopyalayabilmek.

PutInClipboard
 

muratboz06

Destek Ekibi
Destek Ekibi
Katılım
23 Mart 2017
Mesajlar
568
Excel Vers. ve Dili
Office365 TR
CopyTextToClipboard makrosunu bir kısayola atarsanız, rahat bir şekilde sadece değerleri kopyalarsanız.

Kod:
'Handle 64-bit and 32-bit Office
#If VBA7 Then
  Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
  Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
  Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As LongPtr, _
    ByVal dwBytes As LongPtr) As LongPtr
  Private Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
  Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
  Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr
  Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
    ByVal lpString2 As Any) As LongPtr
  Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal wFormat As LongPtr, _
    ByVal hMem As LongPtr) As LongPtr
#Else
  Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
  Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
  Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
  Private Declare Function CloseClipboard Lib "user32" () As Long
  Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  Private Declare Function EmptyClipboard Lib "user32" () As Long
  Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, _
    ByVal lpString2 As Any) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat _
    As Long, ByVal hMem As Long) As Long
#End If

Const GHND = &H42
Const CF_TEXT = 1
Const MAXSIZE = 4096

Function ClipBoard_SetData(MyString As String)
'PURPOSE: API function to copy text to clipboard
'SOURCE: www.msdn.microsoft.com/en-us/library/office/ff192913.aspx

#If VBA7 Then
  Dim hGlobalMemory As LongPtr, lpGlobalMemory As LongPtr
  Dim hClipMemory As LongPtr, x As LongPtr
#Else
  Dim hGlobalMemory As Long, lpGlobalMemory As Long
  Dim hClipMemory As Long, x As Long
#End If

'Allocate moveable global memory
  hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)

'Lock the block to get a far pointer to this memory.
  lpGlobalMemory = GlobalLock(hGlobalMemory)

'Copy the string to this global memory.
  lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)

'Unlock the memory.
  If GlobalUnlock(hGlobalMemory) <> 0 Then
    MsgBox "Could not unlock memory location. Copy aborted."
    GoTo OutOfHere2
  End If

'Open the Clipboard to copy data to.
  If OpenClipboard(0&) = 0 Then
    MsgBox "Could not open the Clipboard. Copy aborted."
    Exit Function
  End If

'Clear the Clipboard.
  x = EmptyClipboard()

'Copy the data to the Clipboard.
  hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)

OutOfHere2:
  If CloseClipboard() = 0 Then
    MsgBox "Could not close Clipboard."
  End If

End Function

Sub CopyTextToClipboard()
'PURPOSE: Copy a given text to the clipboard (using Windows API)
'SOURCE: www.TheSpreadsheetGuru.com
'NOTES: Must have above API declaration and ClipBoard_SetData function in your code

Dim txt As String

'Put some text inside a string variable
  txt = ActiveCell.Value

'Place text into the Clipboard
   ClipBoard_SetData txt

End Sub
Kaynak: https://www.thespreadsheetguru.com/blog/2015/1/13/how-to-use-vba-code-to-copy-text-to-the-clipboard
 

ZuCChiNi

Altın Üye
Katılım
26 Haziran 2006
Mesajlar
265
Excel Vers. ve Dili
Excel 2016, TR, x32
Altın Üyelik Bitiş Tarihi
10-10-2029
Teşekkür ederim @muratboz06
"txt = ActiveCell.Value satırını" "txt = Range("A1").Value" şeklinde değiştirdiğimde istediğim aralıkları kopyalayabiliyorum. :)
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İşinize bu linklerde yarayabilir.

 
Üst