Mac Office 2011 VBA Word ссылается на уже открытую книгу Excel

Я действительно нуждаюсь в помощи. Я искал решение почти месяц (не постоянно), но не смог найти способ заставить его работать.

Прежде всего, это код, который я должен открыть Workbook, который прекрасно работает:

Private Sub OpenExcelDatabase()

    Dim oxl As Object
    Set oxl = CreateObject("Excel.Application")

    Dim xlPath As String
    xlPath = "OSX:Users:" & GetUserName.GetUserName & ":Documents:Rechnungen:"

    Dim xlFile As String
    xlFile = "Database_Rechnungen.xlsm"

    oxl.Workbooks.Open (xlPath & xlFile)
    Application.ActiveWindow = ActiveDocument

    Dim xlWB As Object
    Set xlWB = oxl.Workbooks.Open(xlPath & xlFile)

    xlWB.Application.Run "connectSQL"

End Sub

Теперь мне нужно получить некоторые данные из этой рабочей книги для двух разных пользовательских форм, которые находятся в новом текстовом документе. В VBA-меню я уже активировал Object-Library for Excel, но проблема в том, что, хотя он, кажется, знает функции (он показывает все опции, которые мне нужны), он не может их запустить. Дело в том, что мне нужно запустить макрос, который находится в рабочей книге, как только нажата командная кнопка из пользовательской формы в Word.

Может быть, чтобы уточнить вещи:

У меня есть слово-шаблон, который используется для написания счетов. Есть 2 (важные) пользовательские формы - SearchCompany и SearchPerson. В этих двух пользовательских формах пользователь может ввести строку, и эта строка должна быть найдена в ячейках базы данных excel. Если эта строка существует в одной из найденных ячеек, она должна вернуть всю информацию этой компании обратно в пользовательскую форму. То же самое с человеком. В моей рабочей тетради есть лист с компаниями и один лист с людьми, которые работают в компаниях.

Вот коды, которые я уже пытался сослаться на открытую книгу или запустить макрос в этой книге:

1. xlWB.Application.Run "SearchFirma"

2. Excel.Application.ActiveWorkbook.Application.Run "SearchFirma"

3. Excel.Workbooks("Database_Rechnungen.xlsm").Application.Run "SearchFirma"

4. Set xlWB = GetObject("Database_Rechnungen.xlsm")

5. Set xlWB = oxl.Workbooks("Database_Rechnungen.xlsm")

6. Set xlWB = Excel.Workbooks(1)
  1. Ошибка времени выполнения '424': требуется объект
  2. Ошибка времени выполнения '91': переменная объекта или переменная блока не установлены
  3. Ошибка времени выполнения '51': внутренняя ошибка
  4. Ошибка времени выполнения '424': требуется объект
  5. Ошибка времени выполнения '424': требуется объект 'Возможно, это был' 51 '
  6. Ошибка времени выполнения '424': требуется объект 'Возможно, это был' 51 '

Если бы я снова использовал workbooks.Open-Method, я получаю сообщение об ошибке, что эта книга уже открыта... Проблема состоит в том, что для получения информации обратно в слово мне также нужно сослаться на открытую, но не именованное или сохраненное слово-документ ("document1").

Что бы я ни пытался, ничего не получалось. Я искал решение в половине google, но ни у кого никогда не было такой проблемы... Как только большинство людей активировали объектные библиотеки, все работало. Почему это не работает со мной? Что-нибудь еще, что я должен проверить? (Библиотека объектов существует) Функция getObject не работает на Mac, но, возможно, кто-то знает обходной путь? Я был бы невероятно благодарен за каждого, кто пытается помочь мне с этим, поскольку я начинаю действительно отчаянно пытаться найти решение этой проблемы.

3 ответа

Решение

Я нашел способ сделать это:

Private Sub Document_New()
    xlPath = "OSX:Users:" & GetUserName.GetUserName & ":Documents:Rechnungen:"
    xlFile = "Database_Rechnungen.xlsm"

    Call OpenExcFileWithApp(xlPath, xlFile, "connectSQL")
    UFFirmaSearch.Show

End Sub

И это функция:

Public oxl As Object
Public xlWB As Object

Public xlPath As String
Public xlFile As String

Public FSearchText As String
Public FResult As ListBox

Function OpenExcFileWithApp(Path As String, File As String, RunMacro As String)

    Dim FileFullName As String
    FileFullName = Path & File

    Set oxl = CreateObject("Excel.Application")
    Set xlWB = oxl.Workbooks.Open(FileFullName)

    If RunMacro <> "" Then
        xlWB.Application.Run RunMacro
    End If
End Function

При этом каждый раз, когда я использую xlWB в своих словесных модулях, это относится к открытой Рабочей книге.:)

Спасибо Кироширо, как вы натолкнули меня на мысль:)

Добавьте ссылку на "Объектную библиотеку Microsoft Excel 14.0" в Word VBA-редакторе. Это даст вам доступ к объектной модели Excel.

Тогда вы можете сослаться на приложение и рабочие книги следующим образом:

Sub test()

    Dim ex  As New Excel.Application
    Dim wb  As Workbook

    Set wb = ex.Workbooks.Open("C:\TestVAs\TestBook.xlsx")

End Sub

Затем вы можете вызвать свой макрос из приложения Excel.

ex.Run "YourWorkbookNameAndPath!YourMacroToCall"

У объекта "workbbok" нет процедуры "Выполнить".

  1. xlWB.Application.Run "SearchFirma" <- Это может быть неправильно, потому что у объекта рабочей панели нет свойства "Приложение"

  2. Excel.Application.ActiveWorkbook.Application.Run "SearchFirma" <- Возможно, это неправильно, поскольку у объекта "Рабочая книга" нет свойства "Приложение".

  3. Excel.Workbooks ("Database_Rechnungen.xlsm"). Application.Run "SearchFirma" <- это может быть неправильно, поскольку объект "Workbbok" не имеет свойства Application.

  4. Set xlWB = GetObject ("Database_Rechnungen.xlsm") <- это неправильно, но я не знаю почему.

  5. Установите xlWB = oxl.Workbooks("Database_Rechnungen.xlsm") <- это неправильно.

  6. Установите xlWB = Excel.Workbooks(1)

Ваш звонок должен выглядеть так:

Sub Test()
    Dim Ex as New Excel.Application
    Dim WB as Workbbok
    Dim Sh as Worksheet
    Dim Data as variant

    ' to a open workbook and read, write or delete data.
    ' Now you could manipulate the data with the "WB" variable.
    Set WB = Ex.Workbboks.Open("YourWorkbbokPathAndName")
    Set Sh = WB.Sheets("YourSheetName")
    ' recieve the data
    Data = Sh.cells.value

    ' do your stuff with Data

    ' write back data
    Sh.cells.value = data

    ' run a macro inside a workbbok
    ' This is the Application object. NOT a Workbook!
    Ex.Run "YourWorkbookPathAndName!YourMacroToCall"
End Sub
Другие вопросы по тегам