Kodları başka bir sayfadan tek bir buton ile tetikleme

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ceterisdenge

Kullanıcı
Katılım
28 Tem 2022
Mesajlar
46
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Sayın forum üyesi arkadaşlar herkese iyi günler;
Dosyam biraz dağınık ve büyük olduğu için yüklemedim ama zannedersem buradan meramımı anlatabilirim. Şimdi dosyam da bir sürü sayfa varda işlem yapmak istediğim 10 adet sayfa var (A1, B1, C1, D1) gibi ilerliyor. Şimdi ben bütün bu sayfalarım da standart bir işlem yapıyorum. (Bir sayfanın örneği aşağıda mevcut) Bütün bu işlemler için de 10 tane modül oluşturdum. Bir tane YÖNETİM sayfam var. Ben bu sayfalara girip tek tek makroyu çalıştırıyorum. Bunun zaman almaması için YÖNETİM sayfamdan bir buton ile bütün bu sayfaları nasıl tetiklerim. call A1 gibi şeyleri denedim ama yeterli değil galiba.


Kod:
İndirmek için giriş yapmanız gerekmektedir.
(37 satır)
 
Merhaba Sayın @ceterisdenge .

Aşağıdaki gibi olabilir.
Kodun en başında sayfalar = Array (.......) kısmında, işlem yapılacak safaların isimlerini yazacaksınız.
Bu sayfa isimleri, For shf = 0 To Ubound(sayfalar) ........... Next şeklinde eklenen yeni bir döngüye alınıyor.
Koddaki s1.Cells.... veya s1.Range ..... şeklindeki kısımlar, işleme alınan ilgili sayfadaki hücre/alanı temsil ediyor.
Bir kısmında s1 yoktu, ben tüm Cells.... veya Range.... kısımlarına ekledim. s1 eklemelerini kontrol edin.

VBA:
İndirmek için giriş yapmanız gerekmektedir.
(30 satır)
 
Üstad özür dilerim tam kavrayamadım. Şimdi yukarıda yazdığım koddan 10 modül var. Sub A1(), Sub A2(), Sub A3() gibi isimlerle ilerliyor hepsi ilgili sayfada çalışıyor. Toplam 10 sayfam var onlarda A1, A2, A3, A4 gibi isimlendirdim. Benim bir tanede boş sayfam var A11. Benim yapmak istediğim sadece A11 sayfasında Sub calistir () call A1, call A2 gibi gibi bir şey yapmak yani A11 den kodları tetiklemek. Sizin kodu mesela şöyle mi yapmalıyım.

Sub CALİSTİR()
Dim x As Integer, son As Integer, s1 As Worksheet, s2 As Worksheet, s3 As Worksheet, s4 As Worksheet, s5 As Worksheet.....
sayfalar = Array("A1", "A2", "A3", "A4", "A5")....
For shf = 0 To UBound(sayfalar)

Next
End sub
 
Sayın @ceterisdenge .

Şayet belirttiğiniz 10 modüldeki işlemler aynı, sadece sayfalar değişiyorsa;
belirttiğim (sizin son cevabınızda alıntıladığınız) yöntemle, işlem yapılacak sayfa isimleri döngüye alınıp,
tek makro ile işlemleri, döngüye alınan sayfaların tümünde bir defada yapmak mümkün.

.
 
Ömer hocam böyle bir şey mi buradan sonra takıldım.

Sub MAKRO()
Dim x As Integer, son As Integer, s1 As Worksheet, s2 As Worksheet, s3 As Worksheet, s4 As Worksheet, s5 As Worksheet, s6 As Worksheet, s7 As Worksheet, s8 As Worksheet, s9 As Worksheet, s10 As Worksheet, s11 As Worksheet
sayfalar = Array("A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10")
For shf = 0 To UBound(sayfalar)

Next
End sub
 
For shf = 0 To UBound(sayfalar) satırından sonraki satır
Set s1 = Sheets(sayfalar(shf))
şeklinde olsun, gerisi kendi kodlarınızdan herhangi biri zaten.

