Как транскрибировать 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