您编写代码的方向很接近,希望这个示例可以提供帮助。但首先,请在您的代码中添加always use Option Explicit。
在为工作表设置初始变量时,使用更具描述性的变量名称可以更清楚地明确哪个变量用于保存某些数据。我当时设置的示例是
Dim wb As Workbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set wb = ThisWorkbook
Set srcWS = wb.Sheets("Sh2")
Set dstWS = wb.Sheets("Sh3")
接下来,您可以创建一个变量来确定源数据的范围区域:
Dim srcRange As Range
Set srcRange = srcWS.UsedRange
如果您要创建前两列以包含工作簿和工作表名称,则实际上不需要循环。通过创建所需大小的Range,单个语句将在该范围内的所有单元格中放置相同的值。因此,您可以使用
在两个语句中创建您的姓名列
dstWS.Range("A1").Resize(srcRange.Rows.Count, 1) = wb.Name
dstWS.Range("B1").Resize(srcRange.Rows.Count, 1) = srcWS.Name
我将建立一个从第三列开始的目标范围,就在两个名称列的右侧:
Dim dstRange As Range
Set dstRange = dstWS.Range("C1").Resize(srcRange.Rows.Count, _
srcRange.Columns.Count)
然后用同样的想法,您也可以在单个语句中将整个源范围复制到您的目标:
dstRange.Value = srcRange.Value
你已经完成了。
这是一个单独的块中的整个示例:
Option Explicit
Sub CopyMyRange()
Dim wb As Workbook
Dim srcWS As Worksheet
Dim dstWS As Worksheet
Set wb = ThisWorkbook
Set srcWS = wb.Sheets("Sh2")
Set dstWS = wb.Sheets("Sh3")
Dim srcRange As Range
Set srcRange = srcWS.UsedRange
dstWS.Range("A1").Resize(srcRange.Rows.Count, 1) = wb.Name
dstWS.Range("B1").Resize(srcRange.Rows.Count, 1) = srcWS.Name
Dim dstRange As Range
Set dstRange = dstWS.Range("C1").Resize(srcRange.Rows.Count, _
srcRange.Columns.Count)
dstRange.Value = srcRange.Value
End Sub