Range Nesnesi-3 (Hücreleri, Satırları ve Sütunları Kopyalama Yöntemleri)

R

VBA|Seviye|Temel

Range Nesnesi-2 (Hücre Biçimlendirme)” isimli makalede detaylı olarak ele alındığı üzere, hücrelerin (görünen) değerleri dışında arka planda, (tarih, sayı, metin, hizalama, yazı tipi, yazı büyüklüğü, yazı rengi, kenarlık, hücre kilidi, formül vb.) çok sayıda biçimsel özelikleri de vardır. Aşağıdaki metotlarda öncelikle, hücrelerde, satırlarda veya sütunlarda bulunan veriler ile birlikte ilgili hücrelerin/satırların/sütunların biçimsel özelliklerinin tümünün kopyalanması; sonra da hücrelerde, satırlarda veya sütunlarda bulunan (sadece) verilerin kopyalanması ele alınacaktır. Daha sonra ise özelleştirilmiş kopyalama yöntemleri gösterilecektir.

1.  Hücreleri, Veriler ve Formatlar ile Birlikte Tümüyle Kopyalamak

Hücreleri, içerdikleri veriler (ve formatlar) ile birlikte tümüyle kopyalamak için aşağıdaki metodu kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Hücreleri (biçimsel özellikleri ile birlikte) tümüyle kopyalama
Ws.Range("A2:A9").Copy Ws.Range("C2:C9") 'A2 ile A9 arasını C2-C9 arasındaki hücrelere kopyalar.
'Ws.Range(Ws.Cells(2, 1), Ws.Cells(9, 1)).Copy Ws.Range(Ws.Cells(2, 3), Ws.Cells(9, 3)) 'A2 ile A9 arasını C2-C9 arasındaki hücrelere kopyalar. Yukarıdaki ile aynı işlemi yapar.

End Sub

Yukarıdaki prosedürde yer alan Ws.Range(“A2:A9”).Copy Ws.Range(“C2:C9”) ifadesi yerine, Ws.Range(“A2:A9”).Copy Ws.Range(“C2“) ifadesini de kullanabilirsiniz. Kopyalanan kaynak hücrelerin sınırlarını tam olarak belirtmeniz gerekmekle birlikte, yapıştıracağınız hedef hücrelerin sınırlarını tam olarak belirtmeniz gerekmez. Ancak Ws.Range(“A2:A9”).Copy Ws.Range(“C2:C12“) gibi satır veya sütun sayısının eşleşmediği bir ifade (kullandığınız MS Office sürümüne göre değişmekle birlikte) kullanmanız durumunda hata alabilirsiniz.

Not: Kopyalama yöntemlerine ilişkin yapılan açıklamalarda verilerin kopyalandığı “A2:A9” arasındaki hücreler kaynak, yapıştırılacağı “C2:C9” arasındaki hücreler ise hedef olarak ifade edilecektir.

Prosedürün çalıştırılmadan önceki ve çalıştırıldıktan sonraki ekran görüntüleri aşağıdadır.

Yukarıdaki metot ile hücrelerin içindeki veriler ile birlikte hücrelerin arka plan rengi, yazı tipi, yazı büyüklüğü vb. tüm biçimsel özellikleri de kopyalanmıştır. Reset butonu yapılan işlemi, prosedürün çalıştırılmadan önceki haline geri döndürmek için ilave edilmiştir.

Private Sub CommandButton2_Click()
Dim Ws As Worksheet

'Reset
Set Ws = ThisWorkbook.Worksheets(1)
ThisWorkbook.Worksheets(2).Columns("A:F").Copy Ws.Columns("A:F") 'Ham verileri sayfa2 den al.
ThisWorkbook.Worksheets(2).Columns("C:F").Copy ThisWorkbook.Worksheets(3).Columns("A") 'Ham verileri sayfa2 den al.

End Sub

Sayfa2’nin ekran görüntüsü aşağıdadır.

