Excel удаляет вложения при попытке динамически создать новый модуль - PullRequest
2 голосов
/ 14 февраля 2012

У меня есть этот маленький модуль VBA, который я вызываю из одной рабочей книги, чтобы обновить все рабочие книги Excel в данной папке. Под обновлением я имею в виду, что он копирует модуль с именем GetActiveXControlValues, а затем запускает этот макрос для каждой книги в этой папке. Теперь, когда я запускаю это на моей машине, все работает нормально. Когда мой коллега запускает этот же код с теми же файлами, они получают сюрприз после копирования модуля. Когда вы посмотрите на книгу, в которой должен быть новый модуль с именем «GetActiveXControlValues», вместо этого нет модуля с таким именем, вместо этого он называется «Module1». Кроме того, когда вы заглядываете внутрь нового модуля, он говорит: «Приложение было удалено» красным цветом. Я проверил, и у моего коллеги те же параметры безопасности в Excel 2010, что и у меня.

Я включил все макросы и доверенную объектную модель проекта VBA. У меня есть запрос на включение всех элементов управления ActiveX. У меня снят флажок «Отключить доверенные документы» и все поля на вкладке «Защищенный просмотр». Кто-нибудь видел это раньше или есть идея, что я могу попытаться устранить неисправность?

Пример кода:

Sub CopyModuleAndExecuteIt()
    Dim wb As Workbook
    Dim sFile As String
    Dim sPath As String
    Dim sFullMacroName As String

    SetFolder

    sPath = sExcelFolder
    ChDir sPath
    sFile = Dir("*.xls") ' File Naming Convention

    Do While sFile <> "" ' Start of LOOP

        ' Open each Excel File in the specified folder
        Set wb = Workbooks.Open(sPath & "\" & sFile) ' SET BP HERE!
        Sleep (1000)

        ' Unprotect the Documents using SendKeys Hack
        UnprotectVBADocument

        ' Import the GetActiveXControlValues Module into the Workbook
        wb.VBProject.VBComponents.Import ("D:\GetActiveXControlValues.bas") ' SET BP HERE!

        sFullMacroName = "'" & wb.Name & "'" & "!" & wb.VBProject.VBComponents.Item("GetActiveXControlValues").Name & ".GetActiveXControlValues"

        ' Run the GetActiveXControlValues Macro
        Application.Run (sFullMacroName)

        ' Close the Workbook Saving Changes
        wb.Close True
        sFile = Dir
    Loop ' End of LOOP
End Sub

Ответы [ 2 ]

0 голосов
/ 05 марта 2015

Я работал над созданием AddIn корыта VBA , я записал код на листе Excel, когда сохранял его, я сохранил как текст:

Attribute VB_Name = "Module_Name"

И вы должны быть уверены, что ваш .bas файл на самом деле представляет собой простой текст.

Я работал над созданием AddIn с VBA кодом. Я записал код в лист Excel, когда сохранял его, я сохранил текст следующим образом:

Sub Superheroes()

Dim sBeg as string, sEnd as String, sCatwoman as String, sAntMan as String
Dim vCode As Variant

'' Here is where i put the name i want to call my module
sBeg = "Attribute VB_Name = ""VBA_BasFile""" + vbCrLf + _
        "Private Function fMix(sAnimal as String)as String "

sCatwoman = "Select case sAnimal"+ vbCrLf+ vbTab+"case ""cat"""+ _
            vbCrLf+ vbTab+ "fMix = ""Catwoman"""

sAntMan = vbCrLf+ vbTab+"case ""Ant"""+ vbCrLf+ vbTab+ "fMix = ""AntMan"""+ _
          vbCrLf+ "End Select"

sEnd = vbCrLf+ "End Sub"

vCode = Array(sBeg, sCatwoman, sAntMan, sEnd)

Workbooks.add

Range("A1").Resize(UBound(vCode) + 1, 1) = Application.Transpose(vCode)

With ActiveWorkbook
    .SaveAs path + "VBA_BasFile.bas", xlTextPrinter
    .Close False
End With

End Sub

С этим я могу Вызвать любую процедуру или функцию в VBA_BasFile при импорте в другую книгу Excel.

0 голосов
/ 22 февраля 2012

Если у вашего коллеги те же параметры безопасности в Excel 2010, что и у вас, тогда мне на ум приходит следующий «Брандмауэр». Проверьте его настройки брандмауэра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...