Excel ve makro deneyimleri (dosya3)

(105) Excel de, Oda planı (Çalışanların isimlerine tıklayınca, Oda resminde fotoğraflarının çıkması)

Gemini ye Kod tarifi:
Excel makro kodu ver. 
Açılışta tüm resimleri en arkaya gönder. 
Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6 en öne getir. Geriye kalan tüm resimleri en arkaya gönder.
A1 hücresine tıklanırsa da aynı işlemi yap. (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6 en öne getir. Geriye kalan tüm resimleri en arkaya gönder.)
B6:H10 hücrelerine tıklanırsa da aynı işlemi yap (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6 en öne getir. Geriye kalan tüm resimleri en arkaya gönder.)
B6:H10 arasında birleştirilmiş hücreler olsa da, her hangi birine tıklanırsa, hücrelerine tıklanırsa da aynı işlemi yap (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6 en öne getir. Geriye kalan tüm resimleri en arkaya gönder.)

"J10" hücresine tıklayınca, "Resim x1" den "Resim x12" ye kadar tüm resimleri en öne getir.

B2 hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x1 en öne getir. geriye kalan resimleri en arkaya gönder)
B3:B4 arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x2 en öne getir. geriye kalan resimleri en arkaya gönder)

C2 hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x3 en öne getir. geriye kalan resimleri en arkaya gönder)
C3:C4 arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x4 en öne getir. geriye kalan resimleri en arkaya gönder)

D2 hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x5 en öne getir. geriye kalan resimleri en arkaya gönder)
D3 hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x6 en öne getir. geriye kalan resimleri en arkaya gönder)
D4 hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x7 en öne getir. geriye kalan resimleri en arkaya gönder)

E2:E4  arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x8 en öne getir. geriye kalan resimleri en arkaya gönder)

F2:G2  arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x9 en öne getir. geriye kalan resimleri en arkaya gönder)
F3:G3  arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x10 en öne getir. geriye kalan resimleri en arkaya gönder)
F4:G4  arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x11 en öne getir. geriye kalan resimleri en arkaya gönder)

H2:I4  arasında birleştirilmiş hücreler olsa da, hücresine tıklanırsa, (Resim a1, Resim a2, Resim a3, Resim a4, Resim a5, Resim a6, Resim x12 en öne getir. geriye kalan resimleri en arkaya gönder)

Bu Çalışma Kitabı:
Private Sub Workbook_Open()
    ' Dosya açıldığında Sayfa1 üzerindeki düzeni başlatır
    Call ResimDuzenle(Sheets("Sayfa1").Range("A1"))
End Sub

Sayfa1:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' Birden fazla hücre seçilirse (veya birleştirilmiş hücre seçilirse)
    ' sadece ilk hücreyi baz alarak işlemi yürütür.
    Call ResimDuzenle(Target.Cells(1, 1))
End Sub

Sub Kapat()
    Application.WindowState = xlMaximized
    Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", False)"
    Application.DisplayFormulaBar = False
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    ws.Activate
    ActiveWindow.DisplayGridlines = False
    ActiveWindow.DisplayHeadings = False
    Next ws
    ThisWorkbook.Sheets(1).Activate
    ActiveSheet.Range("A1").Select
    ActiveWorkbook.Save
End Sub


Sub Ac()
    Application.WindowState = xlMaximized
    Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"", True)"
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
    ws.Activate
    ActiveWindow.DisplayGridlines = False
    ActiveWindow.DisplayHeadings = True
    Next ws
    Application.DisplayFormulaBar = True
    ThisWorkbook.Sheets(1).Activate
    Range("A1").Select
    ActiveWorkbook.Save
End Sub


