Страница: 1 |
Вопрос: Пользовательская функция : возврат результата | Добавлено: 19.10.06 20:30 |
Автор вопроса: ![]() |
Добрый день.
Столкнулся с проблемой: Пользовательская функция в EXEL при отладке в редакторе VBA выполняется корректно , однако при вызове ее из ячейки таблицы возвращает #знач! . Параметры передаются по значению, а не по ссылке , тип функции - Variant Назначение функции - создать файл запроса к приложению XXX, и получить текстовый файл с ответом от этого приложения. Прошу помощи. Текст функции прилагаю. Public Function AskFwp(ByVal strPath As String, ByVal FwpCmnd As String) As Variant Dim strFlnm, strFnS, strFnI, strFnO As String Dim strwin As String Dim strdos As String Dim flNumber As Integer Dim strbuff As String Dim strOut As Variant Dim fs, f, ts As TextStream strFnS = "evalstr.snd" strFnI = "evalstr.in" strFnO = "evalstr.out" строка для записи в файл запроса strwin = "LITO" + Chr(250) + Chr(250) + Chr(250) + "E " + FwpCmnd 'проверка - нет ли старого запроса Set fs = CreateObject("Scripting.FileSystemObject") strFlnm = strPath + strFnO If fs.FileExists(strFlnm) Then Set f = fs.GetFile(strFlnm) f.Delete End If ' Создать файл с новым запросом: strFlnm = strPath + strFnS fs.CreateTextFile (strFlnm) Set f = fs.GetFile(strFlnm) Set ts = f.OpenAsTextStream(ForWriting) ts.Write (strwin) ts.Close ' Переименовать в нужное расширение .in f.Name = strFnI ' принять ответ с другим расширением . out strFlnm = strPath + strFnO Set f = fs.GetFile(strFlnm) Set ts = f.OpenAsTextStream(ForReading) strdos = ts.ReadLine ' MsgBox strdos ts.Close Set f = fs.GetFile(strFlnm) Debug.Print f f.Delete 'преобразовать в цифру strbuff = Trim(strdos) strOut = Val(strbuff) ' вернуть результат расчета. AskFwp = strOut Debug.Print strOut End Function |
Ответы | Всего ответов: 1 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 185 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 19.10.06 21:23 |
В одной из статей о пользовательских функциях Excel (уже не помню где) я прочел, что для того, чтобы пользовательскую функцию можно было использовать в листе книги, она не только должна возвращать результат присвоением его имени этой функции, но должны соблюдаться еще несколько условий, одно из которых, как я помню, было обозначено, как "неизменность рабочей среды Excel". Думаю, что именно это условие нарушает Ваша функция - создается файл для записи и происходит запись.
Мне кажется, если Вам очень нужно выполнить именно то, что задумали, и именно так, то лучше привязать эту функцию к какому-нибудь событию, чем вставлять пользовательскую функцию с подобными действиями в ячейки. Только представьте, что Excel был бы вынужден делать, если бы эта функция была введена в пару сотен ячеек на листе при каждом пересчете листа (попытку пересчитать лист Excel предпринимает всякий раз, как только происходит изменение какой-либо ячейки, влияющей на значение хотябы одной другой ячейки в книге). |
Страница: 1 |
|