vba - VBA如何撤消?
问题描述
我需要有关撤消复制到工作表 2 的帮助。我的代码有效,但我不希望工作表“Sheet2”和“Output2”都有新的数据输出。我只希望“Output2”有新的数据输出。如何编写撤消函数或将“sheet2”数据复制到剪贴板?
撤消和剪贴板是我能想到的唯一选择,但我没有成功实施。
任何帮助表示赞赏!
我在“sheet2”中的数据是温度,它从-21度到-132.8度不等。
Sub ForEachTemp1()
For Each a In Worksheets("Sheet2").Range("A2:O21")
If a.Value <= 97 Then
a.Value = True
ElseIf a.Value >= 97 Then
a.Value = False
End If
Next a
Worksheets("Sheet2").Range("A2:O21").Copy Worksheets("Output2").Range("A2:O21")
For Each a In Worksheets("Sheet2").Range("A22:O42")
If a.Value >= 97 Then
a.Value = False
ElseIf a.Value <= 97 Then
a.Value = True
End If
Next a
Worksheets("Sheet2").Range("A22:O42").Copy Worksheets("Output2").Range("A22:O42")
For Each a In Worksheets("Sheet2").Range("A43:O63")
If a.Value <= -127 Then
a.Value = False
ElseIf a.Value >= -127 Then
a.Value = True
End If
Next a
Worksheets("Sheet2").Range("A43:O63").Copy Worksheets("Output2").Range("A43:O63")
End Sub
我希望工作表“Output2”上的当前输出(新数据输出)相同,但我不希望新数据输出也填充在“sheet2”上。
解决方案
您可以使用工作表公式创建 True/False 值数组,并且Evaluate
:
Sub ForEachTemp1()
Dim ws As Worksheet, wsOut As Worksheet
Set ws = Worksheets("Sheet2")
Set wsOut = Worksheets("Output2")
PutArray wsOut.Range("A2"), ws.Evaluate("A2:O21<=97")
PutArray wsOut.Range("A22"), ws.Evaluate("A22:O42<=97")
PutArray wsOut.Range("A43"), ws.Evaluate("A43:O63>=-127")
End Sub
'utility sub to place an array onto a worksheet
Sub PutArray(rng As Range, arr)
rng.Cells(1).Resize(UBound(arr, 1), UBound(arr, 2)).Value = arr
End Sub
Excel 足够聪明,可以知道公式何时是数组公式,并创建结果值的二维数组,您可以将其直接分配给输出表。
推荐阅读
- node.js - 与 Nestjs 断开连接(由于超时错误,insertMany)
- python - 使用 mark.parametrize 装饰器时如何使用补丁装饰器?
- angular - 为什么不读取客户数据?我该如何纠正这个问题?
- tensorflow - keras 中 csv 文件的自定义数据加载器
- javascript - 动态重新加载页面
- apache - 为什么在 apache 中的 conf- 之前加载 mods-?
- html - 如何仅使 Flex 列的文本的一部分居中,而另一部分左对齐?
- python - 我有问题无法连接到我的主题 kafka 消费者?
- reactjs - 图像未在 github 页面上呈现
- python - 预测多张图片并将预测保存在数组中