Sub OK_ResimleriGoruntule()
    Dim ws As Worksheet
    Dim shp As Shape
    Dim i As Integer
    
    ' Makronun çalıştığı aktif sayfayı ayarla
    Set ws = ActiveSheet
    
    ' Hata kontrolü: Resim isimleri hatalıysa makro durmasın
    On Error Resume Next
    
    ' 1. TÜM resimleri önce en arkaya gönder (Temizlik)
    For Each shp In ws.Shapes
        ' Sadece resimleri arkaya at, butonu (şekli) arkaya atmasın isterseniz
        ' aşağıdaki kontrolü kullanabilirsiniz.
        If shp.Name <> "OK" Then
            shp.ZOrder msoSendToBack
        End If
    Next shp
    
    ' 2. Önce temel "Resim a1"den "Resim a6"ya kadar olanları öne getir
    For i = 1 To 6
        ws.Shapes("Resim a" & i).ZOrder msoBringToFront
    Next i
    
    ' 3. Sonra "Resim x1"den "Resim x12"ye kadar olanları EN ÖNE getir
    ' (Böylece "a" serisinin de üstünde görünürler)
    For i = 1 To 12
        ws.Shapes("Resim x" & i).ZOrder msoBringToFront
    Next i
    
    On Error GoTo 0

End Sub

Module1:
Sub ResimDuzenle(Target As Range)
    Dim ws As Worksheet: Set ws = Target.Worksheet
    Dim shp As Shape
    Dim i As Integer
    
    ' Hata kontrolü: Resim bulunamazsa durmasın
    On Error Resume Next
    
    ' 1. TÜM resimleri en arkaya gönder (Temizlik)
    For Each shp In ws.Shapes
        shp.ZOrder msoSendToBack
    Next shp
    
    ' 2. ÖZEL DURUM: J10 Hücresine tıklandıysa
    If Not Intersect(Target, ws.Range("J10")) Is Nothing Then
        ' Önce temel a serisini öne getir
        For i = 1 To 6
            ws.Shapes("Resim a" & i).ZOrder msoBringToFront
        Next i
        ' Sonra x1-x12 serisini EN ÖNE getir (Böylece a serisinin de üstünde kalırlar)
        For i = 1 To 12
            ws.Shapes("Resim x" & i).ZOrder msoBringToFront
        Next i
        Exit Sub ' J10 işlemi bitti, aşağıyı kontrol etmeye gerek yok
    End If

    ' 3. DİĞER HÜCRE KONTROLLERİ
    Dim ekstraResim As String
    ekstraResim = ""

    If Not Intersect(Target, ws.Range("A1")) Is Nothing Or _
       Not Intersect(Target, ws.Range("B6:I10")) Is Nothing Then
        ' İşlem yapmaya gerek yok, sadece a serisi öne gelecek
    ElseIf Not Intersect(Target, ws.Range("B2")) Is Nothing Then: ekstraResim = "Resim x1"
    ElseIf Not Intersect(Target, ws.Range("B3:B4")) Is Nothing Then: ekstraResim = "Resim x2"
    ElseIf Not Intersect(Target, ws.Range("C2")) Is Nothing Then: ekstraResim = "Resim x3"
    ElseIf Not Intersect(Target, ws.Range("C3:C4")) Is Nothing Then: ekstraResim = "Resim x4"
    ElseIf Not Intersect(Target, ws.Range("D2")) Is Nothing Then: ekstraResim = "Resim x5"
    ElseIf Not Intersect(Target, ws.Range("D3")) Is Nothing Then: ekstraResim = "Resim x6"
    ElseIf Not Intersect(Target, ws.Range("D4")) Is Nothing Then: ekstraResim = "Resim x7"
    ElseIf Not Intersect(Target, ws.Range("E2:E4")) Is Nothing Then: ekstraResim = "Resim x8"
    ElseIf Not Intersect(Target, ws.Range("F2:G2")) Is Nothing Then: ekstraResim = "Resim x9"
    ElseIf Not Intersect(Target, ws.Range("F3:G3")) Is Nothing Then: ekstraResim = "Resim x10"
    ElseIf Not Intersect(Target, ws.Range("F4:G4")) Is Nothing Then: ekstraResim = "Resim x11"
    ElseIf Not Intersect(Target, ws.Range("H2:I4")) Is Nothing Then: ekstraResim = "Resim x12"
    End If

    ' 4. Standart a1-a6 resimlerini öne getir
    For i = 1 To 6
        ws.Shapes("Resim a" & i).ZOrder msoBringToFront
    Next i
    
    ' 5. Eğer bir x resmi seçildiyse onu en üste koy
    If ekstraResim <> "" Then
        ws.Shapes(ekstraResim).ZOrder msoBringToFront
    End If
    
    On Error GoTo 0
End Sub