Excel Mac VBA Loop através de células e redefinir alguns valores

2

Atualmente, tenho 12 cópias de uma pasta de trabalho, uma para cada uma das localizações da empresa. Existem várias colunas e uma linha para cada dia do mês. Todos os dias, o Gerenciador de locais preenche duas colunas e o restante é calculado automaticamente. Existem alguns usuários "complicados" que se recusam a inserir um zero na segunda coluna, se não houver um valor para esse dia, e deixam em branco, causando erros na planilha.

Sempre haverá um valor para cada dia na coluna A, portanto, gostaria de executar uma macro quando os usuários clicarem em salvar, o que verificará a coluna A quanto a um valor. Se houver um valor, significa que este dia passou e que deve haver um valor na coluna D (mesmo que seja zero).

Para resumir, se a coluna A não estiver em branco, verifique a coluna D. Se estiver em branco, preencha-a com um zero. Se não estiver em branco, o usuário inseriu um valor para podermos seguir em frente. Quando chegar a uma célula na coluna A que está em branco, basta encerrar todo o processo.

Eu tenho navegado na Internet por alguns dias tentando descobrir isso, e aqui está o que eu tenho até agora:

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

Configurei o intervalo para toda a área, mas não sei como saber se o loop só vai verificar a coluna A. O intervalo deveria ser (A1: A31)? Então, como eu digo para pular na mesma linha para a coluna D para verificar esse valor?

Eu realmente aprecio a ajuda de qualquer pessoa com antecedência. Espero ser de alguma ajuda nesta comunidade, respondendo a outras perguntas onde quer que eu possa também!

Obrigado novamente

    
por Dru Darby 30.08.2013 / 19:28

1 resposta

1

Eu não tive a chance de testar isso, mas deve funcionar, tudo o que você precisa fazer é adicionar sua própria pasta de trabalho & nome da folha.

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

Dependendo do tamanho da sua pasta de trabalho, acho que vale a pena desabilitar a atualização da tela, mas não é uma necessidade também usar VbNullString é melhor que "" pois isso não ocupa memória.

Espero que ajude,

Tom

    
por 16.10.2013 / 13:14