Não consigo abrir p...
 
Notifications
Clear all

Não consigo abrir planilha em Excel 2010 por causa do código escrito em Office 365

3 Posts
3 Usuários
0 Likes
1,181 Visualizações
(@evilmaax)
Posts: 82
Trusted Member
Topic starter
 

Olá amigos

Estou com o seguinte problema: Desenvolvi no meu Office 365 um código que funciona corretamente no Excel do cliente (versão Office 2010), porém devido suas necessidades de segurança, coloquei algumas linhas a mais para e desbloquear a planilha, executar o código e então voltar a bloquear a planilha. Isso a cada execução, linha selecionada, etc.

O problema é que, após essa alteração a planilha não abre mais na máquina dele. Já reenviei sem as linhas de bloqueio/deslboqueio e funcionou certinho, ou seja, o problema é com essas linhas. 

São 2 macros: Uma para realçar a linha selecionada sem perder a formatação após alterar a célula/linha e outra para permitir que o cliente insira 20, por exemplo, e o Excel complete com o mês e ano correntes. As 2, portanto, estão na mesma plan do Visual Basic.

Segue meu código

Private Sub realceSelecao(ByVal Target As Excel.Range)
ActiveSheet.Unprotect Password:=""
ActiveWorkbook.Unprotect Password:="
"
h = ActiveCell.Height
w = Range("a2:i2").Width
t = ActiveCell.Top
On Error Resume Next
ActiveSheet.Shapes("RectangleV").Delete
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
'Ajuste dos shapes retangulos
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, t, w, h).Name = "RectangleV"
With ActiveSheet.Shapes("RectangleV")
.Fill.Visible = msoFalse
.Fill.Transparency = 20#
.Line.Weight = 2#
.Line.ForeColor.SchemeColor = 10
.PrintObject = False

End With
ActiveSheet.Protect Password:=""
ActiveWorkbook.Protect Password:="
"

End Sub

Private Sub data(ByVal Target As Range)

ActiveSheet.Unprotect Password:=""
ActiveWorkbook.Unprotect Password:="
"

Dim intervalo As Range
Dim dia As Date
Set intervalo = Range("C10:D10000")

Application.EnableEvents = False

If Not Application.Intersect(intervalo, Range(Target.Address)) Is Nothing Then

If Not IsEmpty(Target.Value) Then
Range(Target.Address).NumberFormat = "General"

If Len(Target.Value) <= 2 Then

dia = Target.Value & "/" & Month(Now) & "/" & Year(Now)
Range(Target.Address).Value = dia

End If

Range(Target.Address).NumberFormat = "dd/mm/yyyy"
End If

End If

Application.EnableEvents = True

ActiveSheet.Protect Password:=""
ActiveWorkbook.Protect Password:="
"

End Sub



Este tópico foi modificado 4 anos atrás by evilmaax
 
Postado : 13/08/2020 4:03 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Qual o erro??????

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 15/08/2020 9:30 pm
EdsonBR
(@edsonbr)
Posts: 1056
Noble Member
 

Boa noite, @evilmaax

Não há nada na macro que seja exclusiva da versão 365, portanto deve-se investigar outros pontos.

 

Sempre que possível, evite desabilitar a armadilha de erro em seu código. E se o fizer, lembre-se sempre de rearmá-la imediatamente após a instrução que o código precisou fazer "vistas grossas" para o erro. E no seu projeto, na Sub realceSelecao, vc desabilita duas vezes em seguida (?) e não reabilita mais.

Não dá pra afirmar que o problema está nisso, pois teria que analisar seu arquivo pra saber mais. Mas o trecho:

 ...
On Error Resume Next
ActiveSheet.Shapes("RectangleV").Delete
On Error Resume Next
ActiveSheet.Shapes("RectangleH").Delete
'Ajuste dos shapes retangulos
...

Poderia ser substituído por:

 ...
On Error Resume Next
ActiveSheet.Shapes("RectangleV").Delete
ActiveSheet.Shapes("RectangleH").Delete
On Error GoTo 0
'Ajuste dos shapes retangulos
...

Tem outros pontos que poderiam ser revistos, mas fariam apenas diferença na performance do que no funcionamento em si.

Também nessa rotina, qual a utilidade de Target como parâmetro se ele não é consumido?

Pq a necessidade de desproteger e voltar a proteger não só a planilha, mas também o Workbook a cada vez? (veja também no help do método Protect o uso do argumento UserInterfaceOnly)

Pq deletar a RectangleV e recriar em seguida?

Range(Target.Address) é o mesmo que simplesmente Target

 

 
Postado : 15/08/2020 11:36 pm