vbscript在范围命令的xlsx文件中select不同的行
我写了一个vbscript来将xlsx文件的特定范围保存到csv文件中。 我想select不相邻的不同列。 每列的范围应包含最后一行的内容(范围("F6").End(xlToRight)
)。
我的代码:
Public Sub xlsToCsv() Const WorkingDir = "C:\" Const xlCSV = 6 Dim fso, SaveName, myFile Dim objExcel, objWorkbook, sheet myFile = "test.xlsx" SaveName = "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) With objWorkbook.Sheets(1) .Range("D87", .Range("D87").End(-4121)).Copy objWorkbook.Sheets.Add().paste .Range("E87", .Range("E87").End(-4121)).Copy End With set sheet = objWorkbook.Sheets.Add() sheet.paste objWorkbook.SaveAs WorkingDir & SaveName, 23 objWorkbook.Saved = true objWorkbook.Close Set objWorkbook = Nothing Set objExcel = Nothing Set fso = Nothing Set myFolder = Nothing End Sub call xlsToCsv()
我在第18行的代码800A000D中遇到types冲突,并带有“范围”。
我怎样才能做这个工作?
这里有两件事情:
-
无论何时使用Range对象
Range("F6").End(xlToRight)
,都需要提及它的types/父对象。 所以,在你的情况下,这应该被replace为objWorkbook.Sheets(1).Range("F6").End(xlToRight)
-
VBScript不知道
xlToRight
的含义。 所以,你必须使用如下所示的-4161的xlToRight的值:
replace下面的代码:
objWorkbook.Sheets(1).Range("F6", Range("F6").End(xlToRight)).Copy objWorkbook.Sheets(1).Range("C6", Range("C6").End(xlToRight)).Copy
WITH
With objWorkbook.Sheets(1) .Range("F6", .Range("F6").End(-4161)).Copy .Range("C6", .Range("C6").End(-4161)).Copy End With
认为你的一些代码可能会丢失,如宣告的工作目录。 我已明确引用范围通过添加:With objWorkbook.Sheets(1)
Dim WorkingDir As String 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 'main operation FileName = Left(myFile, InStrRev(myFile, ".")) Set objWorkbook = objExcel.Workbooks.Open(myFile) With objWorkbook.Sheets(1) .Range("F6", .Range("F6").End(xlToRight)).Copy .Range("C6", .Range("C6").End(xlToRight)).Copy End With Dim sheet: Set sheet = objWorkbook.Sheets.Add() sheet.Paste SaveName = FileName & "csv" objWorkbook.SaveAs SaveName, 23 objWorkbook.Saved = True objWorkbook.Close Set objWorkbook = Nothing Set objExcel = Nothing Set fso = Nothing ' Set myFolder = Nothing