Excel Mac VBA цикл через ячейки и сбросить некоторые значения

в настоящее время у меня есть 12 копий книги - по одному для каждого из мест нашей компании. Существует несколько столбцов и одна строка для каждого дня месяца. Каждый день менеджер местоположений заполняет 2 столбца, остальные рассчитываются автоматически. Есть несколько "сложных" пользователей, которые отказываются вводить ноль во втором столбце, если нет суммы за этот день,и они оставляют его пустым, вызывая ошибки по всему листу.

всегда будет a значение для каждого дня в столбце A, поэтому я хотел бы запустить макрос, когда пользователи нажимают "сохранить", который проверит столбец A для значения. Если есть значение, то это означает, что этот день прошел, и в столбце D должно быть значение (даже если оно равно нулю).

подводя итог, если столбец A не пуст, отметьте столбец D. Если он пуст, заполните его нулем. Если он не пуст, пользователь ввел значение, так что мы можем двигаться дальше. Когда он попадет в пустую ячейку столбца A, просто закройте весь процесс.

Я был в Интернете в течение нескольких дней, пытаясь выяснить это, и вот что у меня пока есть:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim curCell As Range
  'Labor Flow Sheet'.Select

  For Each curCell in Range(A1:D31)
    If curCell.Value = "" Then
     <???????>
    End If
  Next curCell
End Sub

Я установил диапазон на всю область, однако я не уверен, как узнать, что цикл будет проверять только столбец A. должен ли диапазон быть (A1:A31) вместо этого? Тогда как я скажу ему пропустить в той же строке в столбец D, чтобы проверить это значение?

Я действительно ценю помощь заранее. Я надеюсь, что некоторые помощь в этом сообществе отвечая на другие вопросы, где я могу, как хорошо!

еще раз спасибо

11
задан Dru Darby
28.04.2023 14:47 Количество просмотров материала 2719
Распечатать страницу

1 ответ

Я не получил шанс проверить это, но он должен работать все, что вам нужно будет сделать, это добавить свою собственную книгу и имя листа.

Sub test()
Dim Ws As Worksheet
Dim X As Long

Application.ScreenUpdating = False
Set Ws = Workbooks("").Sheets("Sheet1") ' add your workbook here

For X = 1 To Ws.Range("A" & Rows.Count).End(xlUp).Row
If Not Ws.Cells(X, 1).Value = vbNullString Then
    If Ws.Cells(X, 4).Value = vbNullString Then      
    Ws.Cells(X, 4).Value = "0"        
    End If        
ElseIf Ws.Cells(X, 1) = vbNullString Then        
    Exit Sub    
End If
Next X

Application.ScreenUpdating = True
End Sub

в зависимости от размера вашей книги я думаю, что стоит отключить обновление экрана, но его не нужно также использовать VbNullString лучше, чем"", так как это не занимает памяти.

надеюсь, это поможет,

Tom

1
отвечен Tom D 2023-04-29 22:35

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх