Как добраться, имя файла Excel / соединяют каналом в VBA

1114 Вот что я в итоге сделал. Я сохранил свою файловую структуру точно такой же, но вместо res.send() из маршрута я прикрепил объект, который я бы отправил, к объекту res и затем вызвал next() в конце моего маршрута. Так, например, res.send({message:'blah'}); становится res.return = {message:'blah'}; next();. Я использую .return, потому что я не верю, что такое свойство существует в объекте res по умолчанию, и я нахожу его достаточно описательным для моих целей. Затем в моем postRoute промежуточном программном обеспечении я могу легко получить доступ к res.return, после чего я вызываю return res.send(res.return).

Используя мой пример из вопроса (app.js остается именно таким, каким вы его видите):

/* FILE: /routes/myRoute */

...
router.post('/myRoute', [], (req, res, next) => {
    if(theConditionIsMet()) {
        res.return = { message:'The condition was met.' };
    } else {
        res.return = { message:'The condition was not met.' };
    }
    next();
});
....
router.post('/anotherRoute', [], (req, res, next) => {
    // In this route I don't need to intercept the response, so I just do it like normal.
    return res.send({ message:'Feels good, man.' });
});
...

/* FILE: /middleware/postRoute */

const postRoute = function(req, res, next) {
    if(res.hasOwnProperty('return') {
        return res.send(res.return);
    }
};
module.exports = { postRoute };

Один недостаток, который я уже вижу, состоит в том, что теперь мне придется реструктурируйте все мои маршруты, чтобы использовать этот метод res.send() (или, по крайней мере, все маршруты, для которых я хочу перехватить возвращаемое значение). Из-за этого и из-за того, что я представляю, что кто-то более знающий, чем я, возможно, сможет найти лучший способ сделать это, я не собираюсь принимать свой собственный ответ.

33
задан Community 9 July 2018 в 19:34
поделиться

6 ответов

Если вы имеете в виду VBA, то вы можете использовать FullName, например:

strFileFullName = ThisWorkbook.FullName

(обновлено, как указано в комментариях: ранее использовавшийся ActiveWorkbook.FullName, скорее всего, ошибался, если другие офисные файлы) может быть открытым (ed) и активным. Но в случае, если вы сохранили макрос в другом файле, как указано пользователем @ user7296559 здесь , и действительно хотите имя файла файла, использующего макрос, ActiveWorkbook может быть правильным выбором, если он гарантированно активен во время выполнения.)

43
ответ дан Andreas Dietrich 27 November 2019 в 17:56
поделиться

Это простая альтернатива, которая дает все ответы, полное имя, путь, имя файла.

Dim FilePath, FileOnly, PathOnly As String

FilePath = ThisWorkbook.FullName
FileOnly = ThisWorkbook.Name
PathOnly = Left(FilePath, Len(FilePath) - Len(FileOnly))
18
ответ дан APW 27 November 2019 в 17:56
поделиться
   strScriptFullname = WScript.ScriptFullName 
   strScriptPath = Left(strScriptFullname, InStrRev(strScriptFullname,"\")) 
8
ответ дан Mitch Wheat 27 November 2019 в 17:56
поделиться

Если вам нужен только путь, это самый простой способ:

PathOnly = ThisWorkbook.Path
4
ответ дан lucascaro 27 November 2019 в 17:56
поделиться

ActiveWorkbook.FullName было бы лучше, я думаю, если у вас есть макрос VBA, сохраненный в другой книге Excel, но вы хотите получить сведения о редактируемом Excel, а не о том, где находится макрос.

Если они находятся в одном и том же файле, то это не имеет значения, но если они находятся в разных файлах, и вам нужен файл, в котором находятся Данные, а не Макрос, то ActiveWorkbook - это тот, который пойти, потому что он имеет дело с обоими сценариями.

2
ответ дан Emil 27 November 2019 в 17:56
поделиться

Существует универсальный способ получить это:

Function FileName() As String
    FileName = Mid(Application.Caption, 1, InStrRev(Application.Caption, "-") - 2)
End Function
0
ответ дан Riccardo La Marca 27 November 2019 в 17:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: