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