• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Demirbaş Excelinde, Makro Düzenlenmesinin Yapılması ve Çoklu Sayfa Çalışmada Çalışmasının Sağlanması

Katılım
27 Aralık 2010
Mesajlar
56
Excel Vers. ve Dili
Office 2010 TR 64 Bit
Merhabalar,

Ekteki demirbaş takip excelimde GRS sayfası şifreli giriş sayfasıdır. Şifrelerin hepsi 123 tür. Personel "Demirbaş Sayfasına Veri Girişi Yapmak için" şifresini girer. Açılan "DLST" sayfasında C sütunundaki bir hücreyi tıklayınca gizli olan ilgili kod sayfası açılır. Veri girişlerini açılan Örn: 201001 sayfasına yapar. VBA kısmına bakarsanız kodlar ve çalışma mantığı çok basittir.

"DLST" sayfası C sütunundaki 352 adet kod için 352 adet sayfam olması gerekiyor. Sayfa adları C sütunundakiler ile aynı olmalıdır. İleride yeni kod eklersem veya çıkartırsam revizyonlar yapacağım.

352 adet sayfayı oluşturmaya başladığımda 200 üncü sayfalarda Microsoft Excel çalışmayı durdurdu. Windows sorun için bir çözüm arıyor hatası alıyorum. Excelim makrosuzken 352 adet sayfa ile kullanıyordum. Kodlarım kullanışsız olabilir. Kodlarımın düzeltilmesini ve çoklu sayfada (şimdilik 352 ad) excelimin çalışmasını istiyorum.

https://dosya.co/10w17qwpac33/190101_Ambar_Demirbaş_Takip_0.xlsm.html

Yardımlarınızı rica ederim, saygılar...
 
Merhaba.
Sorunuzu çok anladığımı söyleyemem.
Merak ettiğim husus neden yüzlerce sayfa ile uğraşmak istiyorsunuz?
Bu sayflarda muhtemel kullanılacak en yüksek satır sayısı kaç olabilir?

Bilgileri tek sayfada tutup, bir sütuna sayfa ayırmaktan maksatınız neyse onu belirtecek bir sayı/metin/kod her neyse ayırt edici bir veri girip,
bu sütunda filtre uygulayarak, ya da başka bir işlem sayfası oluşturup, bu sayfada uygun bir hücreye uygulanacak VERİ DOĞRULAMA veya bir adet
Combobox nesnesiyle kod seçip, veri sayfasında bu koda ait satırları, üzerinde işlem (bilgi ekleme/bilgi güncelleme vs) yapmak üzere
bu sayfaya (işlem sayfası) çektikten sonra KAYDET makrosuyla ilgili değişiklikler asıl veri sayfasına aktarılabilir.
İşleminiz örneğin yazdırma ise, bu seçime göre ilgili veriler işlem sayfasına çağrılıp buradan yazdırılabilir vs.

Bence üstünde biraz düşünmeye değer. Fikrinizi belirtirsiniz.

Sayfa adeti sınırlaması mutlaka vardır, internetten arama yaparak bulursunuz (çok fazla sayfası olan belge pek kullanmadığım için ben bilemiyorum).

İsteği/ihtiyacı netleştirirseniz ben veya başka bir üye mutlaka çözüm yolunda mesafe aldıracak cevap verecektir.
.
 
Merhaba.
Sorunuzu çok anladığımı söyleyemem.
Merak ettiğim husus neden yüzlerce sayfa ile uğraşmak istiyorsunuz? "Her sayfa bir tip malzemedir. Örneğin bir sayfada sadece elektrik ark kaynak makineleri var. Aslında çok sayfadan kurtulmayı düşündüm. Çok sayfalı sistemi, tek sayfada çalışmayı kafamda tasarlayamadım. Bende önceden beri kullanılan makrosuz çok sayfalı exceli geliştirme yoluna gittim. Exceli kullanacak personelde çok sayfalı yönteme aşina ve işimde acil diye çok sayfalı çalışmaya yöneldim."

Bu sayflarda muhtemel kullanılacak en yüksek satır sayısı kaç olabilir? "Tahminen en çok satır 202.002 sayfasında olur. Taş Motoru 115mm ler 5000 adet olsa maksimum 5000 satır gerekecektir. Ama her sayfaya satır ekle satır sil yaptığım için ve satır sayısı 5000 i geçmeyeceği için satır sayısı çok sorun değil (Bazı sayfalarda da maksimum 3-5 satır olacaktır. Örneğin kompresör)."

