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)
- Ошибка времени выполнения '424': требуется объект
- Ошибка времени выполнения '91': переменная объекта или переменная блока не установлены
- Ошибка времени выполнения '51': внутренняя ошибка
- Ошибка времени выполнения '424': требуется объект
- Ошибка времени выполнения '424': требуется объект 'Возможно, это был' 51 '
- Ошибка времени выполнения '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" нет процедуры "Выполнить".
xlWB.Application.Run "SearchFirma" <- Это может быть неправильно, потому что у объекта рабочей панели нет свойства "Приложение"
Excel.Application.ActiveWorkbook.Application.Run "SearchFirma" <- Возможно, это неправильно, поскольку у объекта "Рабочая книга" нет свойства "Приложение".
Excel.Workbooks ("Database_Rechnungen.xlsm"). Application.Run "SearchFirma" <- это может быть неправильно, поскольку объект "Workbbok" не имеет свойства Application.
Set xlWB = GetObject ("Database_Rechnungen.xlsm") <- это неправильно, но я не знаю почему.
Установите xlWB = oxl.Workbooks("Database_Rechnungen.xlsm") <- это неправильно.
Установите 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