Çözüldü TXT Veri Cekmede Sıkıntı

Katılım
27 Mayıs 2012
Mesajlar
28
Excel Vers. ve Dili
Office 2016 - ENG
Merhabalar herkese,
Yardimlariniz icin simdiden tesekkur ederim

Ekli dosya ile yaptigim txt dosyalarindan veriyi excele aktarmak, excel dosyasi icinde bulundugu klasorde ki tum txt dosyalarini acip verileri her birisi icin ayri acacagi sayfalara aktarmak ( niyetimiz bu sekildeydi, ne kadar calistigi tartisilir )

Ancak makro sadece ilk acmis oldugu dosyanin verilerini sanki digerlerinin gibi tum sayfalara aktarmakta, ekli dosyayi inceleleme firsatiniz olursa eminim cok daha iyi anlayacaksinizdir, yardimci olabilirseniz cok buyuk bir dertten kurtarmis olacaksiniz, iyi calismlar

Saygilar
 

Ekli dosyalar

  • 126.1 KB Görüntüleme: 13
Katılım
27 Mayıs 2012
Mesajlar
28
Excel Vers. ve Dili
Office 2016 - ENG
Selamlar,

Sorunu cozmeyi basardim sanirsam, ileride birilerine yarari olabilir diye kodlari paylasmak istiyorum,

Makro bulundugu klasorde ki tum txt uzantili dosyalarinda ki datalari alarak, herbirine ilgili excel dosyasi icerisinde ayri sayfalar acip kayit yapmaktadir, buyrun kodlar.

Kod:
Sub MetinDosyasindanAL()
    Dim strFile As String, strPath As String
    Dim colFiles As New Collection
    Dim i As Integer
    Dim c As Range
    Dim sayfadi As String
    Dim uygulama As String
    Dim vStartAdobe As Variant
    Dim rLog As Range, rOut As Range
    Dim wsLog As Worksheet, wsOutp As Worksheet
    Dim Activesheet As Worksheet
    Dim yolum As String
    Dim Sheet As Worksheet
    Dim sKillAdobe As String
    Dim DataObj As MSForms.DataObject
    Set DataObj = New MSForms.DataObject
    

    yolum = Application.ActiveWorkbook.Path
    Application.CutCopyMode = False
    
    strPath = yolum & "\"
    strFile = Dir(strPath)
    ' Make a log sheet
    On Error Resume Next
    Set wsLog = Sheets("TXT-ProcessLog")
    On Error GoTo 0
    If wsLog Is Nothing Then
        Set wsLog = ThisWorkbook.Sheets.Add(before:=Sheets(1))
        wsLog.Name = "TXT-ProcessLog"
    End If
    Set rLog = wsLog.Range("A1")

    While strFile <> ""
        If StrComp(Right(strFile, 3), "txt", vbTextCompare) = 0 Then
            colFiles.Add strFile
        End If
        strFile = Dir
    Wend
    
 
  'klasorde ki dosyalarin ismini listele
    For i = 1 To colFiles.Count
        rLog.Offset(i, 0).Value = colFiles(i)
        strFile = Left(colFiles(i), Len(colFiles(i)) - 4)
    Next i


For Each c In Range("A:A")
If c <> "" Then

        'listede ki isme gore sayfa olustur
        Set wsOutp = ThisWorkbook.Sheets.Add(after:=wsLog)
        On Error Resume Next
        wsOutp.Name = c
 
    'dosyayi ac ve icinde kileri kopyala gardas
    uygulama = "C:\WINDOWS\system32\notepad.exe"
    vStartAdobe = Shell("" & uygulama & " " & strPath & c & "", 1)
    Application.Wait (Now + TimeValue("0:00:03"))
    SendKeys "^a", True
    SendKeys "^c", True

Application.Wait (Now + TimeValue("0:00:01"))
AppActivate Title:=ThisWorkbook.Application.Caption

With Activesheet
DataObj.GetFromClipboard
strPaste = DataObj.GetText(1)

[A1].Select
wsOutp.Paste

sKillAdobe = "TASKKILL /F /IM notepad.exe"
Shell sKillAdobe

Application.Wait (Now + TimeValue("0:00:01"))
End With
End If
Next c


Application.DisplayAlerts = True
End Sub

Saygilar.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Paylaşım için teşekkürler.
Bir hatırlatma: aynı tür değişkenlerin tanımlamasını tek satırda yapabilirsiniz.
Örneğin : Dim strFile, strPath, sayfaadi, uygulama, yolum, sKillAdobe As String

Durum ile ilgili olarak Sayın @Haluk Bey'in cevabı ile benim 5 numaralı cevabımı okuyunuz.
.
 
Son düzenleme:

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Paylaşım için teşekkürler.
Bir hatırlatma: aynı tür değişkenlerin tanımlamasını tek satırda yapabilirsiniz.
Örneğin : Dim strFile, strPath, sayfaadi, uygulama, yolum, sKillAdobe As String

Ömer Bey, üzgünüm ama belirttiğiniz şekilde bir tanımlama ile sadece sKillAdobe As String kısmında açıkça belirtildiği için sKillAdobe değişkeni String olur, diğerlerinin tümü Variant olur.

Bu nedenle; ister aynı satırda, isterse farklı satırda olsun bütün değişkenlerin ayrı ayrı açıkça deklare edilmeleri gerekir. Tipi deklare edilmemiş tüm değişkenler Variant tipinde olur.

