A macro não é executada ao abrir um arquivo / pasta de trabalho no Excel

1

Sou novo em Macros e VBA em geral, mas meu objetivo é bem simples, acredito. Minha macro deve procurar um documento do Excel aberto (automaticamente) e criar um MessageBox com um aviso se o a função é usada com apenas um parâmetro (a data).
Por isso, criei meu editor Macro no Excel 2016 / Visual Basic e salvei-o como .xlam (um suplemento do Excel).
Então eu copiei o arquivo para C:\Users\User\AppData\Roaming\Microsoft\AddIns porque é onde os Add-Ins estão localizados, eu acho. Certifiquei-me de que esse local é confiável nas configurações da Central de Confiabilidade do Excel. Eu ativei todas as macros nas configurações.

Então minha macro parece com isso:
Objetos do Excel - ThisWorkBook:

Private Sub Workbook_Open()
  Application.OnTime Now + TimeValue("00:00:02"), "Start"
  MsgBox ("Hello World!")
End Sub

Estou usando o evento Workbook_Open () para iniciar minha macro.
Então meu módulo chamado kwTester que testa o documento:

Private Sub Start()
'Sheet is the current sheet
Dim Sheet As Worksheet
'my Regex
Dim regEx As New RegExp
'the search pattern
Dim strPattern As String: strPattern = "^\=WEEKNUM\(\w\d+\)$"
'is used to tell my if there is just one parameter
Dim verwendetKalenderwoche As Boolean
verwendetKalenderwoche = False
'CellAddress and CellFormula are just for debugging purposes
Dim CellAddress As Variant
Dim CellFormula As Variant
'Setting up the RegEx
If strPattern <> "" Then
    With regEx
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = strPattern
    End With
End If
'Code should be repeated for every opened Workbook and Sheet
'Dim book As Workbook
For Each book In Workbooks
For Each Sheet In book.Worksheets
    With Sheet.UsedRange
        For Each cell In Sheet.UsedRange
            On Error Resume Next
            CellFormula = cell.Formula
            On Error Resume Next
            If cell.Formula <> "" And regEx.Test(cell.Formula) Then
                verwendetKalenderwoche = True
                CellAddress = CellAddress & vbNewLine & Cells(cell.Row, cell.Column).Address(RowAbsolute:=False, ColumnAbsolute:=False)
            End If
        Next
    End With
Next
Next
'if there is a WEEKNUM function with just one parameter then display msgBox and UserForm
If verwendetKalenderwoche = True Then
    MsgBox "Sie verwenden die Funktion KALENDERWOCHE mit nur einem Parameter. Ab Office 2007 wird hier die amerikanische Rechenweise zur Bestimmung der Kalenderwoche verwendet." & vbNewLine & "Diese ist nicht mit der geltenden ISO-Regelung in Deutschland kompatibel." & vbNewLine & "Biite verwenden Sie wenn möglich den zusätzlichen Parameter <21> um diesen Fehler zu beheben." & vbNewLine & "Beispiel:" & vbNewLine & "KALENDERWOCHE(A2;21)", vbExclamation, "KALENDERWOCHE-Warnung"
    'UserForm anzeigen um die betroffenen Zellen darzustellen
    UserForm1.TextBox1.MultiLine = True
    UserForm1.TextBox1.Text = CellAddress
    UserForm1.Caption = "Betroffene Zellen"
    UserForm1.TextBox1.ScrollBars = fmScrollBarsVertical
    UserForm1.Show vbModeless
End If
End Sub

O UserForm não deve ser tão importante, então eu não o incluirei, ele apenas exibe as células que contêm a função WEEKNUM.

Se eu abrir um documento do Excel que usa a função WEEKNUM, tudo está funcionando corretamente - Meu MessageBox é exibido, recebo meu UserForm e isso informa quais células estão usando a função WEEKNUM. Exatamente como eu quero que seja, então eu acho que meu código funciona de alguma forma. :)

Eu usei os seguintes sites para escrever o código:
Executar automaticamente macros do Excel ao abrir Excel
Execute uma macro

Descrição do meu problema

O Excel está fechado - eu abro um arquivo clicando duas vezes nele - minha macro é executada com sucesso e exibe meus resultados. Mas se minimizar esta instância do Excel e abrir outro arquivo, minha macro não está sendo executada novamente. A mesma coisa se eu abrir um documento de dentro do Excel via diálogo Arquivo Aberto.
O que está errado?
É assim que o Workbook_Open Event deve funcionar ou estou perdendo alguma coisa?
Meu suplemento está localizado no local correto? Tenho que verificar algumas outras configurações?

Espero que minha pergunta não seja considerada fora do assunto. Eu não sabia onde perguntar - Stackoverflow ou Superusuário. Notifique-me se eu devo excluir esta pergunta:)

Qualquer entrada é muito bem vinda.

    
por benjamin 20.01.2016 / 14:53

2 respostas

2

Você está tentando trabalhar com os eventos Workbook , que são locais para o objeto ao qual pertencem (neste caso, o suplemento). O que você precisa é de um evento Application . Chip Pearson tem uma página explicando o conceito.

Para resumir, coloque esse código dentro do objeto ThisWorkbook do seu suplemento.

Option Explicit
Private WithEvents App As Application

Private Sub Workbook_Open()
     Set App = Application
 End Sub

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    MsgBox "Hello world"
End Sub
    
por 20.01.2016 / 20:59
0

Corrigi este problema no meu Excel. A macro não funcionará em aberto se qualquer folha nas pastas de trabalho foi salva na visualização de quebra de página! Assim que eu mudei de volta para a visualização normal, tudo começou a funcionar novamente. Boa sorte!

    
por 01.02.2017 / 20:22