希望你身体健康。
我有一个数据记录文件来记录PO和付款。我正在使用具有许多不同公式的excel文件来最大化操作的自动化。但它越来越重,不可能再用它了。
所以我生成了删除所有公式并将其放在第一行的想法。现在我希望excel在每次运行命令时从第一行复制那些公式,并在必需的行上过去更新记录,并立即转换为值。这将使所有数据保持自动化并缩短处理时间。
我在这里使用的脚本正在运行,但有一点我必须使用find功能。它应该在所选表格的B列中找到所需的值,并选择作为结果找到的单元格。选择后,它将偏移到所需的列以继续进一步的步骤。
Sub find()
Sample Sheets("PO").Range("a1"), Sheets("PO").Range("b:b")
End Sub
完整的脚本是
Sub Macro4()
'
' Update the PO/WO detail with the effect of new payment entry and alsoupdate the corresponding in payment entry
'
' Keyboard Shortcut: Ctrl+j
'
ActiveCell.Offset(0, -16).Range("A1").Select
ActiveCell.FormulaR1C1 = "*"
ActiveCell.Offset(0, 7).Range("A1").Select
Selection.Copy
ActiveSheet.Previous.Select
Range("A1").Select
ActiveSheet.Paste
End Sub
Sub find()
Sample Sheets("PO").Range("a1"), Sheets("PO").Range("b:b")
End Sub
Sub Sample(FirstRange As Range, ListRange As Range)
Dim aCell As Range, bCell As Range, oRange As Range
Set oRange = ListRange.find(what:=FirstRange.Value, LookIn:=xlValues, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
ActiveCell.Offset(0, 7).Range("A1").Select
ActiveCell.Offset(0, 10).Range("A1").Select
ActiveCell.FormulaR1C1 = "*"
Selection.End(xlUp).Select
Selection.End(xlToLeft).Select
ActiveCell.Offset(0, -1).Range("A1:B1").Select
ActiveCell.Activate
Selection.Copy
ActiveCell.Offset(0, 10).Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, -10).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 10).Range("A1").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveCell.Offset(0, -10).Range("A1").Select
ActiveSheet.Next.Select
Range("A1").Select
ActiveCell.Offset(0, 16).Range("A1:B1").Select
Application.CutCopyMode = False
Selection.Copy
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(0, 16).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, -16).Range("A1").Select
Application.CutCopyMode = False
Selection.ClearContents
ActiveCell.Offset(0, 17).Range("A1").Select
End Sub
请建议任何决议,
提前致谢
此致
答案 0 :(得分:0)
嗯,如果我理解你的问题,你只需要一个选择陈述。
Set oRange = ListRange.find(what:=FirstRange.Value, LookIn:=xlValues, _
lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False)
oRange.Select
虽然您不会在代码中的任何其他地方使用oRange变量,但您可能只是摆脱它。你写这段代码了吗?你懂这个了吗?这绝不是一个干净,优化,良好,可读或快速的代码...但如果它适合你,那就不用了。