Не могу Workbook.Открыть тип файла XLS? - PullRequest
1 голос
/ 12 марта 2020

Застрял на этом. Я создаю макрос Excel 2016, который (будем надеяться) пропустит oop через все файлы .xls в папке и внесет некоторые изменения в форматирование, однако мой workbook.open не открывает файл .xls. Кажется, он просто смотрит прямо на него? Я снял все флажки в центре управления безопасностью, так почему бы не открыть файл .xls в моем коде VBA? Что-нибудь еще я могу попробовать? Это работает, если файл имеет формат .xlsx, но не .xls по какой-то причине. Соответствующий раздел кода ниже. Спасибо!

ОБНОВЛЕНИЕ

В соответствии с просьбой, я попытаюсь получить здесь более техническую информацию. Здесь я добавил полный сценарий (без каких-либо дополнительных средств форматирования), чтобы кто-то со мной справился.

Интересно отметить следующее:

Даже если он у меня есть он настроен на поиск только .xls типов файлов в l oop, по некоторым причинам он выполняет все мои команды форматирования в текущей книге макроса .xlsm, чего не должно быть. В качестве обходного пути я также включил строку

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> "" And Filename <> "Bid_Report_Macro.xlsm" ' This workbook's name

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

Кроме того, файл .xls, который я пытаюсь открыть, является файлом Microsoft Excel 97-2003 Worksheet (.xls). Я снял все флажки в Центре управления безопасностью в отношении блокировки открытия определенных типов файлов / блокировки файлов. Если я запустите этот же код, но вместо этого поставлю все файлы .xlsx в папку, это сработает. Так что я не знаю, почему это не работает для файлов .xls. Когда я нажимаю кнопку макроса, ничего не происходит.

Я пытался включить CorruptLoad:=xlExtractData и CorruptLoad:=xlRepairFile в функцию открытия, но это тоже ничего не дало.

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

Есть идеи? Спасибо.

Sub Bid_Report_Function()

' Create (but don't define yet) some variables used throughout
Dim folderPath As String
Dim Filename As String
Dim wb As Workbook
Dim SrchRng As Range, cel As Range
Dim EmptyDays As Integer

' Run it in the background.
Application.ScreenUpdating = False

' Directory of this macro that has the other .xls files
folderPath = Application.ActiveWorkbook.Path

' A conditional for finding the directory with proper structure
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

' Do this for each xls workbooks in the folder
Filename = Dir(folderPath & "*.xls")

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> "" 'And Filename <> "Bid_Report_Macro.xlsm" ' This workbook's name

    ' Open a workbook in the folderPath
    Set wb = Workbooks.Open(folderPath & Filename, CorruptLoad:=xlRepairFile)

    ' Always start on the first worksheet of the opened workbook
    wb.Worksheets(1).Activate

    '......my formatting code is here. Skipping to the end...

    ' Rename the current tab
    wb.ActiveSheet.Name = "RENAMED TAB"


    ' Save as, a copy as a .xls file
    wb.SaveAs Filename:="TEST.xls"

    ' Close but don't save the current workbook to keep it the same
    wb.Close False


' This prevents the macro from doing all of the above endlessly.
Exit_Loop:
    Set wb = Nothing
    Filename = Dir

' Next workbook in the directory
Loop

' Can turn screen updating back on
Application.ScreenUpdating = True

' End program
End Sub

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я понял это. Хотя это не очень хорошее решение, но я получил его, фактически определив полное имя файла .xls, который я надеялся использовать. Это не очень хорошо, потому что он не распознает все файлы .xls в папке, что делает l oop бесполезным, но пока это работает. Это рабочий код. Я постараюсь когда-нибудь получить рабочую л oop. Спасибо!

' Run it in the background.
Application.ScreenUpdating = False

' Directory of this macro that has the other .xls files
folderPath = Application.ActiveWorkbook.Path

' A conditional for finding the directory with proper structure
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

' Do this for each xls workbooks in the folder
Filename = Dir(folderPath & "translate_quote_42666432_v6_all.xls")

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""

    ' Open a workbook in the folderPath
    Set wb = Application.Workbooks.Open(folderPath & Filename)

    ' Always start on the first worksheet of the opened workbook
    wb.Worksheets(1).Activate
0 голосов
/ 13 марта 2020

Возможно, ваш Do l oop должен выглядеть примерно так:

' Start a loop for all .xlsx files in the folder (defined in the last step)
Do While Filename <> ""
    If Filename <> ThisWorkbook.Name Then 'This workbook's name
        ' Open a workbook in the folderPath
        Set wb = Workbooks.Open(folderPath & Filename, CorruptLoad:=xlRepairFile)
        ' Always start on the first worksheet of the opened workbook
        wb.Worksheets(1).Activate
    End If
    'get the next file in the folder which matches the Directory search
    Filename = Dir
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...