Soru iki farklı bağımsız makroyu "BuÇalışmaKitabı" altında çalıştırmak Hk.

Katılım
27 Kasım 2013
Mesajlar
2
Excel Vers. ve Dili
Microsoft Office Professional Plus 2010
Merhabalar,
Kullandığım excel kitabında oluşturduğum takip sistemine göre, açılan her bir sekmenin adının "C1" Hücrelerinde girilen değerden kopyalanması için,
"
Private Sub Workbook_SheetChange(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Range("C1") <> "" Then
Sh.Name = Left(Range("C1"), 31)
End If
End Sub
"

Makrosunu,
ve liste birden çok kullanıcının değer gireceği bir dosya olması sebebiyle ilgili sekmedek değişikliğin hangi kullanıcı tarafından hangi tarihte yapıldığının "B1" hücresinde görüntülenmesi içinse,
"
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
Sh.Range("B1") = "Revised: " & Format(Date, "mm/dd/yyyy") & " at " & Format(Time, "hh:mm AMPM") & " by " & Application.UserName
Application.EnableEvents = True
End Sub
"
kullanmak istiyorum.
Bu makrolar ayrı ayrı yazıldığında problemsiz çalışıyorlar.
Ancak alt alta yazdığımda "Ambiguous name detected" hatası veriyor.

Bu iki makroyu eş zamanlı ve otomatik olarak çalıştırabilecek kod kurgusu için destek olabilir misiniz?
İlginiz için teşekkür ederim.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,599
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Sizin kodlarınız tüm hücre değişikliğinde çalışacaktır. Oysa Değişiklik yapılan hücreler belli ise örneğin A sütununda olduğu gibi ya da sadece C1 hücresinde olması gibi olursa kodlar hızlı çalışacaktır. Yoksa tüm hücrelerde makro çalışacaktır.

Bu açıklamadan sonra sizin kodlar şu şekilde olabilir:

Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    If Range("C1") <> "" Then Sh.Name = Left(Range("C1"), 31)
    Sh.Range("B1") = "Revised: " & Format(Date, "mm/dd/yyyy") & " at " & Format(Time, "hh:mm AMPM") & " by " & Application.UserName
    Application.EnableEvents = True
    
End Sub
 
Katılım
27 Kasım 2013
Mesajlar
2
Excel Vers. ve Dili
Microsoft Office Professional Plus 2010
Necdet Bey merhaba,
İlginiz için çok teşekkür ederim.
Hazırladığınız haliyle kodu kaydederek dosyamı denediğimde tam olarak istediğim şekilde çalıştı.
Benzer kod türevlerini ben de uyguladım. Ancak her iki makroda farklı olarak yazılan parantez için tanımlamaların olmazsa olmaz olduğunu düşündüğüm için mutlaka kodlarımda bulundurmaya gayret ettim. Haliyle başarısız oldum.
(ByVal Sh As Object, ByVal Target As Range) ve (ByVal SaveAsUI As Boolean, Cancel As Boolean) komutlarının (belki de sadece açıklama) tam olarak fonksiyonunu anlayamadığımı fark ettim. Sizin tekrar düzenlediğiniz kodda boolean'ın bulunmamasına rağmen kodun beklenen görevi uygulamasının nedenini anlayamadım.
Vaktiniz olduğu bir vakit eksiğim olan bu konularda deneyerek veya okuyarak öğrenebileceğim bir kaynak önerirseniz sevinirim.
Tekrar tekrar teşekkür ederim.
İyi çalışmalar dilerim.

Merhaba,

Sizin kodlarınız tüm hücre değişikliğinde çalışacaktır. Oysa Değişiklik yapılan hücreler belli ise örneğin A sütununda olduğu gibi ya da sadece C1 hücresinde olması gibi olursa kodlar hızlı çalışacaktır. Yoksa tüm hücrelerde makro çalışacaktır.

Bu açıklamadan sonra sizin kodlar şu şekilde olabilir:

Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Application.EnableEvents = False
    If Range("C1") <> "" Then Sh.Name = Left(Range("C1"), 31)
    Sh.Range("B1") = "Revised: " & Format(Date, "mm/dd/yyyy") & " at " & Format(Time, "hh:mm AMPM") & " by " & Application.UserName
    Application.EnableEvents = True
    
End Sub
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,599
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,

Aşağıdaki kodlar sadece Sayfa1 ve C1 hücresinde değişiklik olduğunda çalışır.
Örneği inceleyiniz, fikir verecektir.

Kod:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    If Intersect(Target, [C1]) Is Nothing And Sh.Name <> "Sayfa1" Then Exit Sub
    
    Application.EnableEvents = False
    If Range("C1") <> "" Then Sh.Name = Left(Range("C1"), 31)
    Sh.Range("B1") = "Revised: " & Format(Date, "mm/dd/yyyy") & " at " & Format(Time, "hh:mm AMPM") & " by " & Application.UserName
    Application.EnableEvents = True
    
End Sub
 
Üst