Ayrıca kendi kodlarınızda, başında s1 olmayan Cells veya Range ibarelerinin hepsinin soluna s1.CElls(.... gibi sayfasını yazacaksınız.
Böylece işlem yapılacak hücre veya alanın, döngüde sırası gelen sayfadaki hücre olduğunu belirtmiş olacaksınız.

.
 
Sayın @Ömer BARAN , arkadaş makro çalıştıran makro istiyor sanırım.
Bana da lazım.
Arkadaşın örneğinden yola çıkarsak;
A1 , A2, A3, A4, A5 adında 5 adet makroyu sırayala çalıştıracak makro nasıl olmalı.
 
O mesele değil Sayın @leguminosea .

Sayın @ceterisdenge, kullanacağı makroların birbirinin aynısı olduğunu,
herbirinde sadece makronun işlem yapacağı sayfanın değiştiğini belirttiği için o şekilde cevap verdim.

Yoksa, aşağıdaki şekilde oluşturulacak tek makroda sırayla makrolar çalıştırılabilir elbette.

Başında sayfa adı belirtilmeden, kodlarda yer alacak Cells...., Range... kısımları o sırada aktif olan sayfadaki hücreleri ifade edecektir.
Bu nedenle;
-- ya makroların herbirinde bu ibarelerin Sheets("......").Cells(.... ya da Sheets("....").Range("..... gibi düzenlenmesi,
-- ya da herbir makronun başına Sheets(".....").Activate şeklinde birer satır eklenmesi gerekecektir.

VBA:
İndirmek için giriş yapmanız gerekmektedir.
(5 satır)
 
Ömer bey son yazdığınız call Makro1 olayı bildiğim bir şeydi zaten denemiştim ama olmuyordu. Modülün ismi ile makronun ismi aynı olmaması gerekiyormuş neyse ki onu keşfettim :). Ama bir problem oldu. Size ilk gönderdiğim kodu tekrar buraya alıyorum. Bu kodun sadece bir noktasına kadar tetikledi ama devamını hesaplamadı.

Sub A1()
Dim x As Integer, son As Integer, s1 As Worksheet
Set s1 = Sheets("A1")
s1.Range("V2:V10000").ClearContents
son = s1.Cells(Rows.Count, 1).End(xlUp).Row
For x = 2 To son
If Len(Cells(x, 1)) = 3 Then
s1.Cells(x, 23) = Left(Cells(x, 1), 3)
End If

Yukarıda ki bölümü bütün sayfalarda hesaplıyor ama aşağıda kalan yerleri hesaplamıyor. (Sadece 23.sütunda işlem yapıyor)

If Cells(x, 1) <> "" Then Cells(x, 25) = Len(Cells(x, 1))
Next
For x = 2 To son
If Cells(x + 1, 25) > Cells(x, 25) Then
Cells(x, 22) = "Ara Hesap"
Else
Cells(x, 22) = "Alt Hesap"
End If
If Cells(x, 25) = 3 Then
Cells(x, 22) = "Ana Hesap"
End If
If Cells(x, 25) < 3 Then
Cells(x, 22) = "Üst Hesap"
End If
Next
Range("y2:y" & Rows.Count).ClearContents
For x = 2 To son
If Cells(x, 22) = "Ara Hesap" And Cells(x + 1, 22) = "Ara Hesap" Then Cells(x + 1, 24) = "Ara Hesap"
If Cells(x, 22) <> "Ara Hesap" And Cells(x + 1, 22) = "Ara Hesap" And Cells(x + 2, 22) <> "Ara Hesap" Then Cells(x + 1, 24) = "Ara Hesap"
If Cells(x, 24) = "Ara Hesap" And Cells(x + 1, 22) = "Ara Hesap" Then Cells(x, 24) = ""
Next
End Sub
 
Daha evvel de belirtmiştim.

-- Kodlarda yer alan Cells.... ve Range.... kısımlarını s1.Cells(.... ve s1.Range(...... şeklinde değiştirerek
-- Ya da her makronun başına s1.Activate şeklinde birer satır ekleyerek
denediğinizden emin misiniz?

Bir önceki cevabımda açıklamıştım.
Makroda sayfa ismi belirtilmemiş Cells.... veya Range(.... ibareleri, işlem yapılan sayfa aktif değilse, ilgili sayfadaki hücreyi/adresi değil
işlem sırasında aktif olan sayfa hangisiyse o sayfadaki hücreyi/adresi ifade edecek, bu nedenle de kod istenilen sonucu vermeyecektir.

Halledemezseniz işlem yapılacak enaz 2 sayfanın (sayfalardaki veri yığınının az olmasını sağlayın) ve bu iki sayfada kullanılan makroların içinde olduğu bir örnek belge ekleyin bakayım.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst Alt