Bir değişkenin Thisworkbook taki tüm modüllerde bir kerede tanımlanması

Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Dim s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
Dim a As String
Dim i As Integer
Dim Cevap
Set s1 = Sheets("günlük")
Set s2 = Sheets("tsb")
Set s3 = Sheets("devirler")
Set s4 = Sheets("Aylık")
tarih = s1.Cells(2, 14)   'işlem tarihi
kull = s1.Cells(3, 14)    'KASA SORUMLUSU
cl_sfad = WorksheetFunction.Text(s1.Cells(2, 14), "ddmmyy")
Ayl_Son_sat = s4.Range("s36").End(3).Row            'bu kitabın aylık sayfasındaki 36.satır hariç son dolu satırı
ayl_son_trh = s4.Range("a" & Ayl_Son_sat)           'son dolu satırın kaydedildiği tarih
değişkenlerine atadığım ifadeleri

Private Sub CommandButton1_Click()
Private Sub CommandButton4_Click()
Sub islemler()
Sub Devral()
Sub sfeklead()
Sub sfeklead()

gibi bir çok modülde ve işlemde yarı ayrı tanımlayarak kullanıyorum..
bunları bir kere tanımladıktan sonra o kitapta nereye tarih yazzsam değişken atamama gerek kalmadan günlükteki taih neyse onu verme gibi imkanı varmı excel vba nın?
Saygılarımla
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Değişkenleri bir normal modülde public olarak tanımlayın.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Public Sub degiskenler()
'...
'....
End Sub
gibimi hocam
çünkü bir başldımmı baya bir satır silecem yanlış yapmayayım
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Kod:
Dim s1 As Worksheet, s2 As Worksheet, s3 As Worksheet
Dim a As String
Dim i As Integer
Dim Cevap
Yukarıdaki satırları bir normal modüle kopyalayın ve Dim leri Public ile değiştirin.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
teşekkürler, setleri de bir kerede yapmanın yolu var mı peki
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
teşekkürler önce inceleyeyim sonra sorum varsa naklederim.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
hocam ben maalsef anlayamadığım için soracam

mesala
Kod:
Dim Bu_wb As Workbook
Dim Bu_s1 As Worksheet, Bu_s4 As Worksheet
Bu_Kit_Dzn = ThisWorkbook.Path: bu_Kit_Ad = ThisWorkbook.Name       'Bu kitabın dizin ve dosya adını değişkkene alır
Set Bu_wb = Workbooks(bu_Kit_Ad)
Bu_Kit_Ydk_ad = Bu_Kit_Dzn & "\gcc_" & bu_Kit_Ad
bu_Kit_ss = Bu_wb.Worksheets.Count
Set Bu_s1 = Bu_wb.Sheets("Günlük")
Set Bu_s4 = Bu_wb.Sheets("Aylık")
tarih = bu_s1.Cells(2, 14)   'işlem tarihi
kull = bu_s1.Cells(3, 14)    'KASA SORUMLUSU
cl_sfad = WorksheetFunction.Text(s1.Cells(2, 14), "ddmmyy")
Ayl_Son_sat = s4.Range("s36").End(3).Row            'bu kitabın aylık sayfasındaki 36.satır hariç son dolu satırı
ayl_son_trh = s4.Range("a" & Ayl_Son_sat)           'son dolu satırın kaydedildiği tarih
'Kaydedilecek kitaba ilişkin tanımlama işlemleri
'kay_dzn_Ad biligsayarınızda var olmalıdır.
Kay_Dzn_Ad = Format(Bu_s1.Range("a1"), "yyyy"): Kay_Kit_Ad = Format(Bu_s1.Range("a1"), "mmyyyy")                           '**Bu_s1 in a1 hücresindeki tarihi "aayyyy" formatında değişkene atama
kay_yol_ad = Bu_Kit_Dzn & "\" & Kay_Dzn_Ad & "\" & Kay_Kit_Ad & ".xls"
normalde yukarıdaki değişkenleri her sub xxxxx () için tanımlıyor ve set

