0

I created this code in VBA so that every time I delete a number or the cell is empty(D7:O36), this code will run automatically(on selection change).

The code runs fine if a certain small amount of cells(~100) gets empty at once, then the cells will get filled with a "-".

The problem is that after doing it all at once more that around 100 times(each cell), Excel will stop working with error of run time error 1004. I've read about the error but it doesn't look like it applies here, at least not to the naked eye.

I don't know if the problem is how I implemented it or that i'm doing something too heavy for excel to handle.

UPDATE:

Thanks to - Tim Williams - comment bellow, the issue was not only fixed(for some reason it worked) but the code got super small and simple, AND it runs faster AND each time the "-" is added, Excel doesn't pull you to the active cell(you can activate other cell meanwhile the code is running)

Comment:

Maybe simpler: Dim c As Range: For Each c In Me.Range("D7:O36").Cells: If Len(c.Value)=0 Then c.Formula = "=""-""": Next c – Tim Williams

Here is the updated code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range
    For Each c In Me.Range("D7:O36").Cells
        If c.Value = "" Then
            c.Formula = "-":
        End If
    Next c
End Sub

Original code:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim num As Integer
    Dim letter As String
    Dim count As Integer
    Dim cellvalue As String
    Dim cellnum As String

    letter = "D"
    num = 7
    count = 0
    
    For i = 0 To 432
        cellnum = letter & num
        cellvalue = Range(cellnum).Value
        If cellvalue = "" Then
            Range(cellnum).Select
            ActiveCell.FormulaR1C1 = "-"
        End If
        
        If num = 36 Then
            If count = 0 Then
                letter = "E"
            ElseIf count = 1 Then
                letter = "F"
            ElseIf count = 2 Then
                letter = "G"
            ElseIf count = 3 Then
                letter = "H"
            ElseIf count = 4 Then
                letter = "I"
            ElseIf count = 5 Then
                letter = "J"
            ElseIf count = 6 Then
                letter = "K"
            ElseIf count = 7 Then
                letter = "L"
            ElseIf count = 8 Then
                letter = "M"
            ElseIf count = 9 Then
                letter = "N"
            ElseIf count = 10 Then
                letter = "O"
            End If
            
            num = 6
            count = count + 1
        End If
        num = num + 1
    Next i
End Sub

  • 1
    Maybe simpler: `Dim c As Range: For Each c In Me.Range("D7:O36").Cells: If Len(c.Value)=0 Then c.Formula = "=""-""": Next c` – Tim Williams Feb 26 '22 at 22:18
  • @TimWilliams - I like the simplification, but isn't `c.Value = "-"` more like what OP is doing? bc `.FormulaR1C1 = "-"` in the original snippet just writes `-` to the cell, not a formula. – BigBen Feb 26 '22 at 22:32
  • @BigBen - for some reason I had it in my head the Excel doesn't like plain `-` as a cell value - my mistake I guess – Tim Williams Feb 26 '22 at 22:53
  • @TimWilliams - Actually, it worked... and it's much simpler – Guilherme_Torq Feb 26 '22 at 23:12

0 Answers0