我正在尝试在VBA中编写程序,以便我可以从SAS(统计编程软件)远程操作excel文件。我希望程序完成以下任务:
我不知道VBA,稍微涉及它,了解其他一些编程语言,并尝试将它拼凑在一起。我偷了一些代码让1和4工作。我不能让2和3工作。这就是我所拥有的:
x 'cd C:\Location';/*change to location of VBS file*/
x "vbsprogram.vbs inputfile.xls outputfile.csv";
'1 - Open the specified excel file
if WScript.Arguments.Count < 2 Then
WScript.Echo "Error! Please specify the source path and the destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
'2 - Find and Replace
oBook.Worksheets(1).Range("A1:G1").Select
Selection.Replace What:="* *", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
'3 - Delete second row if blank
oBook.Cell("A2").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'4 - Save as csv
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"
非常感谢任何帮助我指明正确方向的协助。
另外,有没有办法选择第1行中的所有数据作为范围(第2部分)而不必指定设定范围的单元格?
答案 0 :(得分:3)
尝试:
'2: - Find and Replace
oBook.Worksheets(1).Cells(2,1).EntireRow.Replace " ", ""
'3 - Delete second row if blank
If oExcel.CountA(oBook.Worksheets(1).Cells(2,1).EntireRow) = 0 Then
oBook.Worksheets(1).Cells(2,1).EntireRow.Delete
End If
答案 1 :(得分:0)
根据您的输入,您需要修复原始代码的语句(2)和(3),并且还连接第1行中所有单元格的值。您可以通过循环遍历2个Range对象中的每个单元格来实现此目的对应于第1行和第2行.Excel VBA中该操作的常规语法(来源:http://msdn.microsoft.com/en-us/library/office/aa221353%28v=office.11%29.aspx)显示在以下示例代码段中:
Sub FormatRow1()
For Each c In Worksheets("Sheet1").Range("A1:G1").Cells
if (c.Value) = {condition} then do something.
Next
End Sub
仅供参考:使用&
运算符在Excel VBA中进行字符串连接。此外,您应该使用Replace ( string1, find, replacement, [start, [count, [compare]]] )
和Range(range).EntireRow.Delete
VBA运算符来完成任务。