2.  Satırları, Veriler ve Formatlar ile Birlikte Tümüyle Kopyalamak

Satırları, içerdikleri veriler (ve formatlar) ile birlikte tümüyle kopyalamak için aşağıdaki metodu kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Satır kopyalama
Ws.Rows(2).Copy Ws.Rows(11) '2 no.lu satırı (A kolonundan sayfanın son kolonuna kadar) tümüyle 11. satıra kopyalar.
'Çoklu satır kopyalama
Ws.Rows("2:4").Copy Ws.Rows("13:15") '2 ile 4 no.lu satır aralığını (A kolonundan sayfanın son kolonuna kadar) tümüyle 13 ile 15. satır arasına kopyalar.

End Sub

Prosedürün çalıştırılmadan (Reset butonuna tıklanması sonrası) ekran görüntüsü aşağıdadır.

Prosedürün çalıştırıldıktan sonraki ekran görüntüsü aşağıdadır.

3.  Sütunları, Veriler ve Formatlar ile Birlikte Tümüyle Kopyalamak

Sütunları, içerdikleri veriler (ve formatlar) ile birlikte tümüyle kopyalamak için aşağıdaki metodu kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Kolon kopyalama
Ws.Columns("A").Copy Ws.Columns("C") 'A kolonunu (A1 den A son satıra kadar) tümüyle C kolonuna kopyalar.
'Çoklu kolon kopyalama
Ws.Columns("A:B").Copy Ws.Columns("C:D") 'A ile B kolonu arasını (A1 den B son satıra kadar) tümüyle C ile D kolonu aralığına kopyalar.

End Sub

Prosedürün (Reset butonuna tıklandıktan ve tekrar) çalıştırıldıktan sonraki ekran görüntüsü aşağıdadır.

4.  Hücrelerin Sadece Verilerini Kopyalamak

Eğer hücreleri, sadece içerdikleri veriler itibarıyla kopyalamak isterseniz aşağıdaki metodu kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
Ws.Range("A2:A9").Copy
Ws.Range("C2:C9").PasteSpecial Paste:=xlPasteValues 'A2 ile A9 arasını C2-C9 arasındaki sadece verileri kopyalar.

End Sub

Prosedürün (Reset butonuna tıklandıktan ve tekrar) çalıştırıldıktan sonraki ekran görüntüsü aşağıdadır.

Yukarıdaki resimde kaynak hücreleri temsil eden A2 ile A9 arasında bulunan verilerin, hedef hücreleri temsil eden C2 ile C9 arasındaki hücrelere kopyalanmasında sadece veriler esas alındığı için yazı tipi rengi, yazı büyüklüğü, yazı kalınlığı vb. hücrelerin biçimsel özellikleri kopyalanmamıştır. Bu yüzden kaynak hücrelerdeki veriler ile hedef hücrelerdeki veriler birbirinden farklı görünebilir. Burada en dikkat çeken 5. ve 6. satırda yer alan tarihe ve zamana ilişkin verilerdeki farklılıktır. Ancak Excel’de manuel olarak bir hücreye tarih veya zaman girildiğinde, Excel hücreye girilen tarih veya zaman ifadesini algılar ve onu arka planda sayısal bir değere dönüştürür. Söz gelimi yukarıda yer alan 27.10.2021 tarihinin ve 09:15 zamanının Excel tarafından saklanan sayısal değerlerinin sırasıyla, 44496 ve 0,385416667 olduğunu anlıyoruz. Dolayısıyla sadece verileri kopyala komutunu kullandığımız (ve hedef hücrelerin formatı da tarih ve zaman olmadığı) için ilgili tarihe ve zaman ilişkin değerlerin Excel tarafından dönüştürülmüş sayısal değerleri görüntülenmektedir.

Küçük bir detay olmakla birlikte, A2 ile A9 arasındaki hücreleri seçen kopyalama işaretini kaldırmak için prosedürü aşağıdaki şekilde revize edebilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
Ws.Range("A2:A9").Copy
Ws.Range("C2:C9").PasteSpecial Paste:=xlPasteValues 'A2 ile A9 arasını C2-C9 arasındaki sadece verileri kopyalar.
Application.CutCopyMode = False
Application.CutCopyMode = True

End Sub

Benzer şekilde C2 ile C9 arasındaki hücrelere ilişkin seçimi kaldırmak isterseniz de (başka bir hücreyi seçmek suretiyle) prosedürü aşağıdaki şekilde revize edebilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
Ws.Range("A2:A9").Copy
Ws.Range("C2:C9").PasteSpecial Paste:=xlPasteValues 'A2 ile A9 arasını C2-C9 arasındaki sadece verileri kopyalar.
Application.CutCopyMode = False
Application.CutCopyMode = True
Ws.Range("A1").Select

End Sub

Eğer hücreleri, sadece içerdikleri veriler itibarıyla kopyalamak isterseniz, yukarıdaki metottan farklı olarak aşağıdaki metodu da kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
Ws.Range("C2:C9").Value = Ws.Range("A2:A9").Value

End Sub

Yukarıdaki prosedürde yer alan Ws.Range(“C2:C9”).Value = Ws.Range(“A2:A9”).Value ifadesi yerine, Ws.Range(“C2”).Value = Ws.Range(“A2:A9”).Value ifadesini kullanırsanız (MS Office sürümüne göre değişmekle birlikte) hata alabilirsiniz. Bu yöntemde, kopyalanan kaynak hücreler ile birlikte yapıştıracağınız hedef hücrelerin sınırlarını da tam olarak belirtmenizde yarar var.

Prosedürün (Reset butonuna tıklandıktan ve tekrar) çalıştırıldıktan sonraki ekran görüntüsü aşağıdadır.

Yukarıdaki ekran görüntüsünde hedef hücreler bakımından bir önceki yöntem ile 5, 6 ve 9. satırların farklı olduğuna dikkat ediniz. Çok detay bir konu olduğundan konuyu dağıtmamak amacıyla söz konusu farklılıkların sebeplerine değinmiyorum. Ancak VBA ile programlama yaparken (aslında diğer programlama dilleri için de geçerlidir), yazdığınız kodları (projenizde kullanılması muhtemel veri tiplerine göre) çalıştırıp sonuçları görerek ilerlemeniz önerilir.

5.  Satırların Sadece Verilerini Kopyalamak

Eğer satırları, sadece içerdikleri veriler itibarıyla kopyalamak isterseniz, yukarıdaki metotları aşağıdaki şekilde kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
'Satır kopyalama
Ws.Rows(2).Copy
Ws.Rows(11).PasteSpecial Paste:=xlPasteValues '2 no.lu satırın (A kolonundan sayfanın son kolonuna kadar) sadece verilerini 11. satıra kopyalar.

''Çoklu satır kopyalama
'Ws.Rows("2:4").Copy
'Ws.Rows("13:15").PasteSpecial Paste:=xlPasteValues '2 ile 4 no.lu satır aralığının (A kolonundan sayfanın son kolonuna kadar) sadece verilerini 13 ile 15. satır arasına kopyalar.

End Sub

Sadece verilerin kopyalandığı tekli ve çoklu satır kopyalamaya ilişkin ekran görüntüleri aşağıdadır.

6.  Sütunların Sadece Verilerini Kopyalamak

Eğer sütunları, sadece içerdikleri veriler itibarıyla kopyalamak isterseniz, yukarıdaki metotları aşağıdaki şekilde kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

'Sadece verileri kopyalama
'Kolon kopyalama
Ws.Columns("A").Copy
Ws.Columns("C").PasteSpecial Paste:=xlPasteValues 'A kolonunun (A1 den A son satıra kadar) sadece verilerini C kolonuna kopyalar.

'Çoklu kolon kopyalama
'Ws.Columns("A:B").Copy
'Ws.Columns("C:D").PasteSpecial Paste:=xlPasteValues  'A ile B kolonu arasının (A1 den B son satıra kadar) sadece verilerini C ile D kolonu aralığına kopyalar.

End Sub

Sadece verilerin kopyalandığı tekli ve çoklu kolon kopyalamaya ilişkin ekran görüntüleri aşağıdadır.

7.  Özelleştirilmiş Kopyalama Yöntemleri

Yukarıda yer alan hücrelerin, satırların ve sütunların sadece verilerinin kopyalanmasına ilişkin yöntem, esasında özelleştirilmiş bir kopyalama yöntemidir. “PasteSpecial” metodu ile bir hücrenin/satırın/sütunun verisini veya formatını, yukarıdaki örneklere ilave olarak çok daha farklı şekillerde özelleştirilmiş olarak kopyalayabiliriz. Özelleştirilmiş kopyalama yöntemi olan “PasteSpecial” metodu ile birlikte kullanılan en yaygın “Paste” operatörleri aşağıdaki tabloda yer almaktadır.

Yukarıdaki tablonun kullanımına bir örnek olması amacıyla “xlPasteFormats” operatörüne ilişkin prosedür aşağıdadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Range("A2:A9").Copy
Ws.Range("C2").PasteSpecial Paste:=xlPasteFormats

End Sub

Eğer bir verinin satırlarını sütunlara, sütunlarını da satırlara, yani devrik yapıştırmak isterseniz, aşağıda gösterildiği gibi Transpose operatörünü kullanabilirsiniz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Range("A2:A4").Copy
Ws.Range("C2").PasteSpecial Transpose:=True

End Sub

Yukarıdaki prosedürü aşağıdaki şekilde de kullanabiliriz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Range("A2:B4").Copy 'DEĞİŞİKLİK BURADA YAPILDI!
Ws.Range("C2").PasteSpecial Transpose:=True

End Sub

Yukarıdaki prosedürü “Paste” operatörü ile birlikte aşağıdaki şekilde de kullanabiliriz.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)

Ws.Range("A2:B4").Copy
Ws.Range("C2").PasteSpecial Paste:=xlPasteValues, Transpose:=True

End Sub

Yukarıdaki yöntemde, yapıştırma işleminin normal gerçekleştirilmesi için Transpose:=True değerinin Transpose:=False olarak değiştirilmesi yeterli olacaktır. “PasteSpecial” metodunun “Paste” ve “Transpose” operatörü ile birlikte, “Operation” ve “SkipBlanks “ olarak ilave iki operatörü daha vardır. Ancak bunlar çok sık kullanılmadığı için değinilmemiştir. Sentaksı ise aşağıda gösterildiği gibi olup xlNone ve False değerleri ilgili operatörlerin faal olmadığını temsil eder.

Ws.Range(“C2”).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

8.  Aynı Çalışma Kitabının Farklı Bir Sayfasına Kopyalama Yapmak

Yukarıda gösterilen kopyalama işlemleri aynı dosyanın aynı sayfasına yapılmıştır. Aynı dosyada (çalışma kitabında) farklı bir sayfaya kopyalama yapmak için kopyalama metotlarında hiçbir değişiklik yapılmadan, sadece hedef sayfa değişkeninin aşağıdaki prosedürde gösterildiği gibi değiştirilmesi/ilave edilmesi yeterli olacaktır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, WsHedef As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)
Set WsHedef = ThisWorkbook.Worksheets(3) 'ya da sayfa no (3) yerine, sayfa ismi kullanılır. ThisWorkbook.Worksheets("Üçüncü Sayfa")

'Hücreleri (biçimsel özellikleri ile birlikte) tümüyle kopyalama
Ws.Range("A2:A9").Copy WsHedef.Range("C2") 'Sayfa1'deki A2 ile A9 arasını, Sayfa3'teki C2-C9 arasındaki hücrelere kopyalar.
'Ws.Range(Ws.Cells(2, 1), Ws.Cells(9, 1)).Copy WsHedef.Range(WsHedef.Cells(2, 3), WsHedef.Cells(9, 3)) 'Sayfa1'deki A2 ile A9 arasını, Sayfa3'teki C2-C9 arasındaki hücrelere kopyalar. Yukarıdaki ile aynı işlemi yapar.

