【发布时间】:2016-09-23 18:10:09
【问题描述】:
我正在尝试在不使用复制/粘贴功能的情况下“粘贴”范围值。我对 VBA 很陌生,不明白为什么我的代码不起作用。如果这是一种已经回答但我无法通过其他帖子解决问题的问题,我很抱歉。
我可以选择我希望从中复制和粘贴值的范围
name_task = [code].select
name_task_2 = [code].select
但我无法将值写入 name_task_2
name_task_2 = name_task.value
这行得通,对我来说,我所写的内容以某种方式相同只是更复杂,但由于它不起作用,因此显然不一样 :D
sht2.Range("C2:D12") = sht1.Range("A8:B18").value
Sub Time_Estimate()
Application.ScreenUpdating = False
Dim name_task As Variant
Dim name_task_2 As Variant
Dim R_count As Double
Dim C_count As Double
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Set sht1 = Sheet1 'Sheets("Tekla_2016")
name_task = sht1.Range("A8:B8", sht1.Range("A8").End(xlDown))
R_count = sht1.Range("A8:B8", sht1.Range("A8").End(xlDown)).Rows.Count
'Debug.Print name_task.Rows.Count
'Debug.Print name_task.Columns.Count
Debug.Print R_count
Set sht2 = Sheet2 'Sheets("Timeforbruk_2016 - UFERDIG")
name_task_2 = sht2.Range("C2:D2", sht2.Range("C2:D2").Offset(R_count - 1, 0))
'name_task_2 = name_task.value 'Why doesn't this work???
'sht2.Range("C2:D12") = sht1.Range("A8:B18").value 'This works but it's not dynamic
Application.ScreenUpdating = True
End Sub
编辑: 这段代码现在可以按我的意愿工作:
Sub Time_Estimate()
Application.ScreenUpdating = False
Dim name_task As Range
Dim name_task_2 As Range
Dim rng_sht1 As Range
Dim rng_sht2 As Range
Dim R_count As Double
Dim C_count As Double
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Set sht1 = Sheet1 'Sheets("Tekla_2016")
Set sht2 = Sheet2 'Sheets("Timeforbruk_2016 - UFERDIG")
Set name_task = sht1.Range("A8:B8", sht1.Range("A8").End(xlDown))
R_count = sht1.Range("A8:B8", sht1.Range("A8").End(xlDown)).Rows.Count
Set name_task_2 = sht2.Range("C2:D2", sht2.Range("C2:D2").Offset(R_count - 1, 0))
name_task_2 = name_task.value
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
那么究竟是什么不起作用?您发布的子代码还是只是代码行的第一行?错误消息也很重要。
-
name_task = [code].select不起作用,但name_task = [code]应该可以工作,如果[code]返回一个范围对象。就像在您的其他示例中一样:sht2.Range("C2:D12") = sht1.Range("A8:B18").value有效,但sht2.Range("C2:D12").Select = sht1.Range("A8:B18").value无效 - 这没有意义。 -
如果您计算行之类的东西,则不需要
Double。最好使用整数类型。在 VBA 中最好使用Long(4 个字节),因为Integer只有 2 个字节,因此上限为 32767