Можете ли вы ссылаться на переменную в книге без расширения? - PullRequest
0 голосов
/ 18 января 2019

Я пытался найти ответ, но, похоже, он не был в сети.

Пример кода:

dim wb_name as string
wb_name = range("A1").value & ".xlsx"
set wb = workbooks(wb_name)
  • Есть ли способ сделать это без «.xlsx» в случае, если иногда меняется расширение (например, из старогоот формата Excel до нового)
  • Есть ли какая-то функция перехвата всех, которая может интерпретировать различные виды расширений?

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Вы можете использовать регистр выбора для определения версии Excel и расширения / формата файла

    If Val(Application.Version) < 12 Then
        'You use Excel 97-2003
        FileExtStr = ".xls": FileFormatNum = -4143
    Else
        'You use Excel 2007-2016
        Select Case wb.FileFormat
        Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
        Case 52:
            If .HasVBProject Then
                FileExtStr = ".xlsm": FileFormatNum = 52
            Else
                FileExtStr = ".xlsx": FileFormatNum = 51
            End If
        Case 56: FileExtStr = ".xls": FileFormatNum = 56
        Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
    End If

Вот 2 примера

Использование VBA SaveAs в Excel 2007-2016 - Рон де Брюин Excel Automation

https://stackoverflow.com/a/30393989/4539709

0 голосов
/ 19 января 2019

Вы можете циклически просматривать открытые книги:

Public sub GetWB(byval wb_name as string) as excel.workbook
Dim wbkCurr as excel.workbook 

Set getwb=nothing 
For each wbkCurr in application.workbooks
    If lower(left(wbkCurr.name, instr(wbkCurr.name,”.”))) = lcase(wb_name) then
        Set getwb = wbkCurr
    Endif
Next wbkCurr 

End function 

Называть его с помощью set wb = getwb (wb_name)

Просто проверьте, что wb все еще ничто, прежде чем продолжить

0 голосов
/ 18 января 2019

Вы можете использовать групповой подход.

Dim wb_name as String
wb_name = Range("A1").Value & ".****"
Set wb = Workbooks(wb_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...