Soru Birleştirilmiş Hücrede Girilen Veriye Göre Satır Genişlemesi

Katılım
7 Şubat 2021
Mesajlar
523
Excel Vers. ve Dili
2010, Türkiye
Korhan hocam çok teşekkür ederim. Emeğinize sağlık .Birşey öğrenmek istiyorum. Eğer ki A,B,C,D sayfalarında ben D7:N50 satırları arasında veri olmayan satırların gizlenmesini değiştirmek istediğimde örneğin D10:N50 arası yapmak istiyorum.Hangi makroda hangi satırda işlem yapmam gerekiyor?
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,875
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
C++:
WS.Range("D7:D50").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
 
Katılım
7 Şubat 2021
Mesajlar
523
Excel Vers. ve Dili
2010, Türkiye
Günaydın;
Hocam makronun C7:R50 hücre aralığında tetiklenmesi için aşağıdaki satırı değiştirdiğimde makro hata veriyor.Birde hocam D sütundaki herhangi bir satırı sildiğim zaman sıra numarasını da sildirebilir miyiz
Kod:
If Not Intersect(Target, Range("C7:R50")) Is Nothing Then
Hata satırı
Kod:
.Cells.Delete
 
Katılım
7 Şubat 2021
Mesajlar
523
Excel Vers. ve Dili
2010, Türkiye
Kodu If Not Intersect(Target, Range("D7:R50")) Is Nothing Then
Aralığında yaptığım zaman hata vermiyor. Sıra numarasını silme işlemi D sütünundaki hücreyi sildiğimizde olabilirse sorun kalmayacak görünüyor hocam
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,875
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodu If Not Intersect(Target, Range("D7:R50")) Is Nothing Then
Aralığında yaptığım zaman hata vermiyor. Sıra numarasını silme işlemi D sütünundaki hücreyi sildiğimizde olabilirse sorun kalmayacak görünüyor hocam
Kodu bu talebinize göre tekrar revie ettim...
 
Katılım
7 Şubat 2021
Mesajlar
523
Excel Vers. ve Dili
2010, Türkiye
Korhan bey merhabalar;
Makroyu asıl dosyama uyarladım. Bazı hücrelerin bozulması için sayfaya koruma ekledim. Fakat makro hata veriyor. Bakabilir misiniz. Şifre :1978
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    Sheets("ARAÇ VERİ GİRİŞİ").Unprotect 1978
    If Not Intersect(Target, Range("D30:R80")) Is Nothing Then
        Dim WS As Worksheet, S1 As Worksheet, S2 As Worksheet
        Dim XWidth As Integer, XHeight As Integer
        Dim Rng As Range, My_Data As Variant, Last_Row As Long
        Dim No As Integer, X As Integer, Count As Integer
           
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
       
        Set S1 = Sheets("ARAÇ VERİ GİRİŞİ")
        S1.Range("C30:C80").VerticalAlignment = xlCenter
        S1.Range("C30:C80").ClearContents
        S1.Range("D30:N80").WrapText = True
        S1.Range("D30:N80").EntireRow.AutoFit
       
        For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
            S1.Range("C30:R80").Copy WS.Range("C30:R80")
            WS.Range("D30:N80").WrapText = True
            WS.Range("D30:N80").EntireRow.AutoFit
     
        Next
       
        On Error Resume Next
        Sheets("Test").Delete
        On Error GoTo 0
       
        Sheets.Add
        Set S2 = ActiveSheet
        S2.Name = "Test"
       
        For Each Rng In S1.Range("D30:N80").Columns(1).Cells
            If Rng.Value <> "" Then
                XWidth = S1.Range("D30:N30").Columns.Width
                XHeight = 0
               
                No = 2
               
                With S2
                    .Cells.Delete
                    .Cells.Font.Size = Rng.Font.Size
                    .Range("A1") = Rng.Value
                    .Range("A:A").WrapText = True
                    .Range("A1").VerticalAlignment = xlJustify
                    .Range("A1").ColumnWidth = XWidth / 5.3
                    .Range("A1").EntireRow.AutoFit
                   
                    My_Data = Split(.Range("A1"), Chr(10))
                   
                    For X = 0 To UBound(My_Data)
                        .Cells(No, 1) = My_Data(X)
                        XHeight = XHeight + .Cells(No, 1).RowHeight
                        No = No + 1
                    Next
                   
                    .Cells.Delete
                End With
             
                If XHeight = 0 Then XHeight = 15
                Rng.RowHeight = XHeight
               
                S1.Range("C30") = 1
                Last_Row = S1.Cells(100, 4).End(3).Row - 29
                S1.Range("C30").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=Last_Row, Trend:=False
               
                For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
                    S1.Range("C30:R80").Copy WS.Range("C30:R80")
                    WS.Range("D30:N80").WrapText = True
                    WS.Rows(Rng.Row).RowHeight = XHeight
                    WS.Range("D35:D85").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
       
 
               Next
            End If
        Next
   
        On Error Resume Next
        S2.Delete
        On Error GoTo 0
       
        Set S1 = Nothing
        Set S2 = Nothing
        Set WS = Nothing
   
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End If
Sheets("ARAÇ VERİ GİRİŞİ").Protect 1978
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,875
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kodu aşağıdaki şekilde güncellerseniz benim önerim için hata mesajından kurtulabilirsiniz.

Ama koruma ekleyince başka kodlarınız hata verebilir. Onlarıda kontrol etmeniz gerekir.

C++:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D30:R80")) Is Nothing Then
        Dim WS As Worksheet, S1 As Worksheet, S2 As Worksheet
        Dim XWidth As Integer, XHeight As Integer
        Dim Rng As Range, My_Data As Variant, Last_Row As Long
        Dim No As Integer, X As Integer, Count As Integer
            
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.EnableEvents = False
        
        Set S1 = Sheets("ARAÇ VERİ GİRİŞİ")
        S1.Unprotect 1978
        S1.Range("C30:C80").VerticalAlignment = xlCenter
        S1.Range("C30:C80").ClearContents
        S1.Range("D30:N80").WrapText = True
        S1.Range("D30:N80").EntireRow.AutoFit
        
        For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
            S1.Range("C30:R80").Copy WS.Range("C30:R80")
            WS.Range("D30:N80").WrapText = True
            WS.Range("D30:N80").EntireRow.AutoFit
        Next
        
        On Error Resume Next
        Sheets("Test").Delete
        On Error GoTo 0
        
        Sheets.Add
        Set S2 = ActiveSheet
        S2.Name = "Test"
        
        For Each Rng In S1.Range("D30:N80").Columns(1).Cells
            If Rng.Value <> "" Then
                XWidth = S1.Range("D30:N30").Columns.Width
                XHeight = 0
                
                No = 2
                
                With S2
                    .Cells.Delete
                    .Cells.Font.Size = Rng.Font.Size
                    .Range("A1") = Rng.Value
                    .Range("A:A").WrapText = True
                    .Range("A1").VerticalAlignment = xlJustify
                    .Range("A1").ColumnWidth = XWidth / 5.3
                    .Range("A1").EntireRow.AutoFit
                    
                    My_Data = Split(.Range("A1"), Chr(10))
                    
                    For X = 0 To UBound(My_Data)
                        .Cells(No, 1) = My_Data(X)
                        XHeight = XHeight + .Cells(No, 1).RowHeight
                        No = No + 1
                    Next
                    
                    .Cells.Delete
                End With
              
                If XHeight = 0 Then XHeight = 15
                Rng.RowHeight = XHeight
                
                S1.Range("C30") = 1
                Last_Row = S1.Cells(100, 4).End(3).Row - 29
                S1.Range("C30").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=Last_Row, Trend:=False
                
                For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
                    S1.Range("C30:R80").Copy WS.Range("C30:R80")
                    WS.Range("D30:N80").WrapText = True
                    WS.Rows(Rng.Row).RowHeight = XHeight
                    WS.Range("D35:D85").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
                Next
            End If
        Next
    
        On Error Resume Next
        S2.Delete
        On Error GoTo 0
        
        S1.Protect 1978
        
        Set S1 = Nothing
        Set S2 = Nothing
        Set WS = Nothing
    
        Application.EnableEvents = True
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End If
End Sub
 
Katılım
7 Şubat 2021
Mesajlar
523
Excel Vers. ve Dili
2010, Türkiye
Kodu aşağıdaki şekilde güncellerseniz benim önerim için hata mesajından kurtulabilirsiniz.

Ama koruma ekleyince başka kodlarınız hata verebilir. Onlarıda kontrol etmeniz gerekir.

C++:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("D30:R80")) Is Nothing Then
        Dim WS As Worksheet, S1 As Worksheet, S2 As Worksheet
        Dim XWidth As Integer, XHeight As Integer
        Dim Rng As Range, My_Data As Variant, Last_Row As Long
        Dim No As Integer, X As Integer, Count As Integer
           
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.EnableEvents = False
       
        Set S1 = Sheets("ARAÇ VERİ GİRİŞİ")
        S1.Unprotect 1978
        S1.Range("C30:C80").VerticalAlignment = xlCenter
        S1.Range("C30:C80").ClearContents
        S1.Range("D30:N80").WrapText = True
        S1.Range("D30:N80").EntireRow.AutoFit
       
        For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
            S1.Range("C30:R80").Copy WS.Range("C30:R80")
            WS.Range("D30:N80").WrapText = True
            WS.Range("D30:N80").EntireRow.AutoFit
        Next
       
        On Error Resume Next
        Sheets("Test").Delete
        On Error GoTo 0
       
        Sheets.Add
        Set S2 = ActiveSheet
        S2.Name = "Test"
       
        For Each Rng In S1.Range("D30:N80").Columns(1).Cells
            If Rng.Value <> "" Then
                XWidth = S1.Range("D30:N30").Columns.Width
                XHeight = 0
               
                No = 2
               
                With S2
                    .Cells.Delete
                    .Cells.Font.Size = Rng.Font.Size
                    .Range("A1") = Rng.Value
                    .Range("A:A").WrapText = True
                    .Range("A1").VerticalAlignment = xlJustify
                    .Range("A1").ColumnWidth = XWidth / 5.3
                    .Range("A1").EntireRow.AutoFit
                   
                    My_Data = Split(.Range("A1"), Chr(10))
                   
                    For X = 0 To UBound(My_Data)
                        .Cells(No, 1) = My_Data(X)
                        XHeight = XHeight + .Cells(No, 1).RowHeight
                        No = No + 1
                    Next
                   
                    .Cells.Delete
                End With
             
                If XHeight = 0 Then XHeight = 15
                Rng.RowHeight = XHeight
               
                S1.Range("C30") = 1
                Last_Row = S1.Cells(100, 4).End(3).Row - 29
                S1.Range("C30").DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1, Stop:=Last_Row, Trend:=False
               
                For Each WS In Sheets(Array("ARIZA TESPİT RAPORU", "TAMİR SONRASI FORM"))
                    S1.Range("C30:R80").Copy WS.Range("C30:R80")
                    WS.Range("D30:N80").WrapText = True
                    WS.Rows(Rng.Row).RowHeight = XHeight
                    WS.Range("D35:D85").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
                Next
            End If
        Next
   
        On Error Resume Next
        S2.Delete
        On Error GoTo 0
       
        S1.Protect 1978
       
        Set S1 = Nothing
        Set S2 = Nothing
        Set WS = Nothing
   
        Application.EnableEvents = True
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End If
End Sub
Tekrar teşekkür ediyorum
 
Üst