Есть ли способ автоматического запуска макроса при открытии файлов Excel с похожими именами файлов?

Я бы предположил, что примеры в форме похожи на EXEC DBMS_WM.GOTOWORKSPACE (& lt;>); and not between a conditional IF ... END IF; `

EXEC не является PLSQL зарезервированное слово. Это макрос / ярлык на клиенте, а не сервер базы данных, который расширяется, чтобы обернуть оператор, предшествующий ему в блок BEGIN ... END;.

Он очень широко используется в командной строке (SQLPlus и SQLcl) и редакторы, такие как Toad и SQLDeveloper et al. часто поддерживают его, но он поддерживается только как монолитная команда (EXEC как прелюдия к блоку), а не внутри блока (Nested EXEC не поддерживается, а также EXEC внутри другого BEGIN...END; блок).

Поскольку это не зарезервированное слово, его расширение, когда оно находится в другом блоке, является проблемой. Разбор его становится неоднозначным - можно определить собственную функцию под названием EXEC, и было бы вполне корректно работать в блоке PLSQL. Затем редактору нужно было бы сделать неуверенный вызов о том, что делать, когда он сталкивается с этим словом. Приведенный ниже пример будет разорван, если EXEC будет расширен вместо того, чтобы быть распознанным как процедура в блоке PLSQL:

CREATE PROCEDURE EXEC(PARAM_1 IN VARCHAR2)
IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE(UTL_LMS.FORMAT_MESSAGE('Param is:[%s]',PARAM_1));
  END EXEC;
/

BEGIN
  EXEC('VOLTRON');
END;
/

Итак, второй пример верен (предполагается, что он размещен в другом блоке BEGIN...END; ), и является универсальной совместимостью, поскольку его не нужно перехватывать и модифицировать на стороне клиента.

1
задан PGCodeRider 20 January 2019 в 03:09
поделиться

1 ответ

Ваш код не похож на то, что вы описываете. Приведенный ниже код должен отображать «Тест» MsgBox при открытии рабочих книг, соответствующих правилу запуска с «Текущий утвержденный»

'This Macro will run whenever an Excel Workbooks is opened
Private Sub MonitorApp_WorkbookOpen(ByVal Wb As Workbook)
    Dim cText As String
    cText = "Current Approved"

    If UCase(Left(Wb.Name, Len(cText))) = UCase(cText) Then
           ' Wb2.Activate
            MsgBox "Test"
    End If

End Sub
0
ответ дан PGCodeRider 20 January 2019 в 03:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: