我使用了一堆其他代码构建了这段代码,我自己并没有很好地利用VBA。
我有一个工作簿是我的,它包含遍布各处的数据,例如:名称是L2,帐号是C3等等。
此代码是将特定行中的所有数据发送到我的其他同事使用的另一本工作簿,以及该工作簿的最后一行。
Sub Save_To_Register()
Dim count As Integer
Dim r1 As Range, r2 As Range,
'Officer Name
Set r1 = Range("L2")
Set r2 = Sheets("Sheet1").Range("A100")
r2.Value = r1.Value
'Account Number
Set r1 = Range("C3")
Set r2 = Sheets("Sheet1").Range("C100")
r2.Value = r1.Value
'Account Address
Set r1 = Range("C4")
Set r2 = Sheets("Sheet1").Range("D100")
r2.Value = r1.Value
'Applicant of Take Over
Set r1 = Range("L3")
Set r2 = Sheets("Sheet1").Range("E100")
r2.Value = r1.Value
'Applicant of Take Over
Set r1 = Range("C3")
Set r2 = Sheets("Sheet1").Range("C100")
r2.Value = r1.Value
Application.Workbooks("PM-#8873088-v4-SUB-METERING_REGISTER.XLS").Activate
Application.Wait (Now + TimeValue("0:00:1"))
ThisWorkbook.Sheets("Sheet1").Range("A100:K100").Copy
ActiveSheet.Select
ActiveSheet.Range("A1").Select
count = 1
Do While Not (ActiveCell.Value = None)
ActiveCell.Offset(1, 0).Range("A1:K1").Select
count = count + 1
Loop
ActiveSheet.Range("A" & count).PasteSpecial
End Sub
这不是一个非常有效的代码,我基本上反映了单元格L2,C3,C4& L3到单行A100:K100。包含在该行中的是一堆= Today()公式。
一切都运转正常,但效果不尽如人意。当我使用此VBA时,它会将所有数据完全复制到另一个工作簿但它会更新以前条目中的所有日期。
我认为使用pastespecial只会传输值,但似乎所有复制到新工作簿(子计量寄存器)的日期单元格都是= Today(),而不仅仅是实际值。
是否有人建议如何确保将日期值作为值而不是作为其公式进行复制,或者如何在新工作簿中停止更新每一天的值?
谢谢
答案 0 :(得分:1)
粘贴后需要xlPasteValues
。
ActiveSheet.Range("A" & count).PasteSpecial xlPasteValues
修改强> 对这个答案的批评:我发现我的帖子不鼓励一种不涉及复制/粘贴的更有效的方法 - 但是当一个男人(或女人)只有一个单词远离a解决方案...我只是发布它,不要问问题! :)
答案 1 :(得分:0)
使用Cells(row, column).Value
语法。
关于效率的更多提示。尝试尽可能少地激活和选择对象。在您的代码中,它足以打开其他工作簿,在2个Workbook
类型的参考变量中存储对工作簿的引用,例如:
Dim myWorkbook As Workbook
Set myWorkbook = ThisWorkbook
然后你可以使用这个语法myWorkbook.Sheets(1).Cells(1, 1).Value
(只是例子)。然后,在代码中,当您不想键入所有工作簿名称时,可以使用With
块。