|
消磨时间,给你授课:
- Sub theCopyNextBook()
- Dim wb As Workbook, theWindowIndex&, MyWindowIndex&
- Dim theFinalRow&, arr As Variant
- '
- MyWindowIndex = Windows(ThisWorkbook.Name).Index '当前代码所在工作簿窗口的索引号(后文简述为序号)
- For Each wb In Application.Workbooks '遍历循环已打开的所有工作簿
- If Windows(wb.Name).Visible Then '防止有窗口被隐藏的工作簿被当作目标工作簿(譬如存在个人宏工作簿等)
- theWindowIndex = Windows(wb.Name).Index '该可见工作簿窗口的序号
- If Abs(theWindowIndex - MyWindowIndex) = 1 Then '若窗口序号紧挨,判断为找到了目标工作簿
- '下方楼主所谓的粘贴(事实上,后文代码不再是粘贴,而写入了)操作作了大的变更
- With wb '用With结构限定下方的所有属性操作针对的都是wb这一目标工作簿,初学者要尽量掌握这种写法
- With .Worksheets(1) '再来个With结构限定下方的所有属性操作针对的都是Wb工作簿的第一个工作表
- theFinalRow = .Cells(.Rows.Count, 1).End(xlUp).Row '取得A列最靠后的存在数据的数据行号
- '把第1列从第1行起始到上文所说的theFinalRow行止的单元格区域一次性读入arr变量(显然,此时arr变量是一个二维数组了)
- arr = .Range(.Cells(1, 1), .Cells(theFinalRow, 1))
- End With
- End With
- '
- '把arr数组写入当前代码所在工作簿的第1个工作表的A1单元格起始的A列
- '注:Resize方法允许Range对象(此例Range对象为.Cells(1),即工作表的第1个单元格,用大白话说,就是A1单元格)在新区域内调整大小
- '再说白点吧:Resize后的新区域的数量行为Ubound(arr)行,数量列为1列。事实上,
- '也可写为.Resize(Ubound(arr)),即把列数省略,省略列数的情况下扩展的区域的列数大小默认为与Range的列数数量是一样的
- '补:Ubound()函数是取得数组的维数,其用法自己花时间去帮助文件中查询,你没付费^_^,教你的已经过多了
- ThisWorkbook.Worksheets(1).Cells(1).Resize(UBound(arr), 1) = arr '把数组内容写入工作表
- Exit For '显然目的达成了,不用再往后循环了吧
- End If
- End If
- Next wb
- End Sub
复制代码 |
评分
-
1
查看全部评分
-
|