Makro Kodlarini TXT dosyasinda Tutmak

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Merhaba,

Excel makrolarini dosyanin icinde degilde networkde ornegin bir txt dosyasinin icinde tutmak ve oradan calismasini istiyorum.
Boyle birsey mumkun mudur?

iyi calismalar
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Mümkün ama bana biraz gereksiz geldi ....

Güvenlik için mi düşündünüz ?

Eğer yine de istiyorsanız, VBE "Project" penceresinde sağ tıklayıp, modülü "Remove" edin, size "Export" etmek istediğinizi sorduğunda "Evet" deyin, bir yere kaydedin. Modülü eklemek istediğiniz zaman da, VBE "Project" penceresinde aynı şekilde sağ tıklayıp "Import" edin.

.
 
Son düzenleme:

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Link ile beraber yaptirmak istiyorum, kodlarla oynanmasini engellemek istiyorum.
Sadece excel kodlarin bulundugu dosyaya ulasmak istediginde kodlara erisecek ve kullanacak, kullanici ilgili linkten dosyayi cift click ile tiklayip acmaya calistiginda actirmayacagim.

Kodlari bir txt dosyasinda bulundurup excel makro icinden kodlara link veremiyor muyum?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Aşağıdaki kod, Excel dosyasına NewModule adında bir modül ekler ve seçilen bir text dosyasına yazılmış kodları bu modüle yazar.

Kodu çalıştırabilmek için; kullanıcının Excel dosyasında, aşağıdaki resimde belirtilen güvenlik ayarını önceden yapmış olması gerekir.



Kod:
Sub AddMod()
    'Haluk - 12/08/2018
    Dim LineNum As Long, i As Long
    Dim InputData
    MyTxtFile = Application.GetOpenFilename("Text Dosyaları, *.txt")
    If MyTxtFile <> False Then
    Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1)
        VBComp.Name = "NewModule"
        Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("NewModule").CodeModule
            With VBCodeMod
            Open MyTxtFile For Input As #1
            i = 1
            Do While Not EOF(1)
                Line Input #1, InputData
                LineNum = .CountOfLines + 1
                .InsertLines LineNum, InputData
                i = i + 1
            Loop
            Close #1
            End With
    End If
End Sub
.
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Haluk Bey tesekurler, ornek bir dosya olusturabilir misiniz?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Cevat Bey;

Dediğim ayarı yaptıktan sonra, dosyanıza bir modül ekleyin ve yukarıdaki kodu yapıştırdıktan sonra çalıştırın....

Bahsettiğim ayarı siz manuel olarak yapmazsanız, ekleyeceğim dosyayı da çalıştıramazsınız.

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Söz konu ayarları yapmak için izlenecek yolu ekli sunumda belirttim ...

.
 

Ekli dosyalar

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Tesekkurler Haluk Bey

iyi calismalar
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
@Haluk bey, dosya çalıştırıldığında içine data yı çekiyor ama kapatıldıgında almış oldugu kodları silmiyor. Yardımcı olabilir misiniz lüfen?

Tesekkurler, iyi calismalar
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@Haluk bey, dosya çalıştırıldığında içine data yı çekiyor ama kapatıldıgında almış oldugu kodları silmiyor. Yardımcı olabilir misiniz lüfen?

Tesekkurler, iyi calismalar
Dosya kapanırken, daha önceden eklenmiş olan NewModule isimli modülü dosyadan siler ....


Kod:
Sub Auto_Close()
    Set myMod = ThisWorkbook.VBProject.VBComponents("NewModule")
    ThisWorkbook.VBProject.VBComponents.Remove myMod
End Sub
.
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Harika!
Peki @Haluk bey, excel de kod alanına giriş yapmak için şifre kullanıyorum. Bu bir sorun olacak. Onu nasıl aşabiliriz.
Bu arada txt dosyasına erişim hakkı olmayan kullanıcılar da sorunsuz dosyayı açabilsin, excel txt dosyasını istemesin.

Ne yapabiliriz?
Tesekkurler, iyi calismalar
 
Son düzenleme:

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Daha önceki kodları silip, yerine aşağıdakileri yerleştirin.

Dosya açıldığında, C:\TestFolder\code.txt dosyasından kodları alıp, NewModule isimli modülün içine yerleştirir. Dosya kapanırken de eklenen NewModul isimli modülü siler.

Siz text dosyasının yolunu kendinize göre değiştirin...

Kod:
Sub Auto_Open()
    'Haluk - 12/08/2018
    Dim LineNum As Long, i As Long
    Dim InputData
    MyTxtFile = "C:\TestFolder\code.txt"
    If Dir(MyTxtFile) = "" Then Exit Sub
    Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1)
    VBComp.Name = "NewModule"
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("NewModule").CodeModule
    With VBCodeMod
        Open MyTxtFile For Input As #1
        i = 1
        Do While Not EOF(1)
            Line Input #1, InputData
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, InputData
            i = i + 1
        Loop
        Close #1
    End With
End Sub
'
Sub Auto_Close()
    On Error Resume Next
    Set myMod = ThisWorkbook.VBProject.VBComponents("NewModule")
    ThisWorkbook.VBProject.VBComponents.Remove myMod
End Sub
.
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Tesekkurler Haluk Bey, süper olmuş.
VBA kodlarına şifre koymuştum. Kodları çekmeden önce sifreyi kaldırıp, kodları çektikten sonra tekrardan vba görüntülemeyi şifreleyebilir miyiz?
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
VBA kodlarıyla VBE şifresine müdahale etmek çok kolay değil. Yapılır ama; biraz uğraştırıcı ve de çok güvenilir olmayan metotlarla bu işlem yapılır.

Siz o işi bir kenara bırakın bence...

.
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Ben biraz araştırayım, protected konusunda örnekler var. Belki vba yı da buluruz, çok teşekkür ederim yardımlarınız için.....
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
@Haluk bey, text dosya açma ve kapatma güzel çalışıyor.
Tek bir sorunum var. Kodları çalıştırdıktan sonra excel dosyasını kaydetmeden kapatırsam, NewModule modülünü silmeden çıkıyor. Dolayısıyla bir sonraki açısında tekrardan kodları çağırıyor ve sorun oluşuyor.

Excel dosyası kodlar çalıştırıldıktan sonra, kaydedilmeden kapatıldığında modülü kaldıracak bir düzeltme yapılabilir mi?
veya
NewModule modülü hala excel dosyasının içerisinde gömülü ise tekrardan çağırmamasını sağlayabilir misiniz?

2 işlem de işimi görecektir. :)

Teşekkürlerimi sunarım.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
AutoOpen makrosunda aşağıda kırmızı satırları ilave edin ....

Böylece; dosyanın açılışında NewModule adında bir modül bulursa, tekrar ilave etmeye çalışmayacaktır....

Rich (BB code):
Sub Auto_Open()
    'Haluk - 12/08/2018
    Dim LineNum As Long, i As Long
    Dim InputData
    MyTxtFile = "C:\TestFolder\code.txt"
    If Dir(MyTxtFile) = "" Then Exit Sub
   
    For Each MyMod In ThisWorkbook.VBProject.VBComponents
        If MyMod.Name = "NewModule" Then Exit Sub
    Next
   
    Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1)
    VBComp.Name = "NewModule"
    Set VBCodeMod = ThisWorkbook.VBProject.VBComponents("NewModule").CodeModule
    With VBCodeMod
        Open MyTxtFile For Input As #1
        i = 1
        Do While Not EOF(1)
            Line Input #1, InputData
            LineNum = .CountOfLines + 1
            .InsertLines LineNum, InputData
            i = i + 1
        Loop
        Close #1
    End With
End Sub
.
 

cevatyildiz

Altın Üye
Katılım
2 Mayıs 2008
Mesajlar
295
Excel Vers. ve Dili
Office 365
Altın Üyelik Bitiş Tarihi
04-04-2025
Haluk hocam, harikasınız! :) Ellerinize, emeğinize sağlık
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,812
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Tesekkurler Haluk Bey, süper olmuş.
VBA kodlarına şifre koymuştum. Kodları çekmeden önce sifreyi kaldırıp, kodları çektikten sonra tekrardan vba görüntülemeyi şifreleyebilir miyiz?
bu kodu bir dene

PHP:
Sub deneme()
UnprotectVBProject Workbooks(ActiveWorkbook.Name), "10" 'vb project şifresi
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
ThisWorkbook.Activate
End Sub

Sub UnprotectVBProject(wb As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = wb.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application.ScreenUpdating = False
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
wb.Activate
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
SendKeys "%{F11}%TE", True
End If

Password = ""
Application.Wait (Now + TimeValue("00:00:02"))
SendKeys "{enter}", True
Application.VBE.MainWindow.Visible = False
wbActive.Activate

End Sub
 

baydeniro

Altın Üye
Katılım
26 Ocak 2007
Mesajlar
4,625
Excel Vers. ve Dili
Ofis 2016
Altın Üyelik Bitiş Tarihi
20-02-2025
bu kodu bir dene

PHP:
Sub deneme()
UnprotectVBProject Workbooks(ActiveWorkbook.Name), "10" 'vb project şifresi
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
ThisWorkbook.Activate
End Sub

Sub UnprotectVBProject(wb As Workbook, ByVal Password As String)
Dim VBP As VBProject, oWin As VBIDE.Window
Dim wbActive As Workbook
Dim i As Integer
Set VBP = wb.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> vbext_pp_locked Then Exit Sub
Application.ScreenUpdating = False
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
wb.Activate
Application.OnKey "%{F11}"
SendKeys "%{F11}%TE" & Password & "~~%{F11}", True
If VBP.Protection = vbext_pp_locked Then
SendKeys "%{F11}%TE", True
End If

Password = ""
Application.Wait (Now + TimeValue("00:00:02"))
SendKeys "{enter}", True
Application.VBE.MainWindow.Visible = False
wbActive.Activate

End Sub
halit3 üstadım kod için çok teşekkürler. Dosyanın içindeyken, parolasını bildiğimiz ve protect durumunda olan VBA korumasını bu kod ile açmak mümkün mü. Ben denedim ama olmadı. Referances durumundan olabilir mi ?
 
Üst