将单元格值从一个工作簿复制到另一个工作簿

时间:2015-03-17 21:16:17

标签: excel vba

我已经编写了以下代码来获取一些名称并使用它们来填充时间表。

Sub InitNames()
    Dim i As Integer
    i = 0
    Dim name As String

    Windows("Employee Data.xlsx").Activate
    Sheets("Employees").Select
    Range("A2").Select
    Do Until IsEmpty(ActiveCell)
        name = ActiveCell.Value
        Workbooks("Timesheet").Sheets("ST").Range("A9").Offset(i * 9).Value = name
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

基本上,目标纸张中的单元格彼此间隔9行,因此第一个名称将位于单元格A9中,第二个名称将位于A18中,第三个位于A27中,依此类推。我确定我错过了一些非常简单的东西,但我没有从Excel得到任何反馈(没有错误信息)。时间表中的单元格是合并单元格,但我无法更改它们(由所有者锁定),但我认为这与它无关。

编辑:我添加了一行:OriginalValue = Workbooks("Timesheet").Sheets("ST").Range("A10").Offset((x - 2) * 9, 0).Value所以我可以看一下我的时间表中覆盖了哪些值,我注意到一些有趣的东西:OriginalValue只抓取 单元格的文本(A9),此后,对于每个单元格(A18,A27等),调试器指示OriginalValue =""即使这些单元格也包含名称。但是,当我打开另一个工作表并参考A9,A18等时,我会拉出名字。

编辑2 :我修改了测试行以读取Workbooks("Timesheet").Sheets("ST").Range("A" & ((x - 1) * 9)).Value = "Test" 更改所有目标单元格中​​的值。为什么VBA允许我分配"测试"到单元格值而不是其他工作表中的名称?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情。它将在不使用.Select.Activate

的情况下完成您要求的任务
Sub InitNames()
Dim i As Integer
Dim Wksht as Worksheet
i = 0

Set Wksht = Workbooks("Employee Data.xlsx").Sheets("Employees")
For i = 2 to Wksht.Range("A" & Wksht.Rows.Count).End(xlUp).Row
    Workbooks("Timesheet").Sheets("ST").Range("A9").Offset((i-2) * 9,0).Value = Wksht.Range("A" & i).Value
Next i
End Sub