Ошибка VBA 1004 - вызов функции из VB.Net (Visual Studio) - PullRequest
0 голосов
/ 14 сентября 2018

Я вызываю макрос в файле Excel из VB.Net.Каждый раз, когда я это называю, я получаю сообщение об ошибке 1004 в следующей строке кода

Application.Run "ATPVBAEN.XLAM!Fourier", Sheets("Sheet2").Range("$Q$5:$Q$260"), _
        Sheets("Sheet2").Range("$R$1:$R$256"), True, False

. При запуске кода прямо из Excel он работает отлично.Но когда он запускается из Visual Studio, возникает ошибка.

У меня это работает от нажатия кнопки и изменения ячейки в Excel, и оба эти метода не работают из Visual Studio.Кто-нибудь знает, почему эта ошибка происходит.

1 Ответ

0 голосов
/ 15 сентября 2018

Эта проблема описана в статье Надстройки не загружаются при использовании команды CreateObject в Excel ( ссылка на веб-архив в случае, если основная ссылка умирает ).

Следующее демонстрирует методологию, изложенную в ссылочной статье. Пример включает использование пустых Catch блоков . Преодолейте этот пример, просто чтобы продемонстрировать один из способов загрузки надстройки Workbook, а не трактат о том, как следовать чьей-то идеологии программирования.

Sub DemoExcelAddinLoading()
    Dim app As New Excel.Application
    ' you must have an open Workbook before trying to open the 
    ' addin.  if no Workbook is open, opening the addin will fail

    Dim wb As Excel.Workbook = app.Workbooks.Open("path to your workbook")

    ' a big annoyance is that the addin seems to be loaded
    ' and installed if the current user-interactive Excel has it as such.
    ' this is useful to retrieve the addin file path though
    Dim toolPakAddin As Excel.AddIn = Nothing
    Try
        ' will throw if "Analysis ToolPak" not installed
        toolPakAddin = app.AddIns("Analysis ToolPak")
    Catch ex As Exception
    End Try

    Dim wbToolPak As Excel.Workbook = Nothing
    If toolPakAddin IsNot Nothing Then
        Try
            wbToolPak = app.Workbooks.Open(toolPakAddin.FullName)
        Catch ex As Exception
        End Try
    End If

    If wbToolPak IsNot Nothing Then
        ' register the addin
        Dim res As Boolean = app.RegisterXLL(toolPakAddin.Name)
        ' AutoRun macros are disabled under automation, so
        ' allow the addin to initialize
        wbToolPak.RunAutoMacros(Excel.XlRunAutoMacro.xlAutoOpen)
    End If

    Dim rngIn As Excel.Range
    Dim rngOut As Excel.Range
    Dim ws As Excel._Worksheet = CType(wb.Worksheets("Sheet2"), Excel._Worksheet)

    rngOut = ws.Range("$c$1:$c$8")
    rngOut.Clear()
    rngIn = ws.Range("$a$1:$a$8")
    Dim wbName As String = wb.Name

    app.Visible = True
    Try
        app.Run("ATPVBAEN.XLAM!Fourier", rngIn, rngOut, True, False)
    Catch ex As Exception
    End Try

    ' Note: do not attempt to close wbToolPak 
    wb.Saved = True
    wb.Close()
    app.Quit()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...