• DİKKAT

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

Makroyla bir range'i silip başka bir makroyla geri almak

  • Konbuyu başlatan Konbuyu başlatan cagribb
  • Başlangıç tarihi Başlangıç tarihi
Katılım
2 Nisan 2017
Mesajlar
2
Excel Vers. ve Dili
2016
Selamlar,
çeşitli makrolardan kendime aşağıdaki iki makroyu uyarladım.

makrosil girdiğim range'in içeriğni temizliyor

undozero da bu temizleme işlemini geri alıyor.

bu haliyle sorunumu çözdü ancak makrosil yanlışlıkla üst üste iki kez tıklanırsa undozerı geri alamıyor. veri tamamen uçuyor.
makrosil bir kere çalışıp verileri sildiğinde o range'de veri yoksa tekrar çalışmamasını sağlmak istiyorum.
Nasıl çözebilecğeim konusunda yardımcı olabilir misiniz ?

Kod:
Type SaveRange
        Val As Variant
        Addr As String
    End Type
    
'   Stores info about current selection
    Public OldWorkbook As Workbook
    Public OldSheet As Worksheet
    Public OldSelection() As SaveRange
     

Sub MakroSil()

' MakroSil Makro
'
    Range("E5:N5").Select
     ReDim OldSelection(Selection.Count)
    Set OldWorkbook = ActiveWorkbook
    Set OldSheet = ActiveSheet
    i = 0
    For Each cell In Selection
        i = i + 1
        OldSelection(i).Addr = cell.Address
        OldSelection(i).Val = cell.Formula
            
    Next cell
    
    Selection.ClearContents
                     
'   Specify the Undo Sub
   Application.OnUndo "Undo the ZeroRange macro", "UndoZero"
End Sub


Sub UndoZero()
'   Undoes the effect of the ZeroRange sub
    
'   Tell user if a problem occurs
    On Error GoTo problem

    Application.ScreenUpdating = False
    
'   Make sure the correct workbook and sheet are active
    OldWorkbook.Activate
    OldSheet.Activate
    
'   Restore the saved information
    For i = 1 To UBound(OldSelection)
        Range(OldSelection(i).Addr).Formula = OldSelection(i).Val
    Next i
    Exit Sub

'   Error handler
problem:
    MsgBox "Gelirler Zaten Ekli"
End Sub
'Other examples of Undo

Teşekkürler :)
 
Kodlarınız silinen verileri geçici olarak bir dizine alıyor. 2. sefer çalıştırdığınızda o dizindeki veriler yerine boş veri geldiği için geri alda veri gelmiyor. E5 hücresinde veri yoksa kod aktif olmayacak şekilde değiştirdim.
Kod:
Sub MakroSil()

' MakroSil Makro
'
If Range("E5") <> "" Then
    Range("E5:N5").Select
    ReDim OldSelection(Selection.Count)
    Set OldWorkbook = ActiveWorkbook
    Set OldSheet = ActiveSheet
    i = 0
    For Each cell In Selection
  
            i = i + 1
            OldSelection(i).Addr = cell.Address
            OldSelection(i).Val = cell.Formula

    Next cell
    
    Selection.ClearContents
End If
'   Specify the Undo Sub
   Application.OnUndo "Undo the ZeroRange macro", "UndoZero"
End Sub
 
Rica ederim. Kolay gelsin.
 
Geri
Üst