Bu yazımızda Excel dosyasından bir butona basınca VBA ile belirlediğimiz range deki değerleri belirlediğimiz adresteki Text dosyasına yazdıracağız arkadaşlar.
Developer sekmesinde butonumuzu sayfamıza ekleyelim ve aşağıdaki gibi kafanıza göre istediğiniz yere veri oluşturun.
Sonra butona çift tıklayarak excel vba editörümüzü açalım ve aşağıdaki kodumuzu ekleyelim. Aşağıdaki kodda dikkat etmeiz gereken yada değiştirmeniz gereken bir kaç yeri belirteyim.
Birincisi dosya adresi: Dosya adresini ister ilk satırdaki gibi zaman bilgisini de ekletip yazdırabilirsiniz. İsterseniz alt satırındaki gibi tek dosya yazıp hep aynı dosyaay basabilirsiniz.
İkincisi range bölgesini belirleme: Burayıda kendinize göre belirleyebilirsiniz.
' www.kaizen40.com Private Sub CommandButton1_Click() Dim filename As String, lineText As String Dim myrng As Range, i, j 'filename = ThisWorkbook.Path & "\textfile-" & Format(Now, "ddmmyy-hhmmss") & ".txt" ' tarihi dosya adresine yaz filename = ThisWorkbook.Path & "\text.txt" ' sadece dosya adresi Open filename For Output As #1 Set myrng = Range("A1", "A3") ' kaydedilecek excel bölgesini seç For i = 1 To myrng.Rows.Count For j = 1 To myrng.Columns.Count lineText = IIf(j = 1, "", lineText & ",") & myrng.Cells(i, j) Next j Print #1, lineText Next i Close #1 End Sub
Bir arkadaşımızın isteği üzerine Excel’ deki her satırı farklı klasörlerdeki text dosyalarına yazdırmak istiyorsanız aşağıdaki kodu kullanabilirsiniz.
Private Sub CommandButton1_Click() Dim filename As String, lineText As String Dim myrng As Range, i, j Set myrng = Range("A1", "A3") ' kaydedilecek excel bölgesini seç For f = 1 To 3 filename = ThisWorkbook.Path & "\" & f & "\text.txt" ' sadece dosya adresi Open filename For Output As #1 ' dosyayi ac Set myrng = Range("A1", "A3") ' kaydedilecek excel bölgesini seç Print #1, IIf(1, "", lineText & ",") & myrng.Cells(f, 1) Close #1 Next f End Sub
4 yorum
Esengül Çavdar · 15 Temmuz 2018 14:23 tarihinde
Merhaba,
Excelde mevcut olan verileri txt dosyasına aktarmak istiyorum, ancak yukarıda belirtmiş olduğunuz formattan biraz farklı. Şöyle ki: excelde 20 satırlık bir veri mevcut ve her satır için bir klasörüm var. Ben bütün verileri tek bir txt dosyasına aktarmak yerine her bir satır için ayrı bir txt dosyası oluşturmak istiyorum. Örneğin; 1. klasörün içindeki ilgili txt dosyasına exceldeki 1. satırdaki veriyi yaz , 2. klasör için 2. satırı yaz…
Oluşturduğum macroyu aşağıda paylaştım. Bununla oluşturduğum her txt dosyasına exceldeki bütün verileri aktarabiliyorum. Yardımcı olursanız sevinirim.
Sub Düğme2_Tıkla()
‘text dosyasına excelden veri aktarmak için
‘Declaring the variables
Dim FileName, sLine, Deliminator As String
Dim LastCol, LastRow, FileNumber As Integer
Dim Folder As String
Dim File1 As String
Dim File2 As String
For x = 1 To 3
Folder = “C:\test”
File1 = x
File2 = “GM_List.txt”
‘Excel Location and File Name
FileName = Folder & “\” & File1 & “\” & File2
‘Identifying the Last Cell
LastCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
LastRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
FileNumber = FreeFile
‘Creating or Overwrighting a text file
Open FileName For Output As FileNumber
‘Reading the data from Excel using For Loop
For i = 1 To LastRow
For j = 1 To LastCol
‘Removing Deliminator if it is wrighting the last column
If j = LastCol Then
sLine = sLine & Cells(i, j).Value
Else
sLine = sLine & Cells(i, j).Value & Deliminator
End If
Next j
‘Wrighting data into text file
Print #FileNumber, sLine
sLine = “”
Next i
‘Closing the Text File
Close #FileNumber
‘Generating message to display
MsgBox “Text file has been generated”
Next x
End Sub
yeryuzu · 16 Temmuz 2018 13:04 tarihinde
Basit olarak 3 satırı okuyup farklı klasörlerdeki text dosyalarına ekleyen kodu yazıya ekledim. İnceleyerek kendi kodunuza entegre edebilirsiniz. İyi çalışmalar.
kptn · 30 Mayıs 2022 18:05 tarihinde
çok zaman geçmiş bu konudan ama istediğim hücreleri yan yana yazdırmak istiyorum sonrasında alt satıra geçsin istiyorum her tıkladığımda alt satırdan devam etsin nasıl düzenleyebilirim bunu acaba ?
Remzi Şahinoğlu · 3 Haziran 2022 08:13 tarihinde
iç içe iki for döngüsü ile yapabilirsiniz.