Aşağıdaki 2 adet örnekte durumu izleyebilirsiniz...

Kod:
Sub Test()
    Dim strFile, strPath, sayfaadi, uygulama, yolum, sKillAdobe As String
 
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
 
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
 
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
 
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
End Sub
'
'
'
Sub Test2()
    Dim strFile As String, strPath As String, sayfaadi As String, uygulama As String, yolum As String, sKillAdobe As String
 
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
 
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
 
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
 
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
End Sub
.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Mesajınızı gördüğümde hemen VBA açtım ve iki türlü tanımlama yaparak LocalsWindow kısmında belirttiğiniz hususu kısmen fark etmiş oldum.
Bana tek satırda yapılabilir gibi gelmişti doğrusu.

Verdiğiniz kod'dan hareketle aşağıdaki gibi denediğimde sadece sonuncusunun String, diğerlerinin ise Empty sonuç döndürdüğünü gördüm.
Verdiğiniz kodu denediğimde de durum daha net olarak olay anlaşılmış oldu.

Önceki cevabıma bir not ekledim.

Uyarı / bilgi için teşekkürler.
.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Rica ederim Ömer Bey... Bu konu genellikle karıştırılır. Muhtemelen kod satırını okurken araya virgül konulduğunu görünce o şekilde değerlendiriliyor halbuki VBA'de virgül (",") işareti genelde argümanlar arasında "ayraç" olarak kullanılır. Yani, kod satırındaki "," karakteri dil bilgisindeki anlamından daha farklı olarak kullanılmaktadır.

Bu arada; eğer maksat kod yazımını kısaltmak anlamında ise o zaman Modül seviyesinde bir deklarasyon yaparak değişkenleri kısa yoldan tanımlayabiliriz.

Örnek olarak, yeni bir modül ilave edip aşağıdaki kodu çalıştırdığımızda; "S" ile başlayan tüm değişkenlerin "String" tipinde derlenmiş olduğunu görebiliriz....

Kod:
DefStr S
'
Sub Test2()
    Dim uygulama As String, yolum As String
    
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
    
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
End Sub
.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Şimdiye dek; pratik, hiç bilmeyene yönelik hazırlanmış kaynağa pek rastlamadım, bulsam affetmem.
Örneğin şu anda ilk kez görüyorum DefStr S gibi bir şeyi.

Deneme / yanılma yöntemiyle bir şeyler öğrenmeye çalışan biri olarak;
kendimi hedef alan şu veciz sözü paylaşayım bari: "EĞİTİM ŞART!" :)
.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
O zaman ufak bir bilgi daha vereyim ...

Benzer şekilde, alpha karakterlerle (A-Z) başlayan tüm değişkenler "String" tipinde olacak şekilde tanımlanabilir....

Kod:
DefStr A-Z
'
Sub Test3()
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
    
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
    
    uygulama = 123
    MsgBox "uygulama = " & uygulama & " >>>>  " & TypeName(uygulama)
End Sub
.

.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
13,002
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Sanki size de sorduğumu hatırlıyorum KAYNAK mevzusunu.
Eğitim alanımız da bu konularla ilgili olmayınca;
deneme/yanılma veya rastgeldiğimizde forum veya diğer alanlarda araştırma yapmak dışında yapabileceğimiz pek bir şey olamıyor.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Veya, yine aynı şekilde ... belirlediğimiz bazı karakter aralığında başlayanları Integer, bazılarını String olarak tanımlayabiliriz.

Kod:
DefInt I
DefStr S-U
'
Sub Test4()
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
    
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
    
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
    
    uygulama = 123
    MsgBox "uygulama = " & uygulama & " >>>>  " & TypeName(uygulama)
    
    intVal = 123
    MsgBox "intVal = " & intVal & " >>>>  " & TypeName(intVal)
End Sub
.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,270
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Konu hakkında bir diğer kullanım çeşidi de şöyle olabilir ....

Burada, I ile başlayan veya S-U aralığında başlayan karakterlerden oluşan değişkenler String, kodda açıkça tanımlanmamış olduğu için ve Def tanımına da uymayan xVal değişkeni ise Variant olarak derlenecek, kodun çalışma sırasında aldığı değere göre tipi belirlenecektir.

Kod:
DefStr I, S-U
'
Sub Test6()
    strFile = 123
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
   
    strFile = "123"
    MsgBox "strFile = " & strFile & " >>>>  " & TypeName(strFile)
   
    sKillAdobe = 123
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
   
    sKillAdobe = "Adobe Reader"
    MsgBox "sKillAdobe = " & sKillAdobe & " >>>>  " & TypeName(sKillAdobe)
   
    uygulama = 123
    MsgBox "uygulama = " & uygulama & " >>>>  " & TypeName(uygulama)
   
    intVal = 123
    MsgBox "intVal = " & intVal & " >>>>  " & TypeName(intVal)
   
    xVal = 123
    MsgBox "xVal = " & xVal & " >>>>  " & TypeName(xVal)
End Sub

.
 
Katılım
18 Mayıs 2005
Mesajlar
395
Excel Vers. ve Dili
Excel 2019 TR
Ömer Baran ve Haluk bey Ne güzel insanlarsınız, sizleri keyifle takip ediyorum zekanıza ve yaptıklarıza hayranlık duyuyorum. iyi ki varsınız.
 
Üst