Проверьте путь к папке по vb - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь получить путь к папке и затем зацикливаюсь для листа Excel в этой папке

Imports Excel= Microsoft.Office.Interop.Excel

Public Sub Combine()

    Dim objApp As Excel.Application
    Dim objBook As Excel.Workbook
    Dim objSheet As Excel.Worksheet
    Dim myrange As Excel.Range
    Dim folderPath As String
    Dim fileName As String

    folderPath = @"FolderPath"
    fileName = Dir(folderPath & "*.xls")

    Do While (fileName <> "")

        objBook = objApp.Workbooks.Open(Filename:=Txt_GetPath.Text & fileName = True)
        objBook.Activate()

        For Each objSheet In objBook.Sheets
            objSheet.Copy(After:=objBook.Sheets(1))
        Next objSheet

        objBook.Close()

    Loop

End Sub

Но в строке objBook =objApp.Workbooks.open(...) я получаю ошибку

Путьдолжно быть заполнено

Что не так с кодом?

1 Ответ

0 голосов
/ 01 декабря 2018

Для обработки всех файлов в каталоге вы можете использовать функцию Directory.EnumerateFiles .

Не совсем просто избавиться от приложения Excel, если код имеетЗакончив его использование, я добавил для вас некоторые из Правильный способ утилизации объекта Excel com с помощью VB.NET?.

Я не знаю, что вы намеревались использовать с = Trueв команде, чтобы открыть книгу, поэтому я пропустил ее.

Option Strict On

Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel

Public Sub DoCombine()

    Dim objApp As New Excel.Application
    Dim objBook As Excel.Workbook
    Dim objSheet As Excel.Worksheet

    Dim folderPath As String = Txt_GetPath.Text

    For Each excelFile In Directory.EnumerateFiles(folderPath, "*.xls")

        objBook = objApp.Workbooks.Open(Filename:=excelFile)
        objBook.Activate()

        For Each objSheet In objBook.Sheets
            objSheet.Copy(After:=objBook.Sheets(1))
        Next objSheet

        objBook.Close()

    Next

    objApp.Quit()

End Sub

Public Sub Combine()

    ' Call the method to do the actual work
    DoCombine()

    ' Now Let the GC clean up (twice, to clean up cycles too)
    GC.Collect()
    GC.WaitForPendingFinalizers()
    GC.Collect()
    GC.WaitForPendingFinalizers()

End Sub

Используйте метод Combine() - он вызовет код, который вы используете в методе DoCombine(), и убедитесь, что нетмножество копий Excel осталось запущенным на компьютере - вы увидите их в диспетчере задач, даже если их не было на экране.

(почти) всегда хорошая идея использовать Option Strict On потому что это позволяет Visual Studio показать вам, где некоторые вещи записаны в коде.

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