Compartilhar via

Onde está o erro no meu código VBA?

Anônima
2012-08-29T18:38:20+00:00

Tenho o seguinte código em VBA:

Private Sub ContabilizaStatus()

 Dim FinalRow, A, B, C, D As Long

 Dim i As Integer

  A = 0

  B = 0

  C = 0

  D = 0

 With wsDados

  FinalRow = Cells(Rows.Count, 7).End(xlUp).Row

   For i = 2 To FinalRow

    Select Case Cells(i, 7).Value

     Case "Condição 01"

      A = A + 1

     Case "Condição 02"

      B = B + 1

     Case "Condição 03"

      C = C + 1

     Case "Condição 04"

      D = D + 1

    End Select

   Next i

  End With

    With wsBase

      .Cells(13, 9).Value = A

      .Cells(14, 9).Value = B

      .Cells(15, 9).Value = C

      .Cells(16, 9).Value = D

    End With

End Sub

Mas só consigo fazer com que ele entre no "case" quando cadastro uma nova linha na tabela.

Alguém pode me ajudar?

Abç

Microsoft 365 e Office | Excel | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Anônima
2012-08-29T21:43:03+00:00

Tente utilizar o código abaixo:

Private Sub ContabilizaStatus()

Dim FinalRow As Long

Dim A As Long

Dim B As Long

Dim C As Long

Dim D As Long

Dim wsDados As Worksheet

Dim wsBase As Worksheet

Dim i As Integer

A = 0

B = 0

C = 0

D = 0

With wsDados

FinalRow = Cells(Rows.Count, 7).End(xlUp).Row

For i = 2 To FinalRow

Select Case .Cells(i, 7)

Case "Condição 01"

A = A + 1

Case "Condição 02"

B = B + 1

Case "Condição 03"

C = C + 1

Case "Condição 04"

D = D + 1

End Select

Next i

End With

With wsBase

.Cells(13, 9) = A

.Cells(14, 9) = B

.Cells(15, 9) = C

.Cells(16, 9) = D

End With

End Sub


Dica:

Dim FinalRow, A, B, C, D As Long

não declara as variáveis A, B, C e D como Long, mas apenas FinalRow. Nesse caso, A, B, C e D foram declaradas como Variant. Se quiser declarar todas como Long, use:

Dim FinalRow As Long, A As Long, B As Long, C As Long, D As Long

ou:

Dim FinalRow As Long

Dim A As Long

Dim B As Long

Dim C As Long

Dim D As Long

Dica:

Use a palavra chave Option Explicit em seu código: http://www.ambienteoffice.com.br/officevba/declaracao_de_variavel/

Dica:

With wsDados

FinalRow = Cells(Rows.Count, 7).End(xlUp).Row

o correto é você qualificar todo objeto pertencente à wsDados, inclusive o objeto Cells e Rows:

With wsDados

FinalRow = .Cells(.Rows.Count, 7).End(xlUp).Row

Aqui também:

Select Case Cells(i, 7).Value

trocar por:

Select Case .Cells(i, 7).Value

Dica:

.Cells(13, 9).Value = A

é o mesmo que

.Cells(13, 9) = A

Esta resposta foi útil?

0 comentários Sem comentários

1 resposta adicional

Classificar por: Mais útil
  1. Anônima
    2012-08-29T19:05:57+00:00

    vba eh aki http://social.msdn.microsoft.com/Forums/pt-br/vbapt/threads mas tem gente q pode te ajudar aki, mas o fórum certo eh o do link. posta lah q tem gente especialista lah. vlw!

    Esta resposta foi útil?

    0 comentários Sem comentários