2014-01-30 2 views
0

Я неудачно новичок в VBScript, я хочу скопировать конкретный столбец (например, столбец C) из нескольких листов excel (Source_1.xlsx, Source_2.xlsx , и Source_3.xlsx). и вставьте его в колонку A другого листа Excel Dest.xlsx. Этот столбец не должен содержать повторяющихся значений. Любая помощь будет оценена по достоинству.Скопируйте определенный столбец из нескольких файлов excel в один столбец другого файла excel

ответ

0

Во-первых, вам нужно создать объект excel, предполагая, что файлы одинаковы, и вы используете увеличивающееся целое в конце, вы можете выполнять итерацию через каждый объект excel. по мере того, как вы выполняете итерацию, вы можете вызвать тот же столбец, что и const, и скопировать в новое имя файла. Когда вы начинаете иметь некоторый код, отчет назад и он может быть разработан на дальнейшем

for i to x 
filename = "scen_"& i & ".xlsx" 
copyfilename = "copytohere.xlsx" 
'set up the object 

    for rowstart to rowend 
    'get contents of x column 
    'copy contents to copyfilename excel doc 
    Loop 

loop 

Благодарности

0
Const xlFilterCopy = 2 
Const xlUp = -4162 
Const xlDown = -4121 

strPathSrc = "C:\Test" ' Source files folder 
strMaskSrc = "Source_*.xlsx" ' Source files filter mask 
iSheetSrc = 1 ' Sourse sheet index or name 
iColSrc = 3 ' Source column index, e. g. 3 for "C" 
strPathDst = "C:\Test\Dest.xlsx" ' Destination file 
iColDst = 1 ' Destination column index 

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
Set objWorkBookDst = objExcel.Workbooks.Open(strPathDst) 
Set objSheetTmp = objWorkBookDst.Worksheets.Add 
objSheetTmp.Cells(1, iColDst).Value = "TempHeader" 
Set objShellApp = CreateObject("Shell.Application") 
Set objFolder = objShellApp.NameSpace(strPathSrc) 
Set objItems = objFolder.Items() 
objItems.Filter 64 + 128, strMaskSrc 
objExcel.DisplayAlerts = False 
For Each objItem In objItems 
    Set objWorkBookSrc = objExcel.Workbooks.Open(objItem.Path) 
    Set objSheetSrc = objWorkBookSrc.Sheets(iSheetSrc) 
    objSheetSrc.Cells(1, iColSrc).Insert xlDown 
    objSheetSrc.Cells(1, iColSrc).Value = "TempHeader" 
    Set objRangeSrc = GetRange(iColSrc, objSheetSrc) 
    If objRangeSrc.Cells.Count > 1 then 
     nNextRow = GetRange(iColDst, objSheetTmp).Rows.Count + 1 
     objRangeSrc.AdvancedFilter xlFilterCopy, , objSheetTmp.Cells(nNextRow, iColDst), True 
     objSheetTmp.Cells(nNextRow, iColDst).Delete xlUp 
     Set objRangeTmp = GetRange(iColDst, objSheetTmp) 
     Set objSheetDst = objWorkBookDst.Worksheets.Add 
     objRangeTmp.AdvancedFilter xlFilterCopy, , objSheetDst.Cells(1, iColDst), True 
     objSheetTmp.Delete 
     Set objSheetTmp = objSheetDst 
    End If 
    objWorkBookSrc.Close 
Next 
objSheetTmp.Cells(1, iColDst).Delete xlUp 
objExcel.DisplayAlerts = True 

Function GetRange(iColumn, objSheet) 
    With objSheet 
     Set GetRange = .Range(.Cells(1, iColumn), .Cells(.Cells(.Cells.Rows.Count, iColumn).End(xlUp).Row, iColumn)) 
    End With 
End Function 
Смежные вопросы