excel VBA 当有公式的单元格录入内容后,自动将内容粘贴为数值

A列使用了公式,当G列录入内同后,A列会自动生成内容如图2。我想通过VBA实现,当A列自动录入内容后,能够将公式生成的结果,自动转换为“值”(这个步骤可以通过录制一个“粘贴为值”的宏实现),需要加一个,A列由空值变为非空的判断,并且在转换为值前,弹出一个窗体,让我选择是否将A列内容转换为值,选是继续,选否则退出程序。另外,比如我这次是在G87 G88录入内容,则A87 A88会自动生成数据,此时只允许A87 A88自动转换成值,其他A列其他单元格则不允许进行此操作
请大家帮帮忙这个要怎么做?
图1

图2

第1个回答  2015-07-02
可利用工作表事件,复制如下代码在所要实现目标的sheet中。

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Copy
    Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

追问

试了下,这个代码没有任何作用……

追答

保证正确使用了吗?

粘贴位置在worksheet事件栏。

追问

是的,我截个图给你看下

A列仍是公式结果,只是G列是copy状态,其他没有任何改变

第2个回答  2015-07-02

将以下代码,粘贴到该表的代码窗格中(注意!!!)

Private Sub Worksheet_Change(ByVal Target As Range)
application.EnableEvents=False
if target.column=7 then
    if target.row >5 then
        if target.count=1 then
             if target.value<>"" then
                 cells(target.row,1)=cells(target.row,1).value
             end if
        end if
    end if
end if
application.EnableEvents=true
End Sub

追问

谢谢,刚才弄错了,不过可以加一个提示让我选择是否粘贴为值的功能吗?这个没有提示,就直接转换为值了

追答Private Sub Worksheet_Change(ByVal Target As Range)
application.EnableEvents=False
if target.column=7 then
    if target.row >5 then
        if target.count=1 then
             if target.value<>"" then
                 if msgbox("是否将公式转换为值?",vbyesno,"转换确认")=6 then
                 cells(target.row,1)=cells(target.row,1).value
                 end if
             end if
        end if
    end if
end if
application.EnableEvents=true
End Sub

本回答被提问者采纳
相似回答