Pular para o conteúdo principal

Questão de TI - Desenvolvimento de Sistemas — ASP e VB Script — CESPE / CEBRASPE 2024

TI - Desenvolvimento de SistemasASP e VB Script
Código
ce403795
Banca
CESPE / CEBRASPE
Órgão
FINEP
Ano
2024
Cargo
Ana ( )

Texto 2A4-II

 

Um funcionário de uma instituição financeira mantém o controle dos vencimentos das operações de crédito na sua carteira com uma planilha no Microsoft Excel. A seguir, é mostrada parte da planilha, tal como ela se apresentava em 9/11/2023, com os títulos das colunas e alguns valores de algumas linhas. Cada operação de crédito corresponde a uma linha na planilha.

Imagem associada para resolução da questão

A instituição utiliza uma régua de cobrança, da qual foram extraídas as seguintes informações:

 

• 10 dias antes da data de vencimento: envio do boleto ao cliente (email ou carta);

• data de vencimento: último dia para pagamento pelo cliente;

• 5 dias após o vencimento: no caso de o pagamento não ser informado pelo banco, envio do primeiro email de cobrança;

• 15 dias após o vencimento: no caso de o pagamento não ser informado pelo banco, envio do segundo email de cobrança.

O funcionário a que se refere o texto 2A4-II preparou uma macro pelo VBA para automatizar o envio do primeiro email de cobrança caso haja atraso no pagamento. A macro é executada todo dia e deve percorrer as cem linhas de operações da carteira controlada pelo funcionário. A planilha já está programada para alterar a data da coluna Proxima data vencimento quando o banco informar o pagamento da prestação. Assim, só constam como atrasadas as parcelas realmente não pagas. A macro tem a estrutura a seguir, em que (...) são linhas de comando que são relativas ao envio do email e que foram omitidas.

 

Sub Envio1Email()

Dim i As Integer

For i = 1 To 100

If Then

(...)

Next i

End Sub

 

A partir dessas informações, e considerando que o envio do email deve ser condicionado às regras da régua de cobrança mencionadas no texto 2A4-II, assinale a opção que apresenta o comando que pode substituir corretamente os três quadrados \Box \Box \Box na macro em questão.

  1. AOffset(i,G)=5
  2. BCell(i,7).Value=5
  3. CRange(“G1:G100”)=5
  4. DRange(“Gi”)>=5
  5. EGi=5
Revelar gabarito e comentário

GabaritoB — Cell(i,7).Value=5

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

VBA no Excel: condição para envio de e-mail de cobrança

Gabarito: letra B. A macro deve enviar o primeiro e-mail de cobrança quando a parcela estiver com 5 dias de atraso, e a coluna que controla isso é a coluna G ("Dias de atraso"). O comando correto é Cell(i, 7).Value = 5, que verifica se o valor da célula na linha i, coluna 7 (G), é exatamente igual a 5 — condição que reflete a régua de cobrança: "5 dias após o vencimento: envio do primeiro email de cobrança".

A questão exige que você entenda como o VBA referencia células e como a régua de cobrança se traduz em uma condição lógica. Vamos por partes.

O que a macro precisa fazer: a macro Envio1Email percorre as 100 linhas da planilha (uma por operação de crédito) e, para cada uma, verifica se a condição de envio do primeiro e-mail é satisfeita. A régua de cobrança define que o primeiro e-mail é enviado 5 dias após o vencimento, caso o pagamento não tenha sido informado. A planilha já está programada para atualizar a coluna "Próxima data vencimento" quando o pagamento é informado, então as linhas que permanecem com atraso são exatamente as que precisam de cobrança.

Como o VBA referencia células: no VBA, a forma mais comum de acessar uma célula é Cells(linha, coluna), onde linha é o número da linha e coluna é o número da coluna (A=1, B=2, C=3, ..., G=7). A alternativa B usa Cell(i, 7).Value, que acessa a célula na linha i e coluna 7 (coluna G). A alternativa A usa Offset(i, G), que é uma sintaxe incorreta — Offset é um método que desloca uma célula a partir de outra, e G não é um número de coluna válido. A alternativa C usa Range("G1:G100"), que referencia um intervalo inteiro, não uma célula específica dentro do loop. A alternativa D usa Range("Gi"), que é uma referência inválida (não existe célula "Gi"). A alternativa E usa Gi=5, que não é uma referência de célula válida no VBA.

A condição correta: a régua de cobrança diz que o primeiro e-mail é enviado 5 dias após o vencimento. Portanto, a condição deve verificar se o valor da coluna G (dias de atraso) é igual a 5. A alternativa B faz exatamente isso: Cell(i, 7).Value = 5. As demais alternativas ou usam sintaxe incorreta ou verificam uma condição diferente (como >= 5, que enviaria o e-mail também para atrasos maiores, o que não é o que a régua determina para o primeiro e-mail).

NÃO CAIA NESSA!

A banca tenta confundir o candidato com a sintaxe do VBA. A alternativa D (Range("Gi")) parece plausível, mas "Gi" não é uma referência válida — o correto seria Range("G" & i). Já a alternativa A (Offset(i, G)) usa Offset de forma incorreta, pois Offset exige dois argumentos numéricos (linhas e colunas a deslocar), e G não é um número. A alternativa E (Gi=5) é uma atribuição a uma variável inexistente, não uma referência de célula. A alternativa C (Range("G1:G100")=5) tenta atribuir o valor 5 a um intervalo inteiro, o que não faz sentido no contexto do loop. A única que acessa corretamente a célula da linha atual na coluna G e compara com 5 é a letra B.

Alternativa A — ❌ Incorreta

Offset(i, G)=5 — a sintaxe está errada. Offset é um método que desloca uma célula a partir de outra, e exige dois argumentos numéricos (linhas e colunas). G não é um número de coluna válido; seria necessário usar Offset(0, 6) para deslocar 6 colunas (de A para G), mas mesmo assim a comparação com =5 não faria sentido sem especificar a célula base. O correto seria Cells(i, 7).Value = 5.

Alternativa B — ✅ Correta ⟵ GABARITO

Cell(i, 7).Value = 5 — acessa a célula na linha i, coluna 7 (coluna G), e verifica se o valor é igual a 5. Isso corresponde exatamente à régua de cobrança: "5 dias após o vencimento: envio do primeiro email de cobrança". A sintaxe Cells(linha, coluna) é a forma padrão de referenciar células no VBA, e .Value acessa o conteúdo da célula.

Alternativa C — ❌ Incorreta

Range("G1:G100")=5 — referencia um intervalo inteiro de células (G1 a G100), não uma célula específica dentro do loop. Atribuir =5 a um intervalo não é uma condição válida; seria necessário percorrer cada célula individualmente. Além disso, a macro já está dentro de um loop For i = 1 To 100, então a referência deve ser à célula da linha atual, não ao intervalo todo.

Alternativa D — ❌ Incorreta

Range("Gi")>=5 — a referência "Gi" é inválida. No VBA, para concatenar o valor de uma variável a uma referência de intervalo, usa-se Range("G" & i). Além disso, a condição >= 5 enviaria o e-mail para qualquer atraso maior ou igual a 5 dias, mas a régua determina que o primeiro e-mail é enviado exatamente 5 dias após o vencimento. O correto seria Range("G" & i).Value = 5.

Alternativa E — ❌ Incorreta

Gi=5 — não é uma referência de célula válida no VBA. Isso seria interpretado como uma atribuição a uma variável chamada Gi, que não existe. Para referenciar a célula na linha i e coluna G, seria necessário usar Cells(i, 7) ou Range("G" & i).

Gabarito: letra B — a única alternativa que usa a sintaxe correta do VBA (Cells(linha, coluna)) e a condição exata da régua de cobrança (5 dias de atraso).

Link permanente: /questoes/ce403795