Непрямой обходной путь Excel VBA - PullRequest
0 голосов
/ 06 августа 2020

ОБНОВЛЕНИЕ

см. Исходный вопрос ниже.

Теперь код:

Функция Getvalue (CellRange As String) As Variant

Dim path As String
Dim file As String
Dim sheet As String
Dim str As String 
set rng = Range(Cell Range)

    yr = Format(CStr(Now), "yy")
monthn = Format(CStr(Now), "mmmm")

path = "C:\Folder\Subfolder\"
file = "File-" & monthn & ", FY''" & yr & ".xls"
sheet = "Sheet1"
rng = Range(CellRange)

str = "'" & path & "[" & file & "]" & sheet & "'!" & rng.Address( , ,xlR1C1)

GetValue = Application.ExecuteExcel4Macro (str) Конечная функция


Sub Routine()
Call GetValue("A1")
End Sub

Когда я использую подпрограмму в VBA и go через функцию с F8, с отслеживанием GetValue, значение GetValue возвращает то, что я хочу. Он извлекает данные из закрытой книги. Однако когда я помещаю = GetValue ("A1") в ячейку на моем листе, он возвращает #VALUE!

старый:

У меня есть рабочий лист, который ссылается на данные из одной книги в нескольких столбцах. Моя проблема в том, что книга обновляется и переименовывается каждый месяц (и каждый год). Я мог бы go через и менять ссылку каждый месяц, но я чувствую, что должен быть автоматизированный способ сделать это.

Допустим, имя файла (File-August, FY''20), поэтому каждый месяц / год я бы изменил месяц / год в имени файла.

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

Но в основном мне нужна альтернатива:

=INDIRECT("'C:\Folder\Subfolder\[File-" & TEXT(TODAY(),"mmmm") & ", FY''" & TEXT(TODAY(),"yy") & ".xls]Sheet1'!" & A1)

(Полный путь: 'C: \ Folder \ Subfolder [File-August, FY''20.xls] Sheet1'! A1)

Месяц, год и ячейка динамически c.

Я новичок в VBA, поэтому я собрал код из исследований, но я знаю, что, вероятно, с ним много чего не так . Я попытался сделать так, чтобы я мог использовать UDF и просто вызывать ячейку, но я не знаю, возможно ли это вообще.

Function Getvalue(CellRange As String) As Variant

    Dim path As String
    Dim file As String
    Dim sheet As String
    Dim str As String 
    Dim rng As Range
    
        yr = Format(CStr(Now), "yy")
    monthn = Format(CStr(Now), "mmmm")
    
    path = "C:\Folder\Subfolder\"
    file = "File-" & monthn & ", FY''" & yr & ".xls"
    sheet = "Sheet1"
    rng = Range(CellRange)
    
    str = "'" & path & "[" & file & "]" & sheet & "'!" & rng
    
  Result = ExecuteExcel4Macro(str)
    
End Function

При вводе возвращается #VALUE.

спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...