你们怎么样? 我对在 Excel 上创建的内容有疑问。我制作的结构可以工作,但效率不高,因为制作需要几分钟,而且我需要复制它大约一百次。因此,我的目标是创建与我已经拥有的完全相同的输出,但采用更有效的方法来实现。所有的过程都非常简单,所以我想它有另一种方法来做到这一点。我将发布一些图片,以便你们可以更好地理解我在说什么。
我创建了这个结构:
所有三个按钮将始终位于一行合并单元格下方,并且单元格 L5 中的内容将始终放置在与合并单元格相同的行中,但位于右侧三列中。这样的事情总会发生。现在让我们解释一下每个按钮的作用:
按钮检查 >>> 此按钮将验证单元格 D5:I5 中的信息。该信息将通过条件格式进行验证。它将比较单元格 D5:I5 的值,如果与单元格 L5 的值匹配,则单元格 D5:I5 将被涂成绿色。如果D5:I5的值与L5的值不匹配,则会被涂成红色。上图正是我单击“检查”按钮后的最终输出。由于 D5:I5 和 L5 的值匹配,因此 D5:I5 将被涂成绿色。
删除按钮>>>它将删除D5:I5 拥有的所有信息。不仅如此,它还会删除 D5:I5 的所有条件格式,使其成为空的合并单元格。这是按下 按钮删除 时发生的情况的图像:
在此输入图片描述按钮粘贴>>>它将把单元格 L5 的内容粘贴到单元格 D5:I5 中。同样,如果单元格 D5:I5 具有先前的条件格式,它也会将其删除。所以,基本上,我们会有这个:
在此输入图片描述 按钮检查:
Application.ScreenUpdating = False
Range("D5:I5").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
Range("D5:I5").Select
Application.CutCopyMode = False
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:="=$L$5"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("A1").Select
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Range("L5").Select
ActiveCell.FormulaR1C1 = "Information here"
Range("D5:I5").Select
ActiveCell.FormulaR1C1 = "Information here"
Range("D5:I5").Select
Selection.FormatConditions.Delete
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A1").Select
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Range("D5:I5").Select
Selection.FormatConditions.Delete
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Selection.ClearContents
Range("E9").Select
Range("A1").Select
Application.ScreenUpdating = True
这几乎就是我一直在做的事情。但这种结构效率不高,因为我需要在工作表的不同部分将其复制数百次。
所以我的想法是:
由于这三个按钮始终位于合并单元格下方,因此我想创建一个通用结构来识别这些按钮在工作表中放置的位置。这意味着,每当将
按钮删除放入工作表中时,它都会自动识别必须删除并删除直接位于按钮删除上方的完全合并单元格的条件格式。 同样的事情也适用于
按钮粘贴:它将始终粘贴到合并单元格的正上方,即位于合并单元格左侧 3 列且位于合并单元格同一行的内容(在本例中,内容为是此处的信息,位于 L5 单元格)。 最后,同样的结构将与
button check一起使用,始终检查放置 button check 的确切合并单元格,以及直接放置在合并旁边 3 行的单元格内容细胞。 按照我做事的方式,这个结构效率不高,因为想象一下这样的场景:
在此输入图片描述我将不得不手动更改所有这些按钮,以便它与我在此处发布的代码的逻辑相匹配。现在想象一下必须做一百次,这是一件非常累人的事情。
希望我在解释中已经说清楚了,如果这篇文章太大而无法阅读,我很抱歉,但我尝试尽可能详细地解释,这样它就不会对我的内容产生任何疑问我正在尝试做。
希望你们能帮助我解决这个问题,如果我提出的解决方案有另一种替代解决方案,我很高兴听到。谢谢大家!!
Application.Caller
确定任何表单控制按钮的物理位置。例如,如果您将以下宏分配给电子表格上的每个按钮:
Sub Button_Click()
Dim btn As Shape
Set btn = ActiveSheet.Shapes(Application.Caller)
MsgBox "The button is located at: " & btn.TopLeftCell.Address
End Sub
该宏将返回单击按钮的地址。您可以使用此信息来确定单击的按钮的行和列,并在格式化代码中使用这些变量。