Bilgileri tek sayfada tutup, bir sütuna sayfa ayırmaktan maksatınız neyse onu belirtecek bir sayı/metin/kod her neyse ayırt edici bir veri girip,
bu sütunda filtre uygulayarak, ya da başka bir işlem sayfası oluşturup, bu sayfada uygun bir hücreye uygulanacak VERİ DOĞRULAMA veya bir adet
Combobox nesnesiyle kod seçip, veri sayfasında bu koda ait satırları, üzerinde işlem (bilgi ekleme/bilgi güncelleme vs) yapmak üzere
bu sayfaya (işlem sayfası) çektikten sonra KAYDET makrosuyla ilgili değişiklikler asıl veri sayfasına aktarılabilir.
İşleminiz örneğin yazdırma ise, bu seçime göre ilgili veriler işlem sayfasına çağrılıp buradan yazdırılabilir vs. "Aslında anlattığınız çalışma mantığı güzel.. Demirbaş sayımları yapıldı. Benim acil bir takip exceli oluşturmam gerektiği için dediğiniz gibi bir excel kuramadım. Tek sayfa fikrimi değiştirebilir ama yöntemi değiştiremem. Çünkü makrodan çok anlamıyorum. Uzun zamanımı alıyor.. "

Bence üstünde biraz düşünmeye değer. Fikrinizi belirtirsiniz.

"Not: Excel açılınca GRS sayfası açılıyor. Diğer bütün sayfalar gizli kalıyor.
Personel GRS sayfası demirbaş butonuna basıp şifresini girip DLST sayfasını açıyor. DLST sayfasından bakıyor Taş Motoru 115mm malzemesi 202.002 sayfasındaymış.. DLST sayfası C sütunundaki 202.002 yi tıklıyor, kendi sayfasına gidiyor. Örneğin 202.002.001 demirbaş nolu taş motorunun ambara giriş, çıkış, iş kodu, etiket durumu, kullanım durumu vb bilgilerini bu sayfaya giriyor. Bu sayfada ekleyeceği yada sileceği satırı seçiyor. Satır ekle ve satır sil butonları ile işlem yapıyor. Bu sayfada D sütununa mükerrer Demirbaş no girerse hücre kırmızı oluyor. Bu sayfada ana sayfa butonuna basıyor, DLSt ye gidiyor. Başka malzeme için veri girişi yapacak ise aynı işlemleri yapıyor.
Ben GRS sayfası admin giriş butonuna basıp şifremi girip DDT1 VE DDT2 sayfalarına veri girişi yapıyorum. 202.002 gibi olan her sayfadaki açılır pencerelere veriler DDT1 ve DDT2 sayfalarından çekiliyor."


Sayfa adeti sınırlaması mutlaka vardır, internetten arama yaparak bulursunuz (çok fazla sayfası olan belge pek kullanmadığım için ben bilemiyorum). "360 sayfalık makrosuz demirbaş excelimizi hiç sıkıntısız kullanıyorduk. Ama her aramayı Ctrl+F ile yapıyorduk. Ne ebatsal ne de çok sayfa ile kullanmada sıkıntı yaşamadık. Tek sorun kullanışsızdı. Makrolar ile biraz daha pratik hale getirmek istedim. DLST gibi liste sayfası oluşturup aranılan rahat bulunsun dedim. DLST sayfası C sütununda ilgili hücreye (C2 hücresi 201.001 e tıklayın) tıklayınca kendi sayfasına gitsin, kendi sayfasında ana sayfaya git butonu ile geçişleri kolaylaştırdım."

İsteği/ihtiyacı netleştirirseniz ben veya başka bir üye mutlaka çözüm yolunda mesafe aldıracak cevap verecektir. "Sonuç olarak mevcut excelimdeki makrolar bir kontrol edilse, daha pratik ve kısa kodlar oturtulabilir. Belki yazdığım makro sayfa sayımı sınırlıyor olabilir. Yada satır sil butonu göz kırpmaz. Usta bir elin, excelimin mantığını anlayıp bana yardımcı olmasına ihtiyacım var. İstediğim makrolarımın gözden geçirilip, gerekli ise düzenlenmesi ve DLST sayfası C sütunundaki hücre adet ve isimlerinde sayfalar oluşturulmasıdır."

Teşekkür eder, saygılar sunarım...

.
 
Günaydınlar,
Altta linkteki excelimin makrolarının gözden geçirilip, düzenlenmesi ve DLST sayfası C sütunundaki hücre adet ve isimlerinde sayfalar oluşturulması hususunda yardım edebilir misiniz?
https://www.dosyaupload.com/6b2l

Saygılar..
 
Merhaba.
Makroların "makroların gözden geçirilmesi, düzenlenmesi" isteği bence biraz ilginç olmuş.
Sorun olan, çalışmayan makrolarınız varsa onu ve sorun çıkartan kısımlarını belirtirseniz (yani isteği netleştirirseniz) daha doğru olur bence.

Sayfa oluşturma işlemi için aşağıdaki kod kullanılabilir.
İlgili satır değerini taşıyan sayfa ismi zaten varsa o satır için işlem yapılmaz.
CSS:
Sub SAYFALAR_OLUSTUR()
For sat = Sheets("DLST").Cells(Rows.Count, "C").End(3).Row To 2 Step -1
    varmi = 0
    For Each sayfa In ThisWorkbook.Sheets
        If sayfa.Name = Sheets("DLST").Cells(sat, "C").Text Then varmi = varmi + 1
    Next
    If varmi > 0 Then GoTo atla
    Sheets.Add After:=Sheets("DLST")
    ActiveSheet.Name = Sheets("DLST").Cells(sat, "C").Text
atla: Next
End Sub
 
Son düzenleme:
Merhaba.
Makroların "makroların gözden geçirilmesi, düzenlenmesi" isteği bence biraz ilginç olmuş.
Sorun olan, çalışmayan makrolarınız varsa onu ve sorun çıkartan kısımlarını belirtirseniz (yani isteği netleştirirseniz) daha doğru olur bence.

Sayfa oluşturma işlemi için aşağıdaki kod kullanılabilir.
İlgili satır değerini taşıyan sayfa ismi zaten varsa o satır için işlem yapılmaz.
CSS:
Sub SAYFALAR_OLUSTUR()
For sat = Sheets("DLST").Cells(Rows.Count, "C").End(3).Row To 2 Step -1
    varmi = 0
    For Each sayfa In ThisWorkbook.Sheets
        If sayfa.Name = Sheets("DLST").Cells(sat, "C").Text Then varmi = varmi + 1
    Next
    If varmi > 0 Then GoTo atla
    Sheets.Add After:=Sheets("DLST")
    ActiveSheet.Name = Sheets("DLST").Cells(sat, "C").Text
atla: Next
End Sub

Günaydın,
Anladım. Ben çok genel sordum. Sandım ki exceli biri açıp, inceleyip, bu olmaz, burası olur gibi bakıp düzeltecek... O zaman exceldeki makroları parça parça ele alıp soracağım. Üstteki makronuz, DLST sayfası C sütunundaki adlar kadar yeni sayfa oluşturdu. Fakat oluşturulan tüm sayfaların mevcut olan 201.001 sayfasının aynı olması gerekiyor. Yani 201.001 sayfasını kopyala yapıştır C sütununa göre adını değiştir gibi...
Saygılar
 
Günaydınlar,

Excelimdeki 201.001 sayfasında kullandığım kodlar alttaki gibidir. Kodlara ait açıklamalarım alttaki gibidir.

Kırmızı olan kodlarla ilgili hücrelerde değişiklik olunca formül çalıştırıyorum. Sayfa sayım çok olduğu için formülasyonlardan kurtulmam gerekti. Kod kötü ise varsa öneriniz değiştirebilirim.
Mavi olan kodlarla sayfada bir sütunda koşullu biçimlendirme kullanmam gerekti. Aynı sayıdan 2 tane varsa kırmızı yap, aritmetik değilse yani 1, 3, 4, diye sıralı giderken arada 2 yoksa 3 ü mavi yap. Kodu tam yazamadım. Zaten şuan ki de çalışırken hata veriyor.
Yeşil olan kodlarla satırı seç sil ve satırı seç altına kopyala yapıştır (satır ekle yaparken veri doğrulamayı da alıyor) yaptırmaya çalıştım. Fakat screen update yapmama rağmen satır sil butonu göz kırpıyor (titriyor).

Private Sub Worksheet_Change(ByVal Target As Range) 'İlgili hücrelerdeki formülasyon
Dim Satir As Long
On Error GoTo Son
Application.ScreenUpdating = False
Application.EnableEvents = False
Set ws1 = Worksheets("DLST")
Set ws2 = Worksheets("201001")
ws1.Unprotect Password:="123"
ws2.Unprotect Password:="123"
If Target.Row > 1 Then
Satir = Target.Row
If Cells(Satir, "H") = "" And Cells(Satir, "I") = "" Then
Cells(Satir, "E") = ""
End If
If Cells(Satir, "H") <> "" And Cells(Satir, "I") = "" Then
Cells(Satir, "E") = Cells(Satir, "G")
End If
If Cells(Satir, "H") <> "" And Cells(Satir, "I") <> "" Then
Cells(Satir, "E") = "T102"
End If
If Cells(Satir, "E") = "" And Cells(Satir, "B") = "" Then
Cells(Satir, "A") = ""
End If
If Cells(Satir, "E") <> "" Then
Cells(Satir, "A") = Application.WorksheetFunction.VLookup(201001, ws1.Range("C2:E500"), 3, 0)
End If
End If
ws1.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="123"
ws2.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="123"
Son: Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'D sütunu Demirbaş Numarası yinelenenleri kırmızı boya
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:="123"
With Range("D2:D1000")
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, Formula1:="=EĞER(EĞERSAY(D:D;$D2)>1;1;0)"
.FormatConditions(.FormatConditions.Count).SetFirstPriority
.FormatConditions(.FormatConditions.Count).Interior.Color = 255
.FormatConditions(.FormatConditions.Count).StopIfTrue = True
End With
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="123"
Application.ScreenUpdating = True
End Sub


Sub SatirEkle() 'Demirbaş sayfaları satır ekleme
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect Password:="123"
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="123"
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Sub SatirSil() 'Demirbaş sayfaları satır silme
Application.ScreenUpdating = False
Application.EnableEvents = False
ActiveSheet.Unprotect Password:="123"
Selection.EntireRow.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:="123"
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub


Saygılar
 
Geri
Üst