Попытка скопировать рабочий лист в существующую книгу в vba

Я пытаюсь скопировать данные из листа, открытого из файла CSV, в качестве нового рабочего листа в существующем шаблоне Excel. Я попытался скопировать существующий пустой лист, а также скопировать исходный лист в качестве нового листа в целевой книге. Все эти методы вызвали множество ошибок. Единственный метод, который фактически позволил завершить код, – это специальная команда copy-paste. Тем не менее, это привело к тому, что клетки заполнялись двоичными, а не значениями, и многие клетки заполнялись серым цветом.

Ниже приведен код, который я пытаюсь получить:

'================================================= 'Add Data '================================================= Dim AppExcell As Object Dim wb As Object Dim xFile As String Dim main As Workbook Set AppExcel = CreateObject("Excel.Application") AppExcel.Visible = False Set wb = AppExcel.Workbooks.Add("C:\Fridge_Automation\Lab Report.xltm") Set main = ActiveWorkbook xFile = Application.GetOpenFilename("All CSV Files (*.csv),*.csv", , "Select CSV File") Set src = Workbooks.Open(xFile) src.Worksheets(1).Copy Before:=wb.Worksheets("11Mic Avg - Raw Data") wb.Worksheets(2).Name = "Raw Data" src.Close 

Я запускаю этот код в Excel 2013, нажав кнопку, которую я добавил на рабочий лист.

Следующий код работал для меня, запускался из книги. *** Флаги вещей, которые я изменил.

 Option Explicit ' *** Always use this in every module Option Base 0 Public Sub GrabSheet() 'Dim AppExcel As Object ' *** don't need this 'Dim wb As Object ' *** Dim dest As Workbook ' *** Instead of "wb" Dim xFile As String 'Dim main As Workbook ' *** 'Set AppExcel = CreateObject("Excel.Application") ' *** 'AppExcel.Visible = False ' *** 'Application.Visible = False ' *** Uncomment if you really want to... Set dest = ActiveWorkbook ' *** for testing - use Workbooks.Add("C:\Fridge_Automation\Lab Report.xltm") for your real code 'Set main = ActiveWorkbook ' *** don't need this xFile = Application.GetOpenFilename("All CSV Files (*.csv),*.csv", , "Select CSV File") Dim src As Workbook ' *** Need to declare this because of "Option Explicit" Set src = Workbooks.Open(xFile) ' Per https://stackoverflow.com/q/7692274/2877364 , it is surprisingly ' difficult to get the new sheet after you copy. ' Make a unique name to refer to the sheet by. Dim sheetname As String ' *** sheetname = "S" & Format(Now, "yyyymmddhhmmss") ' *** src.Worksheets(1).Name = sheetname ' *** src.Worksheets(1).Copy Before:=dest.Worksheets("11Mic Avg - Raw Data") ' *** changed wb to dest 'dest.Worksheets(2).Name = "Raw Data" ' *** don't assume an index... dest.Worksheets(sheetname).Name = "Raw Data" ' *** ... but use the name. ' *** NOTE: this fails if a "Raw Data" sheet already exists. src.Close SaveChanges:=False ' *** Suppress the "save changes" prompt you otherwise get because of the `src...Name` assignment End Sub 

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

Вам не нужно создавать объект AppExcel когда вы работаете из Excel. Вместо этого вы можете просто обратиться непосредственно к Application .

Давайте будем гением компьютера.