Я создал пользовательскую функцию в Excel с помощью VBA. Я пытаюсь получить данные из другой книги, используя команду Workbooks.Open(path)
. Вот мой код:Excel VBA Не удается получить доступ к листу на внешней рабочей книге
Option Explicit
Function TestFunction() As String
mySub
TestFunction = "Success."
End Function
Sub mySub()
Dim path As String
Dim wk As Workbook
path = "C:\Users\jg\Desktop\machine_data.xlsm"
Set wk = Workbooks.Open(path)
Dim ws As Worksheet
Set ws = wk.Sheets(1)
Debug.Print ws.Range("A2")
End Sub
Sub Test()
Debug.Print (TestFunction())
End Sub
Теперь моя проблема заключается в следующем:
Когда я бегу Sub Test()
в среде VBA из Excel все работает, как и планировалось. machine_data.xlsm
открывается, и поле A2
появляется в отладке.
Как только я перехожу к книге, где я определил этот модуль и введите =TestFunction()
в ячейку, я получаю #VALUE!
. Файл также не открывается.
Если я комментирую эти две строки:
Set ws = wk.Sheets(1)
Debug.Print ws.Range("A2")
клетка покажет Success!
, но файл еще не открыт.
Что я делаю неправильно? Обе книги - .xlsm
файлов. Я использую Microsoft Office Excel 2007.
UDF может только вернуть значение - посмотрите [This] (http://stackoverflow.com/questions/6045826/excel-vba-function-to-turn-activecell-to-bold). – DaveU
@DaveU Я прочитал об этом «да», но не открывает внешнюю книгу и только читает ее и в зависимости от значений чтения, возвращающих другое значение? Потому что кажется, что это даже не возможно. Я не изменяю никаких значений в файле 'machine_data.xlsm'. – Octoshape
@DaveU Nevermind Я выбрал другое обходное решение (см. Мой собственный ответ ниже) – Octoshape