PERSONAL WORKBOOK'taki "Farklı Kaydet" makrosunun başka dosyaya uygulanması

Katılım
12 Aralık 2015
Mesajlar
67
Excel Vers. ve Dili
Excel 2010 ingilizce
Merhaba Arkadaşlar,

Günlük satış raporu adlı bir dosyam var. Dosyayı günlük olarak farklı kaydet ile yeniliyor ve raporluyorum.

Bu çalışmaya forumdan kod derlemesi yaparak güzel bir kod oluşturdum. Çalıştırdığınızda inputbox kutusuna otomatik olarak bir gün öncesinin tarihi seçili geliyor. Genelde bir gün öncesinin raporu sunulduğundan direk tamam dediğinizde o tarihli isimle yeni bir rapor oluşturuluyor.(farklı kaydet ile) Ayrıca mevcut içerik te silinip tarih hücresindeki tarih bilgisi de inputbox'ta görünen tarih ile değiştiriliyor. Farklı bir tarihe ayarlanacaksa da inputbox'ta seçili gelen tarihte oynama yaparak düzeltebiliyoruz zaten. İşlem sonrası farklı kaydolmuş dosya üzerinde çalışmaya devam ediyorum.

Sorunum ise şöyle;
Raporladığım makrolu dosyanın makrolarıyla birlikte gitmesini/.xlsm makro uzantılı olarak gitmesini istemiyorum. Bu sorun oluyor, bu yüzden kodları PERSONAL WORKBOOK'a kaydedip raporlama tablosundayken çalıştırmak istedim. Genel olarak diğer makrolarda sorun çıkmazken burada ilginç biçimde Rapor tablosu Personal Workbook konumundaymış gibi Personal Workbook dizinine hem de makrolu olarak kaydoluyor.

Bu durumu nasıl düzeltebiliriz?

Kullandığım kodlar aşağıda ve ekte de dosya bulunmaktadır.
iyi çalışmalar dilerim.

Kod:
Sub SatısTablosufarklıKaytet()


Dim noktalitarih As Date 'Tablo tarihinin bulunduğu hücrenin formatının tarih şeklinde oluşmasını sağlamak için

tarih = InputBox("Satış raporu hangi gün için oluşturulacak", "Yeni Rapor Tarihi", Format(Now() - 1, "dd mm yyyy "))
Dosya_Adi = tarih + "SATIŞ RAPORU"
If Dosya_Adi = "" Then
MsgBox "Dosya adı yok"
Exit Sub
End If
a = MsgBox(" Kayıt etmek istiyormusunuz.?", vbYesNo + vbInformation, " Uyarı")
If a = vbYes Then

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
uzanti = "." & fL.GetExtensionName(ThisWorkbook.FullName)

If uzanti = ".xls" Then
FileFormatNum = -4143
ElseIf uzanti = ".xlsm" Then
FileFormatNum = 52
ElseIf uzanti = ".xlsx" Then
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
FileFormatNum = 50
Else
FileFormatNum = 56
End If

ActiveSheet.[B6:L24].Value = ""
ActiveSheet.[G3].Value = ""
noktalitarih = Format(tarih, "dd.mm.yyyy")
ActiveSheet.[B3].Value = noktalitarih


ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Dosya_Adi & uzanti, FileFormat:=FileFormatNum


MsgBox "işlem tamam!" & vbNewLine & "Bu çalışma tablosu üzerinde devam edebilirsiniz.", vbInformation
End If
If a = vbNo Then
MsgBox "işlemi iptal ettiniz.!"
End If
End Sub
 

Ekli dosyalar

halit3

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

Kod:
Sub SatısTablosufarklıKaytet()

Dim noktalitarih As Date 'Tablo tarihinin bulunduğu hücrenin formatının tarih şeklinde oluşmasını sağlamak için

tarih = InputBox("Satış raporu hangi gün için oluşturulacak", "Yeni Rapor Tarihi", Format(Now() - 1, "dd mm yyyy "))
Dosya_Adi = tarih + "SATIŞ RAPORU"
If Dosya_Adi = "" Then
MsgBox "Dosya adı yok"
Exit Sub
End If
a = MsgBox(" Kayıt etmek istiyormusunuz.?", vbYesNo + vbInformation, " Uyarı")
If a = vbYes Then

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
uzanti = "." & fL.GetExtensionName(ThisWorkbook.FullName)

If uzanti = ".xls" Then
uzanti = ".xls"
FileFormatNum = -4143
ElseIf uzanti = ".xlsm" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsx" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
uzanti = ".xlsb"
FileFormatNum = 50
Else
FileFormatNum = 56
End If

ActiveSheet.[B6:L24].Value = ""
ActiveSheet.[G3].Value = ""
noktalitarih = Format(tarih, "dd.mm.yyyy")
ActiveSheet.[B3].Value = noktalitarih

ThisWorkbook.Worksheets.Select
ThisWorkbook.Worksheets.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Dosya_Adi & uzanti, FileFormat:=FileFormatNum

For i = ActiveWorkbook.Sheets.Count To 1 Step -1
Sheets(i).Select
ActiveSheet.DrawingObjects.Delete
Next i

For Each ModX In ActiveWorkbook.VBProject.VBComponents
Set VBComp = ActiveWorkbook.VBProject.VBComponents(ModX.Name)

If ModX.Type = 100 Then
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
Else
ActiveWorkbook.VBProject.VBComponents.Remove VBComp
End If

Next

ActiveWorkbook.Save
ActiveWindow.Close

MsgBox "işlem tamam!" & vbNewLine & "Bu çalışma tablosu üzerinde devam edebilirsiniz.", vbInformation
End If
If a = vbNo Then
MsgBox "işlemi iptal ettiniz.!"
End If
End Sub
 
Katılım
12 Aralık 2015
Mesajlar
67
Excel Vers. ve Dili
Excel 2010 ingilizce
Üstadım Hızlı dönüşünüz için teşekkür ederim.

Kod içindeki aşağıdaki kırmız renkli satır hata verdi.
Hata iletisi;

Run-time error '1004'
Mithod 'select' of object 'Sheets' failed
Hata veren kod satırı

Kod:
[COLOR="Red"]ThisWorkbook.Worksheets.Select[/COLOR]
ThisWorkbook.Worksheets.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Dosya_Adi & uzanti, FileFormat:=FileFormatNum
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Kod ofis 2007 de çalışıyor.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Dosyanızda gizli sayfa varmı
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Ayrıca güvenlik merkezinde/makro ayarları/VBA projesi nesne modeli erişimine güven
tikinide işaretleyiniz.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Muhtemelen dosyanızda gizli sayfalar mevcut gizli sayfaları çözün kod düzenli çalışacaktır veya tam olarak hangi sayfaların yedeğini alacaksanız onu belirtin kodda düzeltme yapalım.
 
Katılım
12 Aralık 2015
Mesajlar
67
Excel Vers. ve Dili
Excel 2010 ingilizce
Halit bey,

açıklamam yetersiz kaldı kusura bakmayın,

İşlem yapmak istediğim, kopyasını almak istediğim tablo ekte gönderdiğim tablodur. Kontrol ettiğimde gizli bir sayfa görünmüyor. Sayfa isimlerine sağ tıkladığınızda hide aktif ama unhide(gizlemeyi kaldır) aktif değil.

Size yolladığım tablo içinde verdiğiniz kodu test ettiğimde hata vermiyor ve istediğim gibi makrosuz ayrı bir dosya oluşturuyor.
Fakat kayıt işleminden sonra yeni kaydedilen dosyada devam etmem gerekiyor. Kayıt işlemi sonrası yapılan değişiklikleri eski dosya üzerine de uyguluyor ve çıkarken kaydedeyim mi diye soruyor. Kaydetmeden çıkarsam sorun yok, yeni oluşan dosyaya geçer devam ederim ancak farklı kaydet sonrası yeni dosyada direk devam edebilmeliyim.(ilk gönderdiğim kodun yaptığı gibi)



Ancak önemli konu VBA kodunu bu dosyaya değil Personal Workbook içine kaydederek genel olarak herhangi bir klasörde bulduğum satış raporuna uygulayabilmemdir. Personel Workbook dosyası içine kaydedip Satış Raporu dosyası üzerinde çalıştırdığımda önceki mesajımda belirttiğim hatayı veriyor.

Acaba bunu bu şekilde çalıştırmak mümkün müdür?
 

halit3

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

Kod:
Sub SatısTablosufarklıKaytet()


Dim noktalitarih As Date 'Tablo tarihinin bulunduğu hücrenin formatının tarih şeklinde oluşmasını sağlamak için

tarih = InputBox("Satış raporu hangi gün için oluşturulacak", "Yeni Rapor Tarihi", Format(Now() - 1, "dd mm yyyy "))
dosya_adi = tarih + "SATIŞ RAPORU"
If dosya_adi = "" Then
MsgBox "Dosya adı yok"
Exit Sub
End If
a = MsgBox(" Kayıt etmek istiyormusunuz.?", vbYesNo + vbInformation, " Uyarı")
If a = vbYes Then

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
uzanti = "." & fL.GetExtensionName(ThisWorkbook.FullName)

If uzanti = ".xls" Then
uzanti = ".xls"
FileFormatNum = -4143
ElseIf uzanti = ".xlsm" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsx" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
uzanti = ".xlsb"
FileFormatNum = 50
Else
FileFormatNum = 56
End If

