Member 11856456 Ответов: 0

Как транскрибировать VBA в VB.NET


Я работал над транскрибированием кода vba в пригодный для использования vb.net код.

Вот код VBA, с которым я работаю:

Sub simpleXlsMerger()
Dim bookList As Workbook
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Application.ScreenUpdating = False
Set mergeObj = CreateObject("Scripting.FileSystemObject")
 
'change folder path of excel files here
Set dirObj = mergeObj.Getfolder("folder of excel docs")
Set filesObj = dirObj.Files
For Each everyObj In filesObj
Set bookList = Workbooks.Open(everyObj)
 
'change "A2" with cell reference of start point for every files here
'for example "B3:IV" to merge all files start from columns B and rows 3
'If you're files using more than IV column, change it to the latest column
'Also change "A" column on "A65536" to the same column as start point
Range("A7:IV" & Range("A1048500").End(xlUp).Row).Copy
ThisWorkbook.Worksheets(1).Activate

'Do not change the following column. It's not the same column as above
Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial
Application.CutCopyMode = False
bookList.Close savechanges:=False


Next
End Sub


Это то, что я придумал до сих пор:

Private Sub excelmerger()

        Dim dialog As New FolderBrowserDialog()
        dialog.RootFolder = Environment.SpecialFolder.DesktopDirectory
        dialog.Description = "Select Application Configeration Files Path"
        dialog.ShowNewFolderButton = False

        dialog.ShowDialog()

        Dim workb As Excel.Workbooks
        Dim exapp As New Excel.Application
        Dim bookList As Microsoft.Office.Interop.Excel.Workbook
        Dim ThisWorkbook As Excel.Workbook = exapp.Workbooks.Add()

        Dim mergeObj As Object = CreateObject("Scripting.FileSystemObject")
        Dim dirObj As Object = mergeObj.Getfolder(dialog.SelectedPath)
        Dim filesObj As Object = dirObj.Files
        Dim everyObj As Object
        bookList.Application.ScreenUpdating = False

        'change folder path of excel files here
        For Each everyObj In filesObj
            bookList = workb.Open(everyObj)

            'change "A2" with cell reference of start point for every files here
            'for example "B3:IV" to merge all files start from columns B and rows 3
            'If you're files using more than IV column, change it to the latest column
            'Also change "A" column on "A65536" to the same column as start point
            Dim exr As Excel.Range
            exr = exapp.Range("A7:IV" & exapp.Range("A1048500").End(Excel.XlDirection.xlUp).Row).Copy
            ThisWorkbook.Worksheets(1).Activate

            'Do not change the following column. It's not the same column as above
            exapp.Range("A65536").End(Excel.XlDirection.xlUp).Offset(1, 0).PasteSpecial()
            bookList.Application.CutCopyMode = False
            bookList.Close()

            'bookList.Save
            ' SaveChanges:=False

        Next
    End Sub


в тусклом свете эта книга выглядит как Excel.Рабочая книга = exapp.Рабочая тетрадь.Add () я постоянно получаю ошибку ссылки на нулевой объект. Не знаю почему.

Поскольку это мой первый раз, когда я делаю это, я надеялся получить некоторую помощь.

Заранее спасибо

Что я уже пробовал:

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

Maciej Los

И какой у тебя вопрос?

Member 11856456

К сожалению, я забыл указать это в мой код VB.NET его дает мне значение null ссылка на объект ошибка при тусклом файл thisworkbook как Excel.Рабочая книга = exapp.Рабочая тетрадь.Добавлять(). Кажется, я не могу пройти мимо этого момента.

Member 11856456

просто добавил Это к моему вопросу, спасибо, что обратил на это мое внимание.

RedDk

Пожалуйста, не воспринимайте это как что-то другое, кроме предложения "в дополнение к", но пробовали ли вы искать "VSTO" в microsoft MSDN? Поскольку есть тонны примеров кода, доступных для загрузки, каждый из которых нацелен на разработку плагинов для платформы OFFICE, не очень трудно найти что-то, что нацелено на конкретные методы. Если не для использования как есть, то для выяснения конкретного ключевого слова ошибки. У меня это сработало.

Michael_Davies

Совет: прежде чем выйти из субподрядчика, убедитесь, что вы отключились от exapp;

В То Время Как Система.Во время выполнения.InteropServices.Маршал.ReleaseComObject (exapp) < & gt; 0
Приложение.Функция doevents()
Конец Пока

exapp = ничего

Michael_Davies

Я попробовал использовать ваш код, и он отлично сработал для меня, добавил ссылку Excel 12.0, а затем сделал это;

Dim exapp как Microsoft.Офис.Взаимодействие.Превосходить.Приложение = Новый Microsoft.Офис.Взаимодействие.Превосходить.Приложение
Тусклый рабочий стол, как Microsoft.Офис.Взаимодействие.Превосходить.Рабочая тетрадь
Затемните Эту Рабочую Книгу Как Microsoft.Офис.Взаимодействие.Превосходить.Рабочая книга = exapp.Рабочая тетрадь.Добавь()

Без проблем.

Member 11856456

Я сделал рекомендуемое решение, которое вы опубликовали, оно помогает мне преодолеть мою первоначальную проблему, и теперь, когда я запускаю программу, она говорит: "System.NullReferenceException: 'ссылка на объект не установлена на экземпляр объекта".Приложение.ScreenUpdating = False " часть.

кроме того, нужно ли мне добавлять какую-либо дополнительную информацию в "Dim ThisWorkbook As Microsoft.Офис.Взаимодействие.Превосходить.Рабочая книга = exapp.Рабочая тетрадь.Добавить () " внутри круглой скобки?

Michael_Davies

Используйте онлайн-ссылку на этот метод, и вы обнаружите, что можете поместить имя файла в скобки для workbooks.add.

bookList никогда не назначается/не создается, поэтому это ничто, и вы не можете ничего использовать... а поскольку она вам не нужна, вы можете ее отбросить.

Попробуйте: Эта Рабочая Тетрадь.Приложение.ScreenUpdating = False

Ralf Meier

Вы написали/импортировали следующее :
импорт в Excel = Майкрософт.офис.- взаимодействия.в Excel

0 Ответов