2

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

В столбце A всегда будет значение для каждого дня, поэтому я хотел бы запустить макрос, когда пользователи нажимают кнопку сохранения, чтобы проверить значение в столбце A. Если есть значение, то это означает, что этот день прошел, и ДОЛЖНО быть значение в столбце D (даже если оно равно нулю).

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

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

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, чтобы проверить это значение?

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

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

1 ответ1

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 не обязательно, так как это лучше, чем "", так как это не занимает памяти.

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

Том

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .