2016-01-14 54 views
0

我需要用vbscript(而不是vba)完成此操作。我找不到如何做到這一點的任何例子。我已經有了vbs,可以完成我需要的所有Excel文件的主要處理,但是我需要的最後一部分僅僅是將駐留在兩個單獨的.xlsx文件中的兩個工作表合併到一個工作表中,並將它們合併到一個新的工作簿中。將兩個單獨的xlsx文件中的.xlsx工作表合併到一個新工作簿中的單個工作表中

我已經找到了使用vba將兩個文件合併到一個單獨的wb中的示例,但我需要它們在同一個工作表上並通過vbscript。它基本上就像兩張牀單的結合。它們都包含相同數量的列(6列)和相同類型的數據。基本上需要複製任一電子表格中的標題並粘貼到新的工作簿/工作表中,然後將所有數據複製到標題下的新工作簿/表單中。希望這是有道理的。任何幫助表示讚賞。

我對此很接近,這將兩個數據表放入同一個名爲「合併」的NEW工作簿中,但需要它將這些工作表合併爲一個。

Set objExcel = WScript.CreateObject ("Excel.Application") 

objExcel.Visible = false 

strFileName = "c:\excel\merged.xlsx" 

Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx") 
Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx") 

Set objWorkbook = objExcel.Workbooks.Add() 

objwba.worksheets(1).copy _ 
objWorkbook.worksheets(1) 
objwbb.worksheets(1).copy _ 
objWorkbook.worksheets(2) 

objWorkbook.SaveAs(strFileName) 
objWorkbook.close 

objWbA.Close True 
objWbB.Close True 

objExcel.Quit 
Set objExcel = Nothing 

==========================

這裏是我想出了一個解決方案(就用CSV輸出):

Option Explicit 
Dim objExcel 
Dim strFilename 
Dim objWbA 
Dim objWbB 
Dim Lastrow 
Dim Lastrow1 
Dim objWorkbook 
Dim objSheeta 
Dim objSheetb 

Set objExcel = WScript.CreateObject ("Excel.Application") 

objExcel.Visible = false 
objExcel.displayalerts = false 

strFileName = "c:\excel\merged.csv" 

Set objWbA = objExcel.WorkBooks.open("c:\excel\wb1.xlsx") 

Set objSheeta = objWbA.Sheets("wb1") 

Set objWbB = objExcel.WorkBooks.open("c:\excel\wb2.xlsx") 

Set objSheetb = objWbB.Sheets("wb2") 

Set objWorkbook = objExcel.Workbooks.Add() 

Const xlUp = -4162 
Const xlPasteValues = -4163 
Const xlPasteFormats = -4122 
Const xlPasteValuesAndNumberFormats = 12 

with objSheeta 
Lastrow = .Cells(objSheeta.Rows.Count, 1).End(xlUp).Row 
     .Range("B1:F" & Lastrow).Copy 
end with 

objWorkbook.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats 

with objSheetb 
Lastrow1 = .Cells(objSheetb.Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
     .Range("B2:F" & Lastrow1).Copy 
end with 

objWorkbook.Worksheets("Sheet1").Range("A" & Lastrow1).PasteSpecial xlPasteValuesAndNumberFormats 

'=================================== 

objExcel.CutCopyMode = False 
objExcel.ScreenUpdating = True 

objWorkbook.SaveAs(strFileName), 6 
objWorkbook.close True 

objWbA.Close True 
objWbB.Close True 

objExcel.Quit 
Set objExcel = Nothing 
+0

你一直在這裏足夠長,知道你必須表現出努力。 – findwindow

+0

我不認爲有必要發佈一堆不密切的代碼。我描述了OP中的努力。只是尋找一些指導。我一直在研究這個,現在嘗試了許多不同的事情2天。我作爲最後的手段發佈在這裏。最近,我的帖子一直在生成與你一樣的回覆,這迫使我在自己或其他論壇上找到不太理想的解決方案。不是很有幫助。然而,我在上面發佈了一些代碼,這在球場上有些不同。但是,缺乏很多。 – user3108489

+0

'最近,我的帖子一直在產生像你這樣的回覆',這應該是你的一些反思的指示? '沒想到有必要發佈一堆不緊密的代碼'所以你只是要求SO代碼給你,而不是這樣。嘗試編碼的東西,然後回來問一個更好的問題。 – findwindow

回答

1

如果執行Worksheet.Copy method和忽視提供一個目的地,工作表將被複制到其持有ActiveWorkbook property新工作簿。這可能是啓動新工作簿的最佳方式。如果您提供從XlFileFormat Enumeration文件類型正確的值

Set objExcel = WScript.CreateObject ("Excel.Application") 

objExcel.Visible = False 'True for testing 

strFileName = "c:\tmp\merged" '<~~ no file extension, FileType:=51 (xlOpenXMLWorkbook) will do that 

Set objWbA = objExcel.WorkBooks.open("c:\tmp\wb1.xlsx") 
Set objWbB = objExcel.WorkBooks.open("c:\tmp\wb2.xlsx") 
rws = objWbA.Worksheets(1).Rows.Count '<~~ 65536 or 1048576 (need this below) 

objWbA.Worksheets(1).Copy '<~~ copy to a new workbook with one worksheet 
objWbB.Worksheets(1).Cells(1, 1).CurrentRegion.Copy _ 
    objExcel.ActiveWorkbook.Worksheets(1).Cells(rws, 1).End(-4162).Offset(1,0) '-4162 is xlUp 

objExcel.ActiveWorkbook.SaveAs strFileName, 51 '<~~ 51 is FileType:=xlOpenXMLWorkbook 
objExcel.ActiveWorkbook.Close False '<~~ saved on the line immediately above 

objWbA.Close False 'don't save if we didn't change anything 
objWbB.Close False 'don't save if we didn't change anything 

objExcel.Quit 
Set objExcel = Nothing 

Workbook.SaveAs method將提供正確的文件擴展名。因爲他們沒有收到任何更改,所以不需要保存原件。

+0

謝謝,Jeeped。說實話,我已經放棄了這個主題,並且自己制定了一個解決方案,但是這確實比我的更優雅。我也很欣賞這條評論。爲了向其他人展示我不依賴於提供的代碼(因爲看起來我需要證明自己),我會在OP中發佈我自己的解決方案,以便採取更好的措施。 – user3108489

相關問題