0

我有一个自定义函数可以检测单元格是否为粗体

Function isBold(cellBold)
If cellBold.Font.Bold = True Then
    isBold = 1
ElseIf cellBold.Font.Bold = False Then
    isBold = 0
Else
    isBold = 0
End If

End Function

如果参考单元格为粗体,则在单元格中放入 1,如果不是粗体,则在单元格中放入 0 这很有效,并且第一次使用,但如果我将参考单元格设为粗体,则数字保持为 0。自动计算已开启,这是唯一的方法再次计算的函数是重新输入函数

4

2 回答 2

3

将 Application.Volatile 添加到函数顶部将使其在触发工作簿更改事件时自动更新。

Function isBold(cellBold)
    Application.Volatile
    If cellBold.Font.Bold = True Then
        isBold = 1
    ElseIf cellBold.Font.Bold = False Then
        isBold = 0
    Else
        isBold = 0
    End If
End Function

如果您只是粗体显示结果,这对您没有帮助,但您可以将事件添加到您正在处理的工作表中

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Calculate
End Sub

如果这两件事都到位,那么每次您选择一个可能对您来说效果很好的不同单元格时,您的公式都会更新。但是,我建议谨慎使用此方法,因为如果您有大量公式,这可能会减慢速度。

-编辑- 这应该可以解决复制粘贴问题。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim col As Range

    For Each col In ActiveSheet.UsedRange.Columns
        col.Calculate
    Next
End Sub
于 2013-06-13T13:51:27.413 回答
0

好的,所以我会第一个承认这不是一个理想的解决方案,而且非常hackish。但我认为它会解决你的解决方案。

将 volatile 行添加到您的代码后:

Function isBold(cellBold)

Application.Volatile True

If cellBold.Font.Bold = True Then
    isBold = 1
ElseIf cellBold.Font.Bold = False Then
    isBold = 0
Else
    isBold = 0
End If

End Function

首先将您的 Workbook_Open 更改为:

Private Sub Workbook_Open()
    Sheets("Sheet1").rngLastCell = Range("A1").Address
    Sheets("Sheet1").fntLastCell = Range("A1").Font.Bold
End Sub

然后在您正在使用的工作表上(在我的示例Sheet1中)将其添加到 Worksheet 函数中:

Option Explicit
Public fntLastCell As Boolean
Public rngLastCell As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)



If Sheets("Sheet1").Range(rngLastCell).Font.Bold <> fntLastCell Then
    Calculate
End If

    Sheets("Sheet1").rngLastCell = Target.Address
    Sheets("Sheet1").fntLastCell = Target.Font.Bold

End Sub

现在要让它工作,您必须保存然后关闭,然后重新打开您的工作表。

每次选择一个新单元格时,这通过设置 2 个全局变量来工作。

一个布尔变量,表示最后一个单元格选择的天气以前是否为粗体。还有一个引用同一个单元格的字符串变量。因此,您现在可以检查您退出(进入时)单元格的粗体状态与您刚刚存在的单元格的当前粗体状态,如果有更改,它将计算工作簿。否则什么都不会发生。

希望这有效并有所帮助,

干杯

于 2013-06-13T15:54:00.930 回答