End Sub

Hücreleri, satırları, sütunları tümüyle veya özelleştirilmiş şekilde aynı dosyanın farklı bir sayfasına kopyalamak için önceki başlıklarda ele alınan metotların tümü için geçerli olmak üzere, yukarıdaki prosedürde gösterildiği gibi hedef hücrelerin/satırların/sütunların solunda yer alan “Ws” değişkeni yerine, “WsHedef” olarak tanımladığımız yeni değişkeni yazmanız yeterli olur. Ancak “WsHedef” değişkeni, kopyalama işlemlerini yapan satırlardan sonra değil, yukarıdaki prosedürde gösterildiği gibi onlardan önce tanımlanmalıdır.

9.  Farklı Bir Çalışma Kitabına Kopyalama Yapmak

Farklı bir çalışma kitabına kopyalama yapmak için kopyalama metotlarında hiçbir değişiklik yapılmadan, sadece “WsHedef” değişkeninin aşağıdaki prosedürde gösterildiği gibi değiştirilmesi yeterli olacaktır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, WsHedef As Worksheet

Set Ws = ThisWorkbook.Worksheets(1)
'Hedef çalışma kitabı açık olmalıdır.(SADECE ALTTAKİ SATIRDA DEĞİŞİKLİK YAPILDI!)
Set WsHedef = Workbooks("Test.xlsx").Worksheets(1) 'ya da sayfa no (1) yerine, sayfa ismi kullanılır. Workbooks("Test.xlsx").Worksheets("ishakkutlu.com")

'Hücreleri (biçimsel özellikleri ile birlikte) tümüyle kopyalama
Ws.Range("A2:A9").Copy WsHedef.Range("C2") 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar.
'Ws.Range(Ws.Cells(2, 1), Ws.Cells(9, 1)).Copy WsHedef.Range(WsHedef.Cells(2, 3), WsHedef.Cells(9, 3)) 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar. Yukarıdaki ile aynı işlemi yapar.

End Sub

Eğer kopyalama yapacağınız hedef çalışma kitabı açık değilse aşağıdaki gibi hata alırsınız.

Karşılaşılacak hata kodu ve metni:

Run-time error ’9’:

Subscript out of range

Debug butonuna tıklarsanız hatalı satıra yönlendirilirsiniz.

“WsHedef” değişkeni isimli dosyanın açık olmadığı, yani nesnenin Set edilemediği-bulunamadığı için hatanın oluştuğunuz anlıyoruz. Kapalı bir Excel dosyasının açılması ve kaydedilmesine ilişkin “Workbook ve Worksheet Nesneleri-1” isimli makalenin “Open Metodu” isimli alt başlığı ile “Klasör ve Dosya Dizinleri” isimli makalenin “Dinamik Dosya Dizini Oluşturmak” isimli alt başlığını inceleyebilirsiniz.

Yukarıdaki prosedüre, dosyanın açılmasına ve kopyalama işlemi sonrasında kaydedilip kapatılmasına ilişkin ilaveler aşağıda yer almaktadır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, WsHedef As Worksheet

Dim PathFinder As String, StrUygPath As String
Dim StrFileName As String, StrTestPath As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

PathFinder = ThisWorkbook.Path 'Kodların bulunduğu dosyanın dizini bize referans olacak
StrUygPath = PathFinder & "\Uygulama Dosyaları\" 'Uygulama Dosyaları ise kodlardan yöneteceğimiz dosyaların bulunduğu klasör.
StrFileName = "Test.xlsx"
StrTestPath = StrUygPath & StrFileName 'Nihai olarak Test dosyasının bulunduğu dizin

Workbooks.Open (StrTestPath) 'Önce Test dosyasını aç

'___________________________________

Set Ws = ThisWorkbook.Worksheets(1)
'Hedef çalışma kitabı açık olmalıdır.
Set WsHedef = Workbooks("Test.xlsx").Worksheets(1) 'ya da sayfa no (1) yerine, sayfa ismi kullanılır. Workbooks("Test.xlsx").Worksheets("ishakkutlu.com")

'Hücreleri (biçimsel özellikleri ile birlikte) tümüyle kopyalama
Ws.Range("A2:A9").Copy WsHedef.Range("C2") 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar.
'Ws.Range(Ws.Cells(2, 1), Ws.Cells(9, 1)).Copy WsHedef.Range(WsHedef.Cells(2, 3), WsHedef.Cells(9, 3)) 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar. Yukarıdaki ile aynı işlemi yapar.

'___________________________________

Workbooks(StrFileName).Close SaveChanges:=True 'Test dosyasını kaydedip kapat

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

Karşılaşılması olası bir diğer hata da hedef dosyada bulunmayan bir sayfa adı veya numarası kullanmaktır. Konuyla ilgili örnek olması amacıyla, aşağıdaki prosedürde hedef dosyanın Set edildiği “WsHedef” değişkeninde Worksheets(1) yerine, hedef dosyada bulunmayan bir sayfa numarası olan Worksheets(3) yazılmıştır.

Private Sub CommandButton1_Click()
Dim Ws As Worksheet, WsHedef As Worksheet

Dim PathFinder As String, StrUygPath As String
Dim StrFileName As String, StrTestPath As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

PathFinder = ThisWorkbook.Path 'Kodların bulunduğu dosyanın dizini bize referans olacak
StrUygPath = PathFinder & "\Uygulama Dosyaları\" 'Uygulama Dosyaları ise kodlardan yöneteceğimiz dosyaların bulunduğu klasör.
StrFileName = "Test.xlsx"
StrTestPath = StrUygPath & StrFileName 'Nihai olarak Test dosyasının bulunduğu dizin

Workbooks.Open (StrTestPath) 'Önce Test dosyasını aç

'___________________________________

Set Ws = ThisWorkbook.Worksheets(1)
'Hedef çalışma kitabı açık olmalıdır.
Set WsHedef = Workbooks("Test.xlsx").Worksheets(3) 'ya da sayfa no (3) yerine, sayfa ismi kullanılır.

'Hücreleri (biçimsel özellikleri ile birlikte) tümüyle kopyalama
Ws.Range("A2:A9").Copy WsHedef.Range("C2") 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar.
'Ws.Range(Ws.Cells(2, 1), Ws.Cells(9, 1)).Copy WsHedef.Range(WsHedef.Cells(2, 3), WsHedef.Cells(9, 3)) 'Sayfa1'deki A2 ile A9 arasını, Test isimli Excel dosyasının Sayfa1'deki C2-C9 arasındaki hücrelere kopyalar. Yukarıdaki ile aynı işlemi yapar.

'___________________________________

Workbooks(StrFileName).Close SaveChanges:=True 'Test dosyasını kaydedip kapat

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

Karşılaşılacak hata kodu ve metni:

Run-time error ’9’:

Subscript out of range

“Test” isimli hedef dosyada indeks numarası 3 olan herhangi bir sayfa bulunamadığından yukarıdaki hata oluşmuştur. İlgili satırda sayfa numarası (verinin kopyalanacağı ve hedef dosyada bulunan sayfa indeks no.su) 1 yapılarak sorun düzeltilir.

 

 

İshak Kutlu, VBA Notları

Yorum Yap

İshak Kutlu

Veri & Otomasyon Uzmanı

Kurumsal iş akışlarını düzenleyen veri odaklı otomasyon sistemleri ve makine öğrenmesi tabanlı çözümler geliştirir. Gerçek operasyonel süreçler için ölçeklenebilir ve izlenebilir yapılar tasarlar.

YouTube   YouTube   YouTube   YouTube