VBE form ve macro isimlerini yazdırmak

Katılım
17 Aralık 2008
Mesajlar
96
Excel Vers. ve Dili
excel 2010 türkçe
Pek çok user form ve macro içeren programımda, program adını içeren txt veya doc tipinde bir log file yaratmak istiyorum.
Program çalıştığında, baştan bu log file ın içi silinecek ve programın geçtiği userform ve macro ların isimleri bu logfile a alt alta yazdırılacak.
Bu mümkün müdür acaba?
Destek veren arkadaşlara şimdiden teşekkürler.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Bunun için; her olay veya prosedürün, ilk satırına Log File'a, isim yazma kodları oluşturmalısınız. Hangi olay tetikleniyorsa (Initalize, herhangi bir prosedur vs) o olayın ismini Log File'e ilave etmelisiniz ... Forumda txt Dosyaları oluşturma, yazma, kayıt ekleme ve silmeye ilişkin kodlar mevcuttur.. Öncelikle bunları inceleyiniz ve projenize adapte ediniz.

Aslında, VBA bunu otomatik olarak gerçekleştirebilecek komutlara sahip olsaydı, hata yönetimi için de oldukça işe yarardı ... Hatanın alındığı, prosedür ve satır numarası bir mesajla kullanıcıya bildirilebilirdi ...


.
 

parametre

Destek Ekibi
Destek Ekibi
Katılım
28 Ocak 2007
Mesajlar
1,585
Excel Vers. ve Dili
ofis 2010 turkce
guzel bir dusunce buna benzer filemon programın kullandım ama bu kadar detaylı olarak vermiyor
 
Katılım
17 Aralık 2008
Mesajlar
96
Excel Vers. ve Dili
excel 2010 türkçe
Arkadaşlar,
İlginiz için hepinize teşekkür ederim.
Halit3 ün verdiği linkdeki örneği inceledim fakat içinden çıkamadım. VBProject.xxx komutunun kullanılmasını çözemedim.
Ferhat arkadaşımızın dediği gibi, her form ve macro girişine ve çıkışına, onun adını yazmak en kolay yol gibi. Fakat, bu form ve macro ların ismini otomatik nasıl yazdırabilirim.
Thisworkbook.thismacro.name
veya
thisworkbook.thisform.name
gibi birşey arıyorum. İlerde macro ismi falan değiştirilince tekrar bu satırlarla oynamamak için.
Bu konuda modül düzenlemesi örneğinde birşeyler var ama ben içinden çıkamadım.
şimdiden teşekkürler
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,873
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
bu kodu deneyiniz.

'Referanslardan Microsoft visual Basic for Applications Extensibility x.x seçin
Sub makroları_yazdır()
Columns("A:C").ClearContents
sat = WorksheetFunction.CountA(Worksheets(ActiveSheet.Name).Range("c1:c65000")) + 1
i = 1
n = 1
On Error Resume Next
For Each ModX In ActiveWorkbook.VBProject.VBComponents
Set VBComp = ActiveWorkbook.VBProject.VBComponents(ModX.Name)
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(ModX.Name).CodeModule
Cells(sat, "A") = VBCodeMod.CountOfLines & " Satır"
Cells(sat, "b") = VBCodeMod
For n = 1 To VBCodeMod.CountOfLines
Cells(sat, "c") = ThisWorkbook.VBProject.VBComponents(VBCodeMod).CodeModule.Lines(n, 1)
sat = sat + 1
Next n
i = i + 1
Next
MsgBox i & " işlem tamam"
End Sub
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,873
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
birde böyle kod var
'Referanslardan Microsoft visual Basic for Applications Extensibility x.x seçin
Sub makroları_yazdır()
Columns("A:d").ClearContents
Worksheets(ActiveSheet.Name).Cells(1, 1).Value = "Satır Adedi"
Worksheets(ActiveSheet.Name).Cells(1, 2).Value = "VB Project Adı"
Worksheets(ActiveSheet.Name).Cells(1, 3).Value = "Makro Adı"
Worksheets(ActiveSheet.Name).Cells(1, 4).Value = "Mokro Kodları"
sat = WorksheetFunction.CountA(Worksheets(ActiveSheet.Name).Range("d2:d65000")) + 2
On Error Resume Next
For Each ModX In ActiveWorkbook.VBProject.VBComponents
Set VBComp = ActiveWorkbook.VBProject.VBComponents(ModX.Name)
Set VBCodeMod = ThisWorkbook.VBProject.VBComponents(ModX.Name).CodeModule
Cells(sat, "A") = VBCodeMod.CountOfLines & " Satır"
Cells(sat, "b") = VBCodeMod
For n = 1 To VBCodeMod.CountOfLines
Cells(sat, "d") = Trim(ThisWorkbook.VBProject.VBComponents(VBCodeMod).CodeModule.Lines(n, 1))
deger6 = Worksheets(ActiveSheet.Name).Cells(sat, 4).Value
If Mid(deger6, 1, 11) = "Private Sub" Then
Worksheets(ActiveSheet.Name).Cells(sat, 3).Value = deger6
ElseIf Mid(deger6, 1, 8) = "Function" Then
Worksheets(ActiveSheet.Name).Cells(sat, 3).Value = deger6
End If
If Worksheets(ActiveSheet.Name).Cells(sat, 4).Value <> "" Then
sat = sat + 1
End If
Next n
i = i + 1
Next
MsgBox i & " adet makro kodu bulundu işlem tamam"
End Sub
 
Katılım
17 Aralık 2008
Mesajlar
96
Excel Vers. ve Dili
excel 2010 türkçe
teşekkürler Halit3,
Verdiğiniz kodları denedim ama biryere varamadım.
Benim yapmaya çalıştığım şey; bir macro veya userform içinde , o macronun veya formun ismini veren kodu arıyorum. Programdaki tüm macroların ismini bir yere yazan bir program aramıyorum.
 
Katılım
17 Aralık 2008
Mesajlar
96
Excel Vers. ve Dili
excel 2010 türkçe
merhabalar,
text file üzerine birkaç sorum var, bunları formun geçmiş yazışmalarında göremedim.
1. open ile açılmış bir text file ını macro içinde save edebilirmiyim. File System Object içinde save ile ilgili birşey bulamadım, imkansız mı acaba?
2.Open ile açıp içine birşeyler yazdıktan sonra close ile kapatıktan sonra gene macro ile tekrar açıp yeni ilave birşeyler yazmak mümkün müdür? üstüne yazmadan son satırdan devam etmek için. Bu yaptığımda , geçmişi siliyor ve yenisi yazıyor.
3. create ve open yapmadan önce, eğer bu aynı isimli text file ı açık ise, bu file ın açık olduğunu söyleyen ve kapatan bir kod yazılabilir mi acaba?
Desteğiniz için şimdiden teşekkürler.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,873
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
2. soruna cevap

Open "dosyanın yeri" For Output As #1 (tex dosyasını siler yeniden oluşturur)
Open "dosyanın yeri" For Append As #1 (tex dosyası varsa bir şey yapmaz yoksa tex dosyası oluşturur)
Open "dosyanın yeri" For Input As #1 (tex dosyası varsa kayıtlar alt alta yapılır)
 
Üst