我是Excel和VBA编程的新手。虽然我在visual basic和PHP方面都有经验。所以基础知识就在那里。
哇,这很难以一种好的方式解释...... 这可能不是解决这个问题的最佳方法,但这就是我现在解决的问题。共3张。 sheet1 - 其他工作表的摘要。 Sheet2,一些数据和用户输入。 Sheet3 - 数据。
用户输入sheet2中钢筋的长度。用户还会添加其他值,以增加钢筋的重量。在表1中,计算了负载的摘要。其中一个单元格仅显示栏上的负载。 Sheet3具有最大加载信息pr。钢筋长度。我希望sheet1中的摘要单元格为红色,该值大于sheet3中的最大加载量。
因此,每当sheet1中的单元格因sheet2中的用户输入而发生更改时,我都希望运行一个宏。宏搜索并交叉检查值并更改sheet1中单元格的颜色。
解决这个问题的好方法是什么?
为了使其更复杂,用户可以从4个具有不同装载数据的单独钢筋中进行选择。
设置我在测试表上完成的测试,但由于某种原因我无法运行宏。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("E4")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If Range("E4").Value > Range("E14").Value Then
Range("E4").Interior.ColorIndex = 37
End If
End If
End Sub
答案 0 :(得分:2)
您正在比较同一工作表中的单元格值。您需要提及要比较的工作表单元格。此外,您需要设置激活工作表(摘要)的代码并更改工作表(摘要)单元格值。
工作表已激活:
Private Sub Worksheet_Activate()
Dim MyWorkbook As Workbook
Dim MySummary As Worksheet
Dim MyData As Worksheet
Set MyWorkbook = ActiveWorkbook
Set MySummary = MyWorkbook.Sheets("Summary")
Set MyData = MyWorkbook.Sheets("Data")
If MySummary.Range("E4").Value > MyData.Range("E14").Value Then
MySummary.Range("E4").Interior.ColorIndex = 37
Else
MySummary.Range("E4").Interior.ColorIndex = 0
End If
End Sub
工作表值更改:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyWorkbook As Workbook
Dim MySummary As Worksheet
Dim MyData As Worksheet
Set MyWorkbook = ActiveWorkbook
Set MySummary = MyWorkbook.Sheets("Summary")
Set MyData = MyWorkbook.Sheets("Data")
If MySummary.Range("E4").Value > MyData.Range("E14").Value Then
MySummary.Range("E4").Interior.ColorIndex = 37
Else
MySummary.Range("E4").Interior.ColorIndex = 0
End If
End Sub