2015-07-15 6 views
1

Я пытаюсь сохранить каждый .xls-файл в папке в виде текста, используя Access VBA. Я закрепил код ниже. Тем не менее, он только успешно сохраняет 1-й файл excel в виде текста, а затем он, кажется, виснет.Преобразование файлов Excel в текст с помощью Access VBA

Я рассмотрел это сообщение, которое, как я думаю, достигает чего-то похожего на то, что я хочу: HERE. Но я был так долго, что ничего не имеет смысла! Есть идеи? Он застревает на ActiveWorkbook.Close?

Public Sub FormatAsText() 
Dim myfile As String 
Dim xlApp As Excel.Application 
Dim xlWB1 As Excel.Workbook 

Dim objFso As FileSystemObject 
Dim strPath As String 
Dim objFolder As Folder 
Dim objFile As File 

     Set xlApp = New Excel.Application 
     strPath = "C:FolderLocation..." 

     Set objFso = CreateObject("Scripting.FileSystemObject") 
     Set objFolder = objFso.GetFolder(strPath) 

     myfile = Dir(strPath & "\*.xls") 

      For Each objFile In objFolder.Files 
       If objFile.Name Like "*.xls" Then 
        Workbooks.Open objFile, ReadOnly:=False 
        ActiveWorkbook.SaveAs FileName:=strPath & "\" & Replace(myfile, ".xls", ".txt"), FileFormat:=xlTextWindows 
        ActiveWorkbook.Close 
       End If 
      Next objFile 

     Debug.Print myfile 

Set xlApp = Nothing 
Set xlWB1 = Nothing 

Set objFso = Nothing 

Set objFolder = Nothing 
Set objFile = Nothing 

End Sub 
+0

Добавить 'xlApp.Visible = True' после' Set xlApp = New Excel.Application'. Когда вы запускаете код с этим изменением, есть ли какая-либо информация, отображаемая в Excel, которая объясняет проблему? – HansUp

+0

Спасибо HansUp. После этого я вижу, что он открывает 1-й файл excel, сохраняет его как текст, затем закрывает файл excel. Затем он открывает файл второй секунды, форматирует его как текст, но пытается сохранить его с тем же именем, что и 1-й текстовый файл. («Файл уже существует ... Вы хотите его заменить?»). Какие-либо предложения? – mccdo

ответ

2

Добавляя xlApp.Visible = True после Set xlApp = New Excel.Application вы обнаружили, Excel ждет вас, чтобы сказать ему, нужно ли перезаписывать существующий файл, который имеет такое же имя, как и тот, который вы пытаетесь сохранить.

Это происходит потому, что вы присвоить значение MYFILE только один раз ...

myfile = Dir(strPath & "\*.xls") 

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

FileName:=strPath & "\" & Replace(myfile, ".xls", ".txt") 

Я думаю, что вы можете просто заменить objFile.Name, потому что он должен совпадать с именем текущего файла рабочей книги ... что означает, что ваше имя файла .txt будет отличаться каждый раз через цикл For Each.

FileName:=strPath & "\" & Replace(objFile.Name, ".xls", ".txt") 
+0

Фантастический - спасибо! Это отсортировано. Последнее, хотя - им все еще предлагается «сохранить» каждый файл. Я играл с Do.CmdSetWarnings False. Имеет ли значение, где в коде я вставляю это? – mccdo

+0

Откуда у вас это приглашение? В 'ActiveWorkbook.Close'? Если это так, используйте 'ActiveWorkbook.Close savechanges: = False' Я бы никогда не рекомендовал, чтобы кто-то использовал Do.CmdSetWarnings False' – HansUp

+1

Опять же, этот совет работал. Работает отлично .... спасибо. – mccdo