excel VBA来删除公式,并在每行的特定单元格不为空时保留值

lyr7nygr  于 2023-02-14  发布在  其他
关注(0)|答案(2)|浏览(473)

我对Excel公式有基本的了解,但对VBA没有经验。我正在创建一个基本的电子表格来跟踪人们的出勤情况。这个电子表格将由比我更不了解的人每天完成。
列B是从另一个工作表中的DB表验证的数据。列D、E、F、G使用XLOOKUP根据列B上的名称从同一个DB表中提取数据。
问题:如果DB表中的某些内容发生了变化,比如一个人的帐号,那么这个人过去的每次出勤都会被更新。
Example
我需要一种简单的方法来“锁定”已经填充的单元格中的数据,尽管它们应该接受手动编辑。
到目前为止,我试着在工作表的某个地方放一个按钮,删除所有公式,但保留单元格的值。我用谷歌搜索了一下,得到了这个:

Sub Remove_Formulas_from_Selected_Range()

Dim Rng As Range

Set Rng = Selection

Rng.Copy

Rng.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Application.CutCopyMode = False

End Sub

但我不知道如何调整按钮,使它检查表的每一行,如果该行的B列不是空的(这意味着该行是用一个人的数据填充),只有然后删除该行的公式,并保留值。

xmd2e60i

xmd2e60i1#

您的文件必须是.xlsm文件。添加一个ActiveX按钮。双击它。在创建的button_click()sub中添加一行:call doTheJob -粘贴以下代码后:

Private Sub doTheJob()
   Dim rng As Range, rw As Long, c As Long
   If TypeName(Selection) = "Range" Then
      If MsgBox("Change formulas with Values in selected range?", vbDefaultButton2 + vbExclamation + vbYesNo) = vbYes Then
         Set rng = Selection
         rw = rng.Rows.CountLarge
         Application.ScreenUpdating = False
         For c = 1 To rw
            If Trim(rng.Cells(c, 2).Value) <> "" Then
               rng.Rows(c).Copy
               rng.Rows(c).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
            End If
         Next
         Application.CutCopyMode = False
      End If
   End If
End Sub

在单击按钮之前,您必须选择您感兴趣的范围,以将公式替换为值。

d7v8vwbk

d7v8vwbk2#

Private Sub doTheJob()
   Dim rng As Range, rw As Long, c As Long
    If MsgBox("Change formulas with Values in selected range?", vbDefaultButton2 + vbExclamation + vbYesNo) = vbYes Then
     Set rng = Me.ListObjects("NameOfTable").Range
     rw = rng.Rows.CountLarge
     Application.ScreenUpdating = False
     For c = 1 To rw
        If Trim(rng.Cells(c, 2).Value) <> "" Then
           rng.Rows(c).Copy
           rng.Rows(c).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
        End If
     Next
     Application.CutCopyMode = False
    End If
End Sub

当范围是表时使用此代码。将“NameOfTable”修改为表的真实的名称。

相关问题