Ancak çok fazla modül olduğu için işlem uzun sürüyor istediğim hangi modülden çağırırsam çağırayım tarihi bana tanımladığım gibi bu çalışma kitabının, günlük sayfasındaki 14. sütunun 2. satırı olarak döndürsün


yani

Sub sayfa ekle ()
.........
Msgbox tarih & " sayfası silinecektir"
..........
End sub

Sub Hata ()
if tarih > ayl_son_tar then
...........
msgbox tarih & " için işlem yapma hakkık sadece yöneticeye aittir
.........
End sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Teşekkürler

Kod:
'Modüle Atanacak Değişkenler ve türleri
Public bu_wb As Workbook            'bu kitabın adı
Public Bu_s1 As Worksheet           'bu kitaptaki 1.sayfamız
Public Bu_s2 As Worksheet           'bu kitaptaki 2.sayfamız
Public Bu_s3 As Worksheet           'bu kitaptaki 3.sayfamız
Public Bu_s4 As Worksheet           'bu kitaptaki 4.sayfamız
Public Bu_s5 As Worksheet           'bu kitaptaki 5.sayfamız
Public bu_Kit_dzn As String         'bu kitabın kayıtlı olduğu dizin
Public bu_Kit_Ad As String          'bu kitabın adı
Public Yd_Kit_ad As String          'Yedek kitabın makro çalışırken yedekleneceği ad
Public Yn_Kit_dzn As String         'Yeni kitabın kayıtlı olduğu dizin
Public Yn_Kit_Ad As String          'Yeni kitabın adı
Public Yn_Kit_Yol As String          'Yeni kitabın adı
Public Bu_Kit_ss As Integer         'bu kitaptaki toplam çalışma sayfası
Public Ayl_Son_sat As Integer       'Aylık sayfasının son satırı
Public isl_tar As Date              'İşlem tarihimiz
Public Ayl_son_trh As Date          'Aylık sayfasında en son kayıt yapılmış tarih
Public hes_sor As String            'Hesap Sorumlusu/kullanıcı
Public arc_sor As String            'Araç Sorumlusu
Public ycl_gsf_adı As String         'işlemler bittiğinde Günlük bordrosunun kopyasına verilecek yeni ad
Public ycl_asf_adı As String         'işlemler bittiğinde Aylık sayfasına verilecek yeni ad
Public ycl_ysf_adı As String         'işlemler bittiğinde Yıllık sayfasına verilecek yeni ad
'===========================

Sub auto_open()
'Değişkenleri açılışta atama
bu_Kit_dzn = ThisWorkbook.Path                      'bu kitabın dizinin genel değişkene ata
bu_Kit_Ad = ThisWorkbook.Name                       'Bu kitabın dizin ve dosya adını değişkkene alır
Set bu_wb = Workbooks(bu_Kit_Ad)                    'bu kitap için prosodür kısaltma
Yd_Kit_ad = bu_Kit_dzn & "\gcc_" & bu_Kit_Ad        'yedek kitap adı belirleme
Bu_Kit_ss = bu_wb.Worksheets.Count                  'bu kitabın sayfa sayısı
Set Bu_s1 = bu_wb.Sheets("Günlük")                  'günlük sayfasını kısa kullanma
Set Bu_s4 = bu_wb.Sheets("Aylık")                   'aylık sayfasını kısa kullanma
isl_tar = Bu_s1.Cells(2, 14)                        'işlem tarihi
hes_sor = Bu_s1.Cells(3, 14)                        'KASA SORUMLUSU
arc_sor = Bu_s1.Cells(4, 14)                        'ARAÇ SORUMLUSU
ycl_gsf_adı = WorksheetFunction.Text(Bu_s1.Cells _
                                (2, 14), "ddmmyy")  'Günlük sayfasının kopyasına verilecek ad
