Notifications
Clear all

Type Mismatch em Me.Range().Value

3 Posts
2 Usuários
0 Reactions
966 Visualizações
(@mathiasime)
Posts: 10
Active Member
Topic starter
 

Pessoal, criei uma sub para que seja atualizada toda vez que alterar qualquer valor de célula no intervalo a1:v43. Essa é a primeira vez que uso Me.Range e estou tendo o "Run-time error 13: Type mismatch" na linha "If Me.Range("a1:v43").Value <> X Then" antes mesmo de entrar nos cálculos da sub.

Public X As String
Private Sub worksheet_change(ByVal target As Range)

Dim t As Single
t = Timer

With Application
    .Calculation = xlManual
    .MaxChange = 0.001
    .ScreenUpdating = False
End With

If Me.Range("a1:v43").Value <> X Then

Call copia
Application.Run "copia"
Call interp_voltx
Application.Run "interp_voltx"
Call apaga
Application.Run "apaga"

X = Me.Range("a1:v43").Value
End If

With Application
    .Calculation = xlAutomatic
    .MaxChange = 0.001
    .ScreenUpdating = True
End With

MsgBox Timer - t

End Sub

O que pode estar acontecendo?

Muito obrigado!

 
Postado : 15/10/2015 3:05 pm
(@lipetom)
Posts: 24
Eminent Member
 

Ola,

Me.Range("a1:v43") se trata de um objeto que contem todas as celulas desse range,
para percorrer todo o range utilize

Public X As String
Private Sub worksheet_change(ByVal target As Range)
Dim Rng As Range
Dim t As Single
t = Timer

With Application
    .Calculation = xlManual
    .MaxChange = 0.001
    .ScreenUpdating = False
End With

For Each Rng In target

If Rng.Row >= 1 And Rng.Row <= 43 And Rng.Column >= 1 And Rng.Column <= 22 Then
If Rng.Value <> X Then
Call copia
Application.Run "copia"
Call interp_voltx
Application.Run "interp_voltx"
Call apaga
Application.Run "apaga"

X = Rng.Value
End If

With Application
    .Calculation = xlAutomatic
    .MaxChange = 0.001
    .ScreenUpdating = True
End With
Next
MsgBox Timer - t

End Sub

sem a planilha de modelo não sei se funciona pois não sei a função dos procedimentos

 
Postado : 15/10/2015 4:28 pm
(@mathiasime)
Posts: 10
Active Member
Topic starter
 

Ola,

Me.Range("a1:v43") se trata de um objeto que contem todas as celulas desse range,
para percorrer todo o range utilize

Public X As String
Private Sub worksheet_change(ByVal target As Range)
Dim Rng As Range
Dim t As Single
t = Timer

With Application
    .Calculation = xlManual
    .MaxChange = 0.001
    .ScreenUpdating = False
End With

For Each Rng In target

If Rng.Row >= 1 And Rng.Row <= 43 And Rng.Column >= 1 And Rng.Column <= 22 Then
If Rng.Value <> X Then
Call copia
Application.Run "copia"
Call interp_voltx
Application.Run "interp_voltx"
Call apaga
Application.Run "apaga"

X = Rng.Value
End If

With Application
    .Calculation = xlAutomatic
    .MaxChange = 0.001
    .ScreenUpdating = True
End With
Next
MsgBox Timer - t

End Sub

sem a planilha de modelo não sei se funciona pois não sei a função dos procedimentos

Cara, me parece que faltou um end if e o next tá fora de lugar; o que testei foi o seguinte:

For Each Rng In target

If Rng.Row >= 1 And Rng.Row <= 43 And Rng.Column >= 1 And Rng.Column <= 22 Then
If Rng.Value <> X Then
Call copia
Application.Run "copia"
Call interp_voltx
Application.Run "interp_voltx"
Call apaga
Application.Run "apaga"

X = Rng.Value
End If
End If
Next

Com esse contador de tempo, a cada verificacao de mudança de celula, ele executou o pop up, isso é, repetiu MUITAS vezes (não entendi o pq, inclusive). Comentei o temporizador mas retorna "Type Mismatch" na linha "deltax = Cells(3 + j, "N").Value", oq nao ocorre quando eu executo a sub interp_voltx separadamente.

na qual:

Sub interp_voltx()
Dim j, k As Integer, X, deltax As Double
Dim t As Single
t = Timer
For j = 1 To 13 'linhas
    For k = 1 To 6 'iterações
        deltax = Cells(3 + j, "N").Value
        X = cubspline(1, deltax, Range("o24:o32"), Range("p24:p32"))
        Cells(3 + j, "M").Value = X
    Next k
Next j
MsgBox Timer - t
End Sub

Sub copia()
    Range("AL2:AL102").Value = Range("Y2:Y102").Value
End Sub

Sub apaga()
    Range("AL2:AL102").Select
    Selection.ClearContents
End Sub

Saberia dizer o pq retorna isso quando deixo a sub para rodar automaticamente mas nao acontece quando executo ela sozinha?

Muito obrigado

Abs

 
Postado : 16/10/2015 11:41 am