我再次需要帮助。
我有一个excel文件,我必须做一些格式化以便进一步处理。 我坚持一点:
我希望这可以用VBscript,因为我不能使用VBA。 这就是代码的样子,但我不能正常工作
Dim objExcel
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
excel.workbooks.open "C:\Users\............."
excel.Rows("1:34").Select
excel.Selection.Delete
excel.Columns("A:A").Select
excel.Selection.Delete
excel.Range("A1").Select
Number = excel.countIf "A:A", "Ent.Date"
for i = 1 to Number
excel.Cells.Find("Ent.Date").Activate
excel.Activecell.Offset(-1,0).Select
excel.Activecell.resize(RowSize +3).EntireRow.Select
excel.Selection.Delete
next
请帮帮我。
由于
答案 0 :(得分:0)
你很亲密。 CountIf()
是WorksheetFunction
应用中Excel
类的一种方法。所以:
Number = Excel.WorksheetFunction.CountIf("A:A", "Ent.Date")
无关。所有这些.Active
.Select
都是不必要的。人类Select
和Activate
,但您的脚本不需要。
相反:
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
excel.workbooks.open "C:\Users\............."
excel.Rows("1:34").Delete
excel.Columns("A:A").Delete
Number = excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date")
for i = 1 to Number
excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete
next
另外(这可能更偏好)而不是使用For
进行循环,您可以改为使用While
循环:
Set Excel = CreateObject("Excel.Application")
Excel.Visible = True
excel.workbooks.open "C:\Users\............."
excel.Rows("1:34").Delete
excel.Columns("A:A").Delete
Do While excel.WorksheetFunction.CountIf(Excel.Range("A:A"), "Ent.Date") >= 1
excel.Cells.Find("Ent.Date").Offset(-1,0).resize(RowSize +3).EntireRow.Delete
Loop
由于它在每个循环上运行了countif,因此会产生一些额外的开销,但它感觉更简洁,错误的可能性更小,因为您似乎将Find()
返回的范围调整为更多行然后删除它们全部...这意味着您可能会选择也包含搜索条件的行,这意味着您在For
循环中循环过多。但是......也许你的工作表设置的方式不会发生这种情况。