2017-05-09 99 views
0

输出我希望是类似于此页面:http://sub-atomic.com/~moses/acadcolors.html,但在Excel中。Excel单元格颜色由AutoCAD颜色的内容

我们要做的是将AutoCAD颜色与单元格相关联。我希望能够在单元格中输入颜色编号(比如颜色10,它是红色的),并让单元格变为该颜色。我不知道如何在没有宏观的情况下做到这一点。我认为这将是某种类型的VBA。

我从上面的网站的RGB等价物 - 我假设我可以拉一些类型的查找。

我意识到这可以用条件格式的一个特别讨厌的位来完成,但我真的更喜欢一些更简化的东西。

帮助?

编辑: UGP提供了一些非常好的代码,完全符合我的需要。这是我使用的最终代码(针对我的表命名和一些附加功能进行了调整)。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Set KeyCells = Range(Cells(1, 6), Cells(1000, 6)) 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
    Is Nothing Then 

    CellChanged = Target.Address 'Cell that changed 
    If IsNumeric(Worksheets("Master").Range(CellChanged).Value) Then 
     If Worksheets("Master").Range(CellChanged).Value = 0 Then 
     Worksheets("Master").Range(CellChanged).Interior.ColorIndex = xlNone 
     Worksheets("Master").Range(CellChanged).Font.Color = vbBlack 
     Else 
     Worksheets("Master").Range(CellChanged).Interior.Color = 
     Color(Worksheets("Master").Range(CellChanged).Value) 
     Worksheets("Master").Range(CellChanged).Font.Color = 
     textColor(Worksheets("Master").Range(CellChanged).Value) 
     End If 
    End If 

    End If 
End Sub 

Function Color(ByRef ID As Integer) As Long 
    Dim R, G, B As Integer 
    For i = 3 To 257 
    If ID = Worksheets("Colors").Cells(i, 1).Value Then 
     R = Worksheets("Colors").Cells(i, 2).Value 
     G = Worksheets("Colors").Cells(i, 3).Value 
     B = Worksheets("Colors").Cells(i, 4).Value 
     Color = RGB(R, G, B) 
     Exit For 
    End If 
    Next i 
End Function 

Function textColor(ByRef ID As Integer) As Long 
    If ID <= 9 Then 
    textColor = vbBlack 
    Else 
    If ID Mod 10 >= 4 Then 
     textColor = vbWhite 
    Else 
     textColor = vbBlack 
    End If 
    End If 
End Function 

回答

0

将在Sheet该代码通过打开与ALT编辑+ F11:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 

    Set KeyCells = Range(Cells(1, 1), Cells(1000, 1000)) 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
      Is Nothing Then 

     CellChanged = Target.Address 'Cell that changed 
     If IsNumeric(Worksheets("Sheet1").Range(CellChanged).Value) Then 
     Worksheets("Sheet1").Range(CellChanged).Interior.Color = Color(Worksheets("Sheet1").Range(CellChanged).Value) 
     End If 
    End If 
End Sub 

Function Color(ByRef ID As Integer) As Long 
Dim R, G, B As Integer 
    For i = 2 To 256 
     If ID = Worksheets("Sheet2").Cells(i, 4).Value Then 
      R = Worksheets("Sheet2").Cells(i, 5).Value 
      G = Worksheets("Sheet2").Cells(i, 6).Value 
      B = Worksheets("Sheet2").Cells(i, 7).Value 
      Color = RGB(R, G, B) 
      Exit For 
     End If 
    Next i 
End Function 

它会从细胞(1,1)检查用户输入单元(1000,1000),然后它抓住了颜色从Sheet2的地方,我把你这个样子(复制和粘贴表)链接AutoCAD的表:

enter image description here

+0

谢谢!这非常有帮助。我在几节中添加了处理文本颜色的方法,但是这种方式完全按照预期工作。空单元也有一个小小的缺陷 - 一个简单的如果/然后阻止它变黑。 –

+0

您能否建议编辑,以便每个人都可以看到更改。谢谢! – UGP

+0

这可能是一个很好的电话。在这个网站上接受的方法是什么? –