2017-10-09 1 views
0

많은 열과 행이있는 xlsx 파일이 있습니다. 새 xlsx 파일을 생성하려면 별도의 열을 선택해야합니다.
내 코드는 다음과 같습니다vbscript를 사용하여 특정 열을 새 xlsx 파일에 저장하십시오.

Public Sub xlsToCsv()  
Dim WorkingDir 
WorkingDir = "C:\test.xlsx" 

Dim fso, FileName, SaveName, myFile 
Dim objExcel, objWorkbook 

Set fso = CreateObject("Scripting.FilesystemObject") 
Set myFile = fso.GetFile(WorkingDir) 

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = False 
objExcel.DisplayAlerts = False 

Set objWorkbook = objExcel.Workbooks.Open(myFile) 

With objWorkbook.Sheets(1) 
     .Range("D87", .Range("D87").End(-4121)).Copy 
     objWorkbook.Sheets.Add().paste 
     .Range("E87", .Range("E87").End(-4121)).Copy 
End With 

dim sheet: set sheet = objWorkbook.Sheets.Add() 
sheet.paste 
objWorkbook.SaveAs("E:\test.csv"), 23 
objWorkbook.Saved = true 
objWorkbook.Close 

Set objWorkbook = Nothing 
Set objExcel = Nothing 
Set fso = Nothing 
Set myFolder = Nothing 
End Sub 
call xlsToCsv() 

을하지만이 모든 열을 복사하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

전체 열을 복사하지 않는다고 말하면 어떻게됩니까? –

+0

worbooks 객체의 copy 속성을 일치시킬 수 없습니다. 14 번째 줄에 오류가 있습니다 (objworkbook = objecel.workbooks.open (myfile)을 설정하십시오) – nolags

답변

1

오류를 복제 할 수 없지만 몇 가지 지침이 있습니다.

하위를 호출하는 괄호를 사용하지 말고 다른 파일 형식 (objWorkbook.SaveAs("C:\test.xls"))으로 저장하려고합니다.

는 여기에 마지막 복사 범위가 복사되는 :

objWorkbook.Sheets(1).Range("D8").EntireColumn.Copy 
objWorkbook.Sheets(1).Range("A8").EntireColumn.Copy 
objWorkbook.Sheets(1).Range("F8").EntireColumn.Copy 

더 좋은 방법은 데이터를 복사 Columns.Copy Destination을 사용하는 것입니다.


다음
Const WorkingDir = "C:\" 
Const xlCSVMSDOS = 24 
Dim fso, SaveName, myFile 
Dim objExcel, objWorkbook, wsSource, wsTarget 

myFile = "test.xlsx" 
SaveName =WorkingDir & "test.csv" 

With CreateObject("Scripting.FilesystemObject") 
    If Not .FileExists(WorkingDir & myFile) Then 
     MsgBox "File not found:" & vbCrLf & WorkingDir & myFile, vbInformation, "Script Cancelled" 
     WScript.Quit 
    End If 
End With 

Set objExcel = CreateObject("Excel.Application") 

objExcel.Visible = False 
objExcel.DisplayAlerts = False 

Set objWorkbook = objExcel.Workbooks.Open(WorkingDir & myFile) 
Set wsSource = objWorkbook.Sheets(1) 
set wsTarget = objWorkbook.Sheets.Add() 

wsSource.Columns("D").Copy wsTarget.Columns("A") 
wsSource.Columns("A").Copy wsTarget.Columns("B") 
wsSource.Columns("F").Copy wsTarget.Columns("C") 


objWorkbook.SaveAs SaveName, xlCSVMSDOS 
objWorkbook.Close False 

objWorkbook.Sheets(1).Columns("D").Copy sheet.Columns("A") 
는 특정 행에서 시작하는 열에서 데이터를 복사 할 수있는 방법입니다.

Const xlUp = -4162 
With wsSource 
    .Range("D87", .Range("D" & .Rows.Count).End(xlUp)).Copy wsTarget.Range("A1") 
    .Range("A87", .Range("A" & .Rows.Count).End(xlUp)).Copy wsTarget.Range("B1") 
    .Range("F87", .Range("F" & .Rows.Count).End(xlUp)).Copy wsTarget.Range("C1") 
End With 
+0

개선에 감사드립니다. 하지만 14 행에 오류가 있습니다 (objworkbook = objexcel.workbooks.open (myfile), 코드 : 800A03EC 설정, woorkbooks 객체의 open 속성을 할당 할 수 없습니다.) – nolags

+0

파일이 존재하지 않아야합니다. [VBSEdit (http://www.vbsedit.com/default.asp?adwords=2&gclid=Cj0KCQjwvOzOBRDGARIsAICjxofmPtjx4fcbksZ1No1C1FXRJgS7etPYxyrxqFz-q18pIcBVCcywGgkaAoiwEALw_wcB)를 downlaod. –

+0

이 문제는 그 설정 objWorkbook = objExcel.Workbooks "의 파일 이름으로 WorkingDir 추가 didnt하는 것이었다 .Open (myFile) ". 그러나 지금은 아무것도 복사하지 않습니다. – nolags

관련 문제