ycl_asf_adı = WorksheetFunction.Text(Bu_s1.Cells _
                                    (2, 14), "mm")  'Aylık sayfasının kopyasına verilecek ad
ycl_ysf_adı = WorksheetFunction.Text(Bu_s1.Cells _
                                  (2, 14), "yyyy") 'Yıllık sayfasının kopyasına verilecek ad
Ayl_Son_sat = Bu_s4.Range("s36").End(3).Row         'bu kitabın aylık sayfasındaki 36.satır hariç son dolu satırı
Ayl_son_trh = Bu_s4.Range("a" & Ayl_Son_sat)        'son dolu satırın kaydedildiği tarih
Yn_Kit_dzn = Format(Bu_s1.Range("n2"), "yyyy")      'yeni kitabın kaydedileceği dizin
Yn_Kit_Ad = Format(Bu_s1.Range("n2"), "mmyyyy")     'yeni kitabın adı
Yn_Kit_Yol = bu_Kit_dzn & "\" & Yn_Kit_dzn & "\" _
                              & Yn_Kit_Ad & ".xls"  'yeni kitabın kaydedileceği yol
End Sub
bu şekilde galiba, ama aklıma bir şey takıldı mesala bir değişkene o işlem için bir isim atadık bu durumda son atanan değişken hatırlanıyor galiba doğrumu anlamışım?
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Kod:
Public Dz_Klck_sf 
Public Dz_Klck_vs As Integer
'====================
Sub auto_open()

.........
Dz_Klc_sf = Array(Bu_s1.Name, Bu_s2.Name, _
                Bu_s3.Name, Bu_s4.Name, Bu_s5.Name) 'daima bu kitapta kalacak sayfa adları
Dz_Klc_vs = UBound(Dz_Klc_sf) + 1                   'daima bu kitapta kalacak sayfa sayısı
...............
End Sub

Sub Verikontrol()
Msgbox Dz_Klc_sf(2)  'hata veriyor
Msgbox Dz_Klc_vs     'boş dönüyor
End sub
Array tanımlayamıyormuyuz
saygılarımla
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Array ve CreateObject içeren hücrelerin tüm modüllerde çalışması

http://www.excel.web.tr/showpost.php?p=211837&postcount=10
linkinde değişkenlerimi public olarak tanımlayarak ve Auto_open()
da set ve değer atama işlemini yapınca tüm modüllerden çalışabileceğini öğrendim ancak

..................................

ve ds=CreateObject("Scripting.FileSystemObject")
Puclic ds As xxxx
xxx ne olmalıdır

birde bilidiğim kadarıyla dosya veya klasörlerin orada olup olmadığını tesbitte kullanılıyor, başka kullanım amacı varmıdır?
 
Son düzenleme:

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
xxxx yerine bir şey yazmanız gerekmez sadece Public ds olarakta kullanabilirsiniz. Bu durumda ds değişkeni variant(tipi tanımlanmamış, her tipe dönüşebilir) olarak kabul edilir.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
xxxx yerine bir şey yazmanız gerekmez sadece Public ds olarakta kullanabilirsiniz. Bu durumda ds değişkeni variant(tipi tanımlanmamış, her tipe dönüşebilir) olarak kabul edilir o kadar.
teşekkür ederim hocam bir sorum daha vardı gözden kaçmış herhalde;

Array tanımlamalarında aşağıdaki durum var;

Kod:
Public Dz_Klck_sf 
Public Dz_Klck_vs As Integer
'====================
Sub auto_open()
.........
Dz_Klc_sf = Array(Bu_s1.Name, Bu_s2.Name, _
                Bu_s3.Name, Bu_s4.Name, Bu_s5.Name) 'daima bu kitapta kalacak sayfa adları
Dz_Klc_vs = UBound(Dz_Klc_sf) + 1                   'daima bu kitapta kalacak sayfa sayısı
...............
End Sub

Sub Verikontrol()
Msgbox Dz_Klc_sf(2)  [color="red"] 'hata veriyor [/color]
Msgbox Dz_Klc_vs     [color="red"] 'boş dönüyor [/color]
End sub
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Açılıştaki Array tanımlamasının kitaptaki tüm modüllerde görme

Kod:
Public Dz_Klck_sf 
Public Dz_Klck_vs As Integer
'====================
Sub auto_open()
.........
Dz_Klc_sf = Array(Bu_s1.Name, Bu_s2.Name, _
                Bu_s3.Name, Bu_s4.Name, Bu_s5.Name) 'daima bu kitapta kalacak sayfa adları
Dz_Klc_vs = UBound(Dz_Klc_sf) + 1                   'daima bu kitapta kalacak sayfa sayısı
...............
End Sub

Sub Verikontrol()
Msgbox Dz_Klc_sf(2)  [color="red"] 'hata veriyor [/color]
Msgbox Dz_Klc_vs     [color="red"] 'boş dönüyor [/color]
End sub
Açılışta diziye atadığım değişkneleri diğer modüllerden çağpırınca hata alyorum bunun nedeni nedir acaba,
fizilere sadece bulunuduğum modül içinden mi çalışır?
Saygılarımla
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
teşekkür ederim hocam
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,614
Excel Vers. ve Dili
Pro Plus 2021
Public le veya dim tanımladıktan sonra Dizi=Array() şeklinde tanımlayamazsınız. Çünkü daha önce tanımlanmış durumdadır. Array la ilk defa tanımlamak için kullanabilirsiniz. Public le tanımladıktan sonra

Döngüyle diziye değerleri auto_open de aktarabilirsiniz.
 
Katılım
2 Mart 2005
Mesajlar
2,960
Excel Vers. ve Dili
ev: Ofis 2007- Win Xp
iş: Ofis 2010- Win Vista
Anlamadım hocam benim hatam nerede
Kod:
[color="blue"]'Sayfanın en üstü[/color]
Public Dz_Klck_sf 
Public Dz_Klck_vs As Integer
'====================
[color="blue"]'Açılış ta değişknleri tanı[/color]
Sub auto_open()
........
Dz_Klc_sf = Array(Bu_s1.Name, Bu_s2.Name, _
                Bu_s3.Name, Bu_s4.Name, Bu_s5.Name) 'daima bu kitapta kalacak sayfa adları
Dz_Klc_vs = UBound(Dz_Klc_sf) + 1                   'daima bu kitapta kalacak sayfa sayısı
...............
End Sub

[color="blue"]'başka bir modülden çağır[/color]
Sub Verikontrol()
Msgbox Dz_Klc_sf(2)  [color="red"]'hata veriyor[/color]
Msgbox Dz_Klc_vs     [color="red"]'boş dönüyor[/color]
End sub
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,284
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Sorun çözülmüş ama bilgi açısından eklemek istiyorum.

CreateObject = Nesne yarat durumunda atanacak değişken tipinin "Object" olmasında fayda vardır. Çünkü hafızada daha az yer kaplayacaktır.
 

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,614
Excel Vers. ve Dili
Pro Plus 2021
Kod:
'Sayfanın en üstü
Public Dz_Klc_sf
Public Dz_Klc_vs As Integer
'====================
'Açılış ta değişknleri tanı
Sub auto_open()
    Set Bu_s1 = Sheets("Sayfa1")
    Set Bu_s2 = Sheets("Sayfa2")
    Set Bu_s3 = Sheets("Sayfa3")
    Dz_Klc_sf = Array(Bu_s1.Name, Bu_s2.Name, Bu_s3.Name)
    Dz_Klc_vs = UBound(Dz_Klc_sf) + 1
End Sub


'başka bir modülden çağır
Sub Verikontrol()
MsgBox Dz_Klc_sf(2)  'hata veriyor
MsgBox Dz_Klc_vs     'boş dönüyor
End Sub
Böyle çalışıyor.
 
Üst