Excel Mac VBA Loop Through Cells і скинути деякі значення


2

Наразі у мене є 12 копій книги - по одному для кожного місця розташування нашої компанії. Є кілька стовпців і один рядок для кожного дня місяця. Щодня менеджер розташування заповнює 2 стовпці, а решта обчислюється автоматично. Є декілька "складних" користувачів, які відмовляються вводити нуль у другому стовпчику, якщо для цього дня немає суми, і вони залишають його порожнім, що призводить до помилок у робочому листі.

У стовпці А завжди буде значення для кожного дня, тому я хотів би запустити макрос, коли користувачі натискають кнопку "Зберегти", що перевірятиме стовпець А значення. Якщо є значення, то це означає, що цей день пройшов, і там повинно бути значення в стовпці D (навіть якщо це нуль).

Щоб підсумувати це, якщо стовпець А не є порожнім, перевірте стовпець 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

Я встановив діапазон для всієї області, але я не впевнений, як знати, що цикл буде тільки перевірити стовпець А. Якщо діапазон буде (A1: A31) замість цього? Тоді як я можу сказати йому пропустити в тому ж рядку до стовпця D, щоб перевірити це значення?

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

Знову дякую

Відповіді:


1

Я не отримав шанс перевірити це, але він повинен працювати все, що вам потрібно зробити, це додати власну робочу книгу & amp; назву листа.

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 краще, ніж "" як це займає не пам'ять.

Сподіваюся, що це допоможе,

Том


Велике спасибі Том! Thats напрямок я потребував! Чи можете ви сказати мені, як це не починається до рядка 5? У мене є деякі дані заголовка в рядках 1-4, які я хочу обійти. Ще раз спасибі!
Dru Darby

не проблема, якщо ви зміните X = 1 на X = 5 на рядку 10, це почне цикл у рядку 5.
Tom D
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.