【问题标题】:Convert selected cells formula to value across Selected Sheets将选定单元格公式转换为选定工作表中的值
【发布时间】:2018-11-20 16:32:12
【问题描述】:

我正在使用下面的代码将公式转换为单元格,这在单个工作表中可以正常工作。但问题是当我需要将不同工作表中的所有选定单元格转换为它们的值时,这段代码不会这样做。

这就是我在 Excel 中选择单元格的方式: 首先我选择一个工作表中的单元格,然后我转到选项卡右键单击并选择特定工作表,在 Excel 中选择每个选定工作表中的相应单元格。

那么关于如何更改此代码以使其在不同工作表中工作的任何提示?

Sub formulaToValues()
    If Selection.Cells.Count = 1 Then
        Selection.Value = Selection.Value
        Selection.Cells.Interior.ColorIndex = 0
        Selection.Cells.Font.Color = vbBlack
    Else
        For Each cel In Selection.Cells
            cel.Value = cel.Value
            Selection.Cells.Interior.ColorIndex = 0
            Selection.Cells.Font.Color = vbBlack
        Next cel
    End If
End Sub

【问题讨论】:

  • 单元格是否总是在每张纸上的相同位置?
  • 工作簿中的每个工作表都需要格式化还是只需要格式化那些?
  • @K.Dᴀᴠɪs 是的,它们总是在同一个位置
  • @rohrl77 我只希望那些被选中的人
  • 感谢您澄清您想要选定的工作表 - 我更新了您的问题和答案。

标签: excel vba selection


【解决方案1】:

您应该能够只获取所选内容的地址,然后将其添加到每个工作表的范围中

Sub formulaToValues()

    Dim celAddr As String
    celAddr = Selection.Address

    Dim ws As Worksheet
    For Each ws In ActiveWindow.SelectedSheets
        With ws.Range(celAddr)
            .Value = .Value
            .Interior.ColorIndex = 0
            .Font.Color = vbBlack
        End With
    Next ws

End Sub

【讨论】:

  • .value = .value 不是必需的吗?
  • 不,这与说Apple = Apple 是一样的——只是因为起始范围与目的地范围相同..---- 从头开始​​,我看到他使用的是公式 - 感谢您指出这一点,即将进行编辑。
  • @K.Dᴀᴠɪs 如果工作簿中有不需要更改的工作表,那么这不起作用。我的回答也没有。
  • @rohrl77 这个问题确实说明了“并选择所有工作表,在excel中选择每个工作表中的相应单元格”,所以我认为我们都是正确的。并且标题:“...在所有工作表中”
  • @K.Dᴀᴠɪs 哦!好的。我更新了我的答案,只选择那些被选中的……这很有趣。我将只包括两个版本。
【解决方案2】:

您正在尝试写入 3D 单元格集合。我以前从未见过的一个有趣的问题。我试了一下。

下面的代码对我有用。我只是添加了一个额外的循环来搜索任何其他工作表。注意:最好总是声明你的变量。

Answer1:循环遍历工作簿中的每个工作表

Sub formulaToValues()
Dim cel As Range
Dim ws As Worksheet
If Selection.Cells.Count = 1 Then
    Selection.Value = Selection.Value
    Selection.Cells.Interior.ColorIndex = 0
    Selection.Cells.Font.Color = vbBlack
Else
    For Each ws In ThisWorkbook.Worksheets
        For Each cel In Selection.Cells
            ws.Range(cel.Address).Value = 2 'cel.Value
            Selection.Cells.Interior.ColorIndex = 0
            Selection.Cells.Font.Color = vbBlack
        Next cel
    Next ws
End If

End Sub

Answer2:有了这个,它只会通过选定的工作表

Sub formulaToValues()
Dim cel As Range
Dim ws As Worksheet
If Selection.Cells.Count = 1 Then
    Selection.Value = Selection.Value
    Selection.Cells.Interior.ColorIndex = 0
    Selection.Cells.Font.Color = vbBlack
Else
    For Each ws In ThisWorkbook.Windows(1).SelectedSheets
        For Each cel In Selection.Cells
            ws.Range(cel.Address).Value = 2 'cel.Value
            Selection.Cells.Interior.ColorIndex = 0
            Selection.Cells.Font.Color = vbBlack
        Next cel
    Next ws
End If

End Sub

【讨论】:

  • 我实际上也尝试过遍历工作簿,但我太新了,无法让它工作,猜想我的有一些错误。就我而言,这为我完成了工作。谢谢你。
  • 嗨 CKCCN,很高兴为您提供帮助。这是一个有趣的问题。一个我以前没想过的。
【解决方案3】:

非常感谢大家,这个问题很快就得到了答复。 我将我的宏放在个人中,所以我以这个结束了

Sub formulaToValues3()
Dim cel As Range
Dim ws As Worksheet
If Selection.Cells.Count = 1 Then
Selection.Value = Selection.Value
Selection.Cells.Interior.ColorIndex = 0
Selection.Cells.Font.Color = vbBlack
Else
For Each ws In ActiveWorkbook.Windows(1).SelectedSheets
    For Each cel In Selection.Cells
        ws.Range(cel.Address).Value = ws.Range(cel.Address).Value 'cel.Value
        Selection.Cells.Interior.ColorIndex = 0
        Selection.Cells.Font.Color = vbBlack
    Next cel
Next ws
End If

End Sub

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 2022-07-29
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多