Почему я получаю объект требуемой ошибки при попытке получить пользовательский ввод для имени книги - PullRequest
0 голосов
/ 02 октября 2018

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

Итак, сначала я подумал, что для точности лучше использовать функцию GetOpenFilename вместо того, чтобы пользователь сам вводил имя книги.Я использовал эту страницу и этот ответ во время написания.Когда я запускаю код, открывается диалоговое окно Открыть, но когда я выбираю рабочую книгу, я получаю:

«Ошибка времени выполнения« 424 »: требуется объект».

Я не уверен, что он просит?Сначала у меня было только Application.GetOpenFilename(), поэтому я подумал, что нужно добавить фильтр, но это не помогло.

    Sub openfile()

Dim mainwb As Workbook
Set mainwb = Application.GetOpenFilename("Microsoft Excel Files, *.xls*")

Dim mainws As Worksheet
mainws = InputBox("Please enter the name of the worksheet")

Dim rdsMonthly As Variant
rdsMonthly = InputBox("Please insert current month column in format $A:$A")

Dim rdsID As Variant
rdsID = InputBox("Please insert ID column in format $A:$A")

Cells(8, 14) = "=IFERROR(SUMIFS('[" & mainwb & "]" & mainws & "'!" & rdsMonthly & ", '[" & mainwb & "]" & mainws & "'!" & rdsID & ", $C55), " & Chr(34) & Chr(34) & ")"


End Sub

После этого я попытался вместо этого использовать поле ввода

 Dim mainwb As Workbook
mainwb = InputBox("Please enter the name of the workbook, including file extension")

Но это дает мне:

"Ошибка времени выполнения '91': объектпеременная или переменная блока не установлена ​​".

Понятия не имею, чего он от меня хочет, и я очень признателен за любую помощь!

1 Ответ

0 голосов
/ 02 октября 2018

Чтобы получить имя рабочей книги, обозначенное .GetOpenFileName, вы можете разделить одну большую строку через / и затем получить последний элемент.Затем снова разделите на .xls и возьмите 0-й предмет.С одной строкой эти 2 операции выглядят так:

Sub TestMe()

    Dim filePath As String
    filePath = Application.GetOpenFilename("Microsoft Excel Files, *.xls*")

    Dim nameOfWb As String
    'do not do this at production, but split it to variables:
    nameOfWb = Split(Split(filePath, "\")(UBound(Split(filePath, "\"))), ".xls")(0)
    Debug.Print nameOfWb

End Sub

Application.GetOpenFilename("Microsoft Excel Files, *.xls*") возвращает строку пути к книге.И Workbooks() нужно имя книги, которое уже открыто.

Попробуйте:

Sub TestMe()

  Dim mainwb As Workbook
  Set mainwb = Workbooks.Open(Application.GetOpenFilename("Microsoft Excel Files, *.xls*"))

  MsgBox mainwb.Name

End Sub
...