ActiveSheet.[B6:L24].Value = ""
ActiveSheet.[G3].Value = ""
noktalitarih = Format(tarih, "dd.mm.yyyy")
ActiveSheet.[B3].Value = noktalitarih

ThisWorkbook.Worksheets.Select
ThisWorkbook.Worksheets.Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & dosya_adi & uzanti, FileFormat:=FileFormatNum

For i = ActiveWorkbook.Sheets.Count To 1 Step -1
Sheets(i).Select
ActiveSheet.DrawingObjects.Delete
Next i

For Each ModX In ActiveWorkbook.VBProject.VBComponents
Set VBComp = ActiveWorkbook.VBProject.VBComponents(ModX.Name)

If ModX.Type = 100 Then
'Set VBCodeMod = ActiveWorkbook.VBProject.VBComponents(ModX.Name).CodeModule
'VBCodeMod.DeleteLines 1, VBCodeMod.CountOfLines
VBComp.CodeModule.DeleteLines 1, VBComp.CodeModule.CountOfLines
Else
'MsgBox ModX.Type & Chr(10) & ModX.Name
ActiveWorkbook.VBProject.VBComponents.Remove VBComp
End If

Next


[COLOR="Red"]ThisWorkbook.Save
ThisWorkbook.Close[/COLOR]



MsgBox "işlem tamam!" & vbNewLine & "Bu çalışma tablosu üzerinde devam edebilirsiniz.", vbInformation
End If
If a = vbNo Then
MsgBox "işlemi iptal ettiniz.!"
End If
End Sub
 
Katılım
12 Aralık 2015
Mesajlar
67
Excel Vers. ve Dili
Excel 2010 ingilizce
Hocam çalışmanız için teşekkür ederim.

Bu kod ile kaydedilen çalışma kitabına otomatik geçilme işlemi olmuş, ve makrosuz olarak yeni bir kitap oluşuyor.

Ancak asıl problem "Personal Workbook" içinden çalıştırabilmek.
Bu genel dosya da XLSTART dizinine kaydoluyor otomatik olarak.

Makro kaydetme yöntemiyle makro oluştururken orada da seçenek var hangi kitaba kaydedeceksiniz diye. Orada "Personal Macro Workbook" diye bir seçenek kullanıldığında PERSONAL adlı bir excel kitabı oluşturulup makro bu kitaba kaydoluyor. Böylece her Excel dosyasından o makroya ulaşmak mümkün oluyor. O kitabın dizini de XLSTART, (zaten biliyorsunuz, açıklamam bütünsel olsun diye yazıyorum)

Benim makinadaki dizin yolu:
C:\Users\muhasebe\AppData\Roaming\Microsoft\Excel\XLSTART
dosya adı: PERSONAL.XLSB

Bu dosya default olarak gizli. Ancak görünüm menüsünden göster dediğimizde görünür hale geliyor ve içine kaydettiğimiz makroları da görüp eklemeler yapabiliyoruz. Görünür hale getirip makroyu bu kitaba kaydediyorum. Sonra işlem yapacağım rapor kitabına girerek makro menüsünden personal kitabındaki makroyu çalıştırıyorum.

Kodları hem gizli hem görünür haldeyken deniyorum ancak önceki mesajımda belirttiğim satırda aynı hatayı veriyor.

Özetle makro bu genel dosyada tutulacak.
İşlemi yapacağım rapor dosyasında makroları çağırdığımda personal dosyamızdaki makro görünüyor zaten. Çalıştır dediğimizde üzerinde çalıştığımız dosyanın yenilenmiş kopyası farklı kaydet ile oluşturulup üzerinde çalışılmaya devam edilecek, yine makro kodları bu dosyaya taşınmayacak. PERSONAL dosyası sadece makroları tutan depo olarak kalacak.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Aşağıdaki kodu boş bir dosyaya bir modül ekle ve modülün içine kopyala
Sonra odosyayı farklı kaydet seçeneğinden exceleklentisi (*,xlam) olarak hişbir işlem yapmadan kaydet ve sonra excel seçeneklerinden eklentiler bölümüne tıkla git düğmesini yanında açılır listeden excel eklentilerini seç ve git düğmesine tıkla eklentiler penceresinden o kayıt ettiğin dosyayının tikini işaretle ve sonra sayfanın eklentiler bölümünde farklı kaydet seçeneği çıkacak o düğmeye tıkla.

uyarı excel seçenekleri/popüler de (şeritte geliştirici sekmesini göster) seçeneği işaretli olmalı

Kod:
Sub Auto_Open()
Application.CommandBars("Cell").Reset
Dim AnaMenu As CommandBarControl
On Error Resume Next
Set AnaMenu = Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
With AnaMenu
.Caption = "Farklı kaydet"
.OnAction = "SatısTablosufarklıKaytet"
End With
End Sub

Sub Auto_Close()
Application.CommandBars("Cell").Reset
End Sub


Sub SatısTablosufarklıKaytet()

dosya_adı = ActiveWorkbook.Name
Dim noktalitarih As Date 'Tablo tarihinin bulunduğu hücrenin formatının tarih şeklinde oluşmasını sağlamak için

tarih = InputBox("Satış raporu hangi gün için oluşturulacak", "Yeni Rapor Tarihi", Format(Now() - 1, "dd mm yyyy "))
dosya_adi = tarih + "SATIŞ RAPORU"
If dosya_adi = "" Then
MsgBox "Dosya adı yok"
Exit Sub
End If
a = MsgBox(" Kayıt etmek istiyormusunuz.?", vbYesNo + vbInformation, " Uyarı")
If a = vbYes Then

Dim fL As Object
Set fL = CreateObject("Scripting.FileSystemObject")
uzanti = "." & fL.GetExtensionName(ThisWorkbook.FullName)

If uzanti = ".xls" Then
uzanti = ".xls"
FileFormatNum = -4143
ElseIf uzanti = ".xlsm" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsx" Then
uzanti = ".xlsx"
FileFormatNum = 51
ElseIf uzanti = ".xlsb" Then
uzanti = ".xlsb"
FileFormatNum = 50
ElseIf uzanti = ".xlam" Then
uzanti = ".xlsx"
FileFormatNum = 51

Else
FileFormatNum = 56
End If

ActiveSheet.[B6:L24].Value = ""
ActiveSheet.[G3].Value = ""
noktalitarih = Format(tarih, "dd.mm.yyyy")
ActiveSheet.[B3].Value = noktalitarih

ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & dosya_adi & uzanti, FileFormat:=FileFormatNum

MsgBox "işlem tamam!" & vbNewLine & "Bu çalışma tablosu üzerinde devam edebilirsiniz.", vbInformation
End If
If a = vbNo Then
MsgBox "işlemi iptal ettiniz.!"
End If
End Sub
 
Katılım
12 Aralık 2015
Mesajlar
67
Excel Vers. ve Dili
Excel 2010 ingilizce
Halit bey,

Detaylı açıklamalar ile değerli zamanınızı ayırdığınız için çok teşekkür ederim.
Sonuca ulaştık.
Bu tür genel erişim gereken yerlerde faydalı olması dileği ile;

iyi çalışmalar dilerim.
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Halit bey,

Detaylı açıklamalar ile değerli zamanınızı ayırdığınız için çok teşekkür ederim.
Sonuca ulaştık.
Bu tür genel erişim gereken yerlerde faydalı olması dileği ile;

iyi çalışmalar dilerim.
Teşekkürler iyi çalışmalar.
 
Katılım
29 Ocak 2016
Mesajlar
3
Excel Vers. ve Dili
excel 2007
Teşekkürler iyi çalışmalar.

Merhaba hocam,

konuyu bölüyorum ama cok acil bir bilgiye ihtiyacım var

Aşagıdaki siteden sizin cari hesap karşılaştırmayla ilgili tablo yaptıgınızı gördüm o yüzden üye oldum. Ancak size pm atılamıyor tüm mesajlarınızı tek tek okumaya vaktim yok o konuyu arıyorum yardımcı olurmusunuz? 3500 satırlık tutarlar var işime yararsa benim için çok iyi olur.

http://www.excelvba.net/viewtopic.php?f=4&t=6250&
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Merhaba hocam,

konuyu bölüyorum ama cok acil bir bilgiye ihtiyacım var

Aşagıdaki siteden sizin cari hesap karşılaştırmayla ilgili tablo yaptıgınızı gördüm o yüzden üye oldum. Ancak size pm atılamıyor tüm mesajlarınızı tek tek okumaya vaktim yok o konuyu arıyorum yardımcı olurmusunuz? 3500 satırlık tutarlar var işime yararsa benim için çok iyi olur.

http://www.excelvba.net/viewtopic.php?f=4&t=6250&
dokuz binden fazla mesajım olmuş bende hatırlamıyorum bu sitede mutlaka vardır bu dosya
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,786
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Merhaba hocam,

konuyu bölüyorum ama cok acil bir bilgiye ihtiyacım var

Aşagıdaki siteden sizin cari hesap karşılaştırmayla ilgili tablo yaptıgınızı gördüm o yüzden üye oldum. Ancak size pm atılamıyor tüm mesajlarınızı tek tek okumaya vaktim yok o konuyu arıyorum yardımcı olurmusunuz? 3500 satırlık tutarlar var işime yararsa benim için çok iyi olur.

http://www.excelvba.net/viewtopic.php?f=4&t=6250&
bu linke bir bakanız.

http://www.excel.web.tr/f48/ki-ayry-sayfadaki-ekstreyi-kontrol-etmek-t72092/sayfa4.html
 
Üst