VBA - 打开excel,查找和替换,删除行,另存为csv

时间:2013-05-09 19:02:01

标签: excel vba excel-vba sas

我正在尝试在VBA中编写程序,以便我可以从SAS(统计编程软件)远程操作excel文件。我希望程序完成以下任务:

  1. 打开指定的Excel文件
  2. 查找并替换标题行中的所有空格(例如,“测试名称”变为“TestName”)
  3. 如果行中的第一个单元格(即A2)为空白
  4. ,则删除第二行
  5. 将文件另存为csv
  6. 我不知道VBA,稍微涉及它,了解其他一些编程语言,并尝试将它拼凑在一起。我偷了一些代码让1和4工作。我不能让2和3工作。这就是我所拥有的:

    我在SAS中将以下内容用于调用vba程序 -

    x 'cd C:\Location';/*change to location of VBS file*/
    x "vbsprogram.vbs inputfile.xls outputfile.csv";
    

    VBA计划 -

    '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部分)而不必指定设定范围的单元格?

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运算符来完成任务。