【发布时间】:2022-03-27 02:54:22
【问题描述】:
对于我使用的每张纸,我都必须应用特定的设计。
- 颜色;
- 边框颜色;
- 字体颜色;
- 对齐;
很遗憾,我不能使用 TABLE DESIGN...
我的解决方案是......
- 当 Row = Even 时,内部颜色类型 A
- 当 Row = ODD 时,内部颜色类型为 B
- 当 ROW = 1 (HEADER) 时,颜色类型为 C
问题
当范围从第一行开始时,此宏运行正常。
但并非总是选定的范围会从第一行开始,对吧?
这就是问题...
当所选范围从第 2 行开始时,宏需要像这样工作:
- 标题 = TYPE C = 第 2 行(范围的第一行)
- 类型 A = 第 3 行(范围的奇数行)
- 类型 B = 第 4 行(范围的偶数行)
当所选范围从第 3 行开始时,宏需要像这样工作:
- 标题 = TYPE C = 第 3 行(范围的第一行)
- 类型 A = 第 4 行(范围的奇数行)
- 类型 B = 第 5 行(范围的偶数行)
如果有人可以帮助我创建解决方案?
用户VBasic2008的解决方案
如果您想使用您的语言:
-
PAR表示EVEN -
ÍMPAR表示ODD -
LIN表示ROW
Sub teal_table()
Const evenFormula As String = "=PAR(LIN())=LIN()"
Const oddFormula As String = "=ÍMPAR(LIN())=LIN()"
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
' Set aligment and border to Selected Range
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Borders.LineStyle = xlContinuous
.Borders.Color = RGB(100, 100, 100)
.Borders.TintAndShade = 0
.Borders.Weight = xlThin
Dim oFormula As String, eFormula As String
If .Row Mod 2 = 0 Then
eFormula = evenFormula
oFormula = oddFormula
Else
eFormula = oddFormula
oFormula = evenFormula
End If
.FormatConditions.Delete
'Apply colors for ROW = EVEN
.FormatConditions.Add Type:=xlExpression, Formula1:=eFormula
With .FormatConditions(.FormatConditions.Count)
.SetFirstPriority
.Interior.Color = RGB(255, 255, 255)
.Font.Color = RGB(0, 0, 0)
.StopIfTrue = False
End With
' Apply colors for ROW = ODD
.FormatConditions.Add Type:=xlExpression, Formula1:=oFormula
With .FormatConditions(.FormatConditions.Count)
.SetFirstPriority
.Interior.Color = RGB(245, 245, 245)
.Font.Color = RGB(0, 0, 0)
.StopIfTrue = False
End With
' Apply colors to HEADER
.FormatConditions.Add Type:=xlExpression, Formula1:="=LIN()=" & .Row
With .FormatConditions(.FormatConditions.Count)
.SetFirstPriority
.Interior.Color = RGB(0, 128, 128)
.Font.Color = RGB(255, 255, 255)
.Font.Bold = True
.StopIfTrue = False
End With
End With
End Sub
【问题讨论】:
-
检测第一行(标题)的位置。那么您的条件公式可能取决于
ROW()-HEADERROW的值。如果值为偶数,则类型 A,如果值为奇数,则类型 B(或反向,您的选择) -
只需切换一个布尔值
boolean = false即可开始循环boolean = not boolean。我相信这应该有效。现在你有了你的偶数/奇数计数器,只是根据布尔值格式化。
标签: excel vba conditional-formatting