VBA-打开excel,查找并替换,删除行,另存为csv
我正在尝试用VBA编写一个程序,以便从SAS(一种统计编程软件)远程操作excel文件。我希望该计划能够实现以下目标:VBA-打开excel,查找并替换,删除行,另存为csv,vba,excel,sas,Vba,Excel,Sas,我正在尝试用VBA编写一个程序,以便从SAS(一种统计编程软件)远程操作excel文件。我希望该计划能够实现以下目标: 打开指定的excel文件 查找标题行中的所有空格并将其替换为空(例如,“测试名称”变为“测试名称”) 如果行(即A2)中的第一个单元格为空,则删除第二行 将文件另存为csv 我不懂VBA,曾涉猎过一点,了解一些其他编程语言,并试图将其组合起来。我偷了一些代码使1和4工作。我不能让2号和3号去上班。这就是我所拥有的: 我将以下内容放入SAS中以调用vba程序- VBA程序- '1
'1-打开指定的excel文件
如果WScript.Arguments.Count<2,则
WScript.Echo“错误!请指定源路径和目标。用法:XlsToCsv SourcePath.xls destination.csv”
Wscript.Quit
如果结束
暗色oExcel
设置oExcel=CreateObject(“Excel.Application”)
Dim oBook
设置oBook=oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
'2-查找并替换
oBook.工作表(1).范围(“A1:G1”)。选择
选择。替换内容:=“**”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False
'3-如果为空,则删除第二行
oBook.Cell(“A2”).特殊单元格(xlCellTypeBlanks).EntireRow.Delete
'4-另存为csv
oBook.SaveAs WScript.Arguments.Item(1),6
好的,关上
oExcel,退出
Echo“完成”
如果能为我指明正确的方向,我将不胜感激
另外,是否有一种方法可以选择第1行中的所有数据作为范围(在第2部分中),而不必指定单元格的设置范围?根据您的输入,您需要修复原始代码的语句(2)和(3),并连接第1行中所有单元格的值。可以通过在与第1行和第2行相对应的2个范围对象中的每个单元格中循环来实现这一点。Excel VBA(源代码:)中该操作的常规语法显示在以下示例代码段中:
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.删除VBA运算符以完成任务。尝试:
'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
如果这段代码有任何问题,或者您只是想了解它是如何工作的?请具体说明。谢谢。这段代码的第2部分和第3部分不起作用。我根据我所能找到的和我所知道的编程知识将它们拼凑在一起,但它们肯定遗漏了一些东西,因为我遇到了一个错误。你有没有可能让我的代码更具体一些?我没有完全遵循。。。c、 值是指整个单元格内容,对吗?所以对于语句(2),我会有这样的东西:对于工作表(“Sheet1”)中的每个c。范围(“A1:G1”)。下一步单元格替换(c,“,”)。对于语句(3),当我只需要检查一个单元格(第2行A2中的第一个单元格)中的值时,为什么要搜索范围?对不起,我对此缺乏远见。正确:循环适用于语句(2)。对于语句(3),只需检查您提到的关键单元格(“A2”)的值,并应用EntireRow。如果满足条件,则删除。我从未使用我的代码使用过此解决方案(我的知识水平不足以有效地将其付诸实践),但感谢您的帮助!我得到以下错误:“对象不支持此属性或方法:'Cells'”代码:800A01B6。恐怕我还没有足够的知识来解决这个问题。非常感谢!两个快速修复方法:(1)我想在第一行执行查找和替换,因此它应该是“oBook.Worksheets(1.Cells(1,1)…”;(2)我只需要检查第2行的第一个单元格,因为它的其余部分包含数据。在我将.EntireRow从语句的第一部分删除后,一切都很顺利。
Sub FormatRow1()
For Each c In Worksheets("Sheet1").Range("A1:G1").Cells
if (c.Value) = {condition} then do something.
Next
End Sub
'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