【发布时间】:2015-02-18 22:37:13
【问题描述】:
我正在创建一个 VBS 文件,我将通过批处理文件中的 cscript 启动该文件。我不会使用 VBA。我有能力打开它,格式化它和其他东西,但是我有多次自动过滤器迭代,我需要从表 1 剪切并粘贴到表 2。表 1 是 MasterPrinterList,表 2 是无效打印机
例如我的问题在于
myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*not used*",,,True
myXL.ActiveSheet.Range("A:G").Select
myXL.Selection.SpecialCells(xlCellTypeVisible).Select
myXL.Selection.Copy
myXL.Sheets("Invalid Printers").Select
myXL.Range("A2").Select
myXL.ActiveSheet.Paste
myXL.Sheets("MasterPrinterList").Select
myXL.Application.CutCopyMode = False
我可以让它工作,但 Excel 吓坏了,崩溃了,并说服务器在粘贴行上抛出异常。
我希望它使用自动过滤器,在第 6 列中查找包含“未使用”的任何单元格,将具有该行的行粘贴到工作表 2 的第一个可用行中。然后返回工作表1 清除自动过滤器,然后重新自动过滤“未使用”粘贴到下一个可用行的工作表 2。然后返回工作表 1,清除自动过滤器,然后重新自动过滤“moved to”
等等等等。我可以为自动过滤器填写每个搜索查询,我只是不知道如何正确粘贴而不导致 excel 崩溃,然后为不同的列表重复搜索块。
我的第一个问题显然是
myXL.Range("A2").Select
这需要类似于第一个可用行,而不是指定要粘贴的单元格。
其次是如何构建自动过滤器以使其正常工作。
我试过了
myXL.ActiveSheet.Range("A:G").AutoFilter 6, "*moved to*"
myXL.Selection.SpecialCells(xlCellTypeVisible).Select
myXL.ActiveSheet.Range("A:G").Copy
myXL.Sheets("Invalid Printers").Activate
set objRange = myXL.ActiveSheet.UsedRange
objRange.SpecialCells(xlCellTypeLastCell).Activate
intNewRow = myXL.ActiveCell.Row + 1
strNewCell = "A" & intNewRow
myXL.Range(strNewCell).Select
myXL.ActiveSheet.Paste
myXL.Application.CutCopyMode = False
myXL.Selection.Delete -4162
myXL.ActiveSheet.Range("A:G").AutoFilter
任何帮助..?
【问题讨论】:
-
您是否尝试过在 Excel 中手动执行您想要执行的操作,将其记录为宏?宏中生成的 VBA 代码可以帮助您在 VBS 中调试此问题。
-
你真的应该问一个更具体的问题。例如,“如何在 Excel 工作表中找到第一个空白行?”
标签: excel vbscript autofilter