• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Txt dosyası olarak kaydetmede satır boşluğu

Katılım
25 Mart 2017
Mesajlar
177
Excel Vers. ve Dili
2013
Merhabalar

Makro ile getsaveas ile txt formatında dosya kaydediyorum.
Fakat normalde örneğin a ie e sütunları arasında, 100. Satırda biten verileri kaydettiğimde text dosyasında en alta boş bir satır oluşturuyor . Yani 101. Satır oluşturuyor ve bu satır boş. En alta Bu boş satırı oluşturmadan kaydetmenin bir yolu var mıdır? Yada txt de en altta bulunan bu boş satırı silmenin yolu.
Şimdiden teşekkür ederim
 
Makro kodunu koysanız daha kolay olurdu ama anladığım kadarıyla şöyle izah edeyim.

Son satır kodunuzu şu varsayarsak

Kod:
Son = Range("A" Rows.Count).End(xlUp).Row

Son satıra kadar kaydet yazdığınız yere şöyle yazmalısınız

Kod:
son - 1
 
dosyaadi = Application.GetSaveAsFilename
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:=dosyaadi & "txt", FileFormat:=xlText, CreateBackup:=False

kodlar yukarıda ki gibidir. txt olarak kaydedince sonda 1 satır boş bırakmaktadır.
 
Merhaba,

Excel dosyasında son kaydın boş olduğu kesin mi?
 
100.satıra kadar dolu fakat kaydedilen txt dosyasında ektradan 1 boş satır gözüküyor.
 
Kayıt yapılan txt dosyasını aç sayfanın sonuna gel klavyede aşağı ok tuşuna bas son satırdan sonra imleç orada duracaktır eğer imlecin durduğu yer ile dolu olan son veri arasında boşluk varsa sizin söylediğiniz gibi boşluk var demektir eğer boşluk yoksa txt dosyası olarak kayıt yaptığınız dosyalarda aşağı ok tuşu ile sona gidildiğinde imleç son boşluk hücresinde durur
 
Text dosyasında en sltta bulunan, o son boşluk hücresini nasıl silebiliriz
 
Deneyiniz.

Kod:
Option Explicit

Sub TXT_AKTAR()
    Dim Dosya As Variant, Dosya_Adi As String, Alan As Range, Veri As Variant, X As Integer, Y As Integer
    
    Application.ScreenUpdating = False
    
    Dosya_Adi = "C:\Users\Desktop\test.txt"
    
    Set Dosya = CreateObject("Scripting.FileSystemObject").CreateTextFile(Dosya_Adi, True)
    
    Set Alan = Range("A1:G100")
    
    For X = 1 To Alan.Rows.Count
        For Y = 1 To Alan.Columns.Count
            If Alan.Cells(X, Y).Value <> "" Then
                If Veri = "" Then
                    Veri = Alan.Cells(X, Y).Value
                Else
                    Veri = Veri & vbTab & Alan.Cells(X, Y).Value
                End If
            End If
        Next
        If Veri <> "" Then Dosya.WriteLine Veri
        Veri = Empty
    Next
    
    Dosya.Close
    
    Dosya = Shell("Notepad.exe " & Dosya_Adi, vbNormalFocus)
    AppActivate Dosya
    SendKeys "^{END}", True
    SendKeys "{BS}", True
    SendKeys "^s", True
    SendKeys "%{F4}", True

    Application.ScreenUpdating = True
    
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 
Merhaba Korhan Bey
Kodunuz,
Txt dosyasının tüm içini silmektedir.
Hata olabilir mi
 
Merhaba;

Korhan Bey konuyla ilginene kadar, aşağıdaki kodu deneyebilirsiniz.

A ve E sütunları arasındaki verileri, dosyanın kaydedilmiş olduğu dizindeki "YAZDIRILACAK.txt" dosyasına yazar. Text dosyasında ilave boş satır olmaması için kodda gerekli önlem alınmıştır.

Kod:
Sub Test()
    kayıt_yeri = ThisWorkbook.Path & "\YAZDIRILACAK.txt"
    If Dir(kayıt_yeri) <> "" Then Kill kayıt_yeri
    Set adoStream = CreateObject("ADODB.Stream")
    adoStream.Charset = "utf-8"
    adoStream.Type = 2
    adoStream.Open
    NoA = Range("A65536").End(3).Row
    For i = 1 To NoA
        With Worksheets("Sheet1")
            adoStream.WriteText .Cells(i, 1) & vbTab
            adoStream.WriteText .Cells(i, 2) & vbTab
            adoStream.WriteText .Cells(i, 3) & vbTab
            adoStream.WriteText .Cells(i, 4) & vbTab
            adoStream.WriteText .Cells(i, 5) & vbTab
            adoStream.WriteText .Cells(i, 6) & vbTab
            If i = NoA Then Exit For
            adoStream.WriteText vbCrLf
        End With
    Next
    adoStream.SaveToFile kayıt_yeri
End Sub
.
 
Son düzenleme:
Haluk bey merhaba
teşekkür ederim. tam istediğim gibi. son satırı siliyor.
bu koda şunu da ekleyebilir miyiz peki,
yazdırılacak dosyası içindeki bütün x400 görüdüklerileri yere S500 yazsın
böyle bir replace komutu da eklenebilir mi?
(ama bunu txt içerisinde yapacak)
 
Merhaba;

Bunu deneyebilirsiniz,

Kod:
Sub Test2()
    kayıt_yeri = ThisWorkbook.Path & "\YAZDIRILACAK.txt"
    If Dir(kayıt_yeri) <> "" Then Kill kayıt_yeri
    Set adoStream = CreateObject("ADODB.Stream")
    adoStream.Charset = "utf-8"
    adoStream.Type = 2
    adoStream.Open
    NoA = Range("A65536").End(3).Row
    For i = 1 To NoA
        With Worksheets("[COLOR=Red][B]Sheet1[/B][/COLOR]")
            adoStream.WriteText Replace(.Cells(i, 1), "x400", "S500") & vbTab
            adoStream.WriteText Replace(.Cells(i, 2), "x400", "S500") & vbTab
            adoStream.WriteText Replace(.Cells(i, 3), "x400", "S500") & vbTab
            adoStream.WriteText Replace(.Cells(i, 4), "x400", "S500") & vbTab
            adoStream.WriteText Replace(.Cells(i, 5), "x400", "S500") & vbTab
            adoStream.WriteText Replace(.Cells(i, 6), "x400", "S500") & vbTab
            If i = NoA Then Exit For
            adoStream.WriteText vbCrLf
        End With
    Next
    adoStream.SaveToFile kayıt_yeri
End Sub
 
Merhaba Haluk hocam
Kod çok işime yaradı. Gerçekten harika bi kod yazmışsınız.
Eliniz e sağlık çok teşekkür ederim
 
Kolay gelsin ...:8)
 
Merhaba,

Merhaba Korhan Bey
Kodunuz,
Txt dosyasının tüm içini silmektedir.
Hata olabilir mi

Haluk bey konuya çözüm getirmiş... Bende önerdiğim kodu deneyerek foruma eklemiştim.

Uyarınız üzerine tekrar denedim. Bende bahsettiğiniz durum oluşmadı.

Uygulamalı dosyalar ektedir.
 

Ekli dosyalar

Geri
Üst