Excel 用于大型选择的VBA语法
我有一个表,每天定期向其中添加数据。有时需要一个新的数据行,所以我插入一个新行。然后,我在表上使用VLOOKUPS插入列的数据 然而,当我为整列携带我的VLOOKUP公式时,每个单元格都携带与原始公式相同的格式 我必须选择每一行,跳过一行,然后选择我想要的格式。我决定编写一个宏,选择表中的所有偶数行,并设置这些行的格式(所有奇数行都以蓝色高亮显示),而不是选择每一行,然后将格式更改为无高亮显示或高亮显示蓝色 既然我有这么大的行集合,我如何保持我的VBA代码,使它适合可读的格式,而不是一个长长的水平列表 请查看我的代码和下面的错误:Excel 用于大型选择的VBA语法,excel,vba,Excel,Vba,我有一个表,每天定期向其中添加数据。有时需要一个新的数据行,所以我插入一个新行。然后,我在表上使用VLOOKUPS插入列的数据 然而,当我为整列携带我的VLOOKUP公式时,每个单元格都携带与原始公式相同的格式 我必须选择每一行,跳过一行,然后选择我想要的格式。我决定编写一个宏,选择表中的所有偶数行,并设置这些行的格式(所有奇数行都以蓝色高亮显示),而不是选择每一行,然后将格式更改为无高亮显示或高亮显示蓝色 既然我有这么大的行集合,我如何保持我的VBA代码,使它适合可读的格式,而不是一个长长的水
Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28, _
E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40, _
E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58, _
E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78, _
E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
ERROR: Syntax Error
像这样的东西应该适合你:
Sub tgr()
'Change these as necessary
Const StartRow As Long = 12
Const FinalRow As Long = 92
Const RangeCols As String = "E:W"
Const RowStep As Long = 2
Dim ws As Worksheet
Dim rFormula As Range
Dim i As Long
Set ws = ActiveWorkbook.ActiveSheet
Set rFormula = Intersect(ws.Columns(RangeCols), ws.Rows(StartRow))
For i = StartRow + RowStep To FinalRow Step RowStep
Set rFormula = Union(rFormula, Intersect(ws.Columns("E:W"), ws.Rows(i)))
Next i
'Do something with your created range
rFormula.Formula = "=""MyFormulaHere"""
End Sub
像这样的东西应该适合你:
Sub tgr()
'Change these as necessary
Const StartRow As Long = 12
Const FinalRow As Long = 92
Const RangeCols As String = "E:W"
Const RowStep As Long = 2
Dim ws As Worksheet
Dim rFormula As Range
Dim i As Long
Set ws = ActiveWorkbook.ActiveSheet
Set rFormula = Intersect(ws.Columns(RangeCols), ws.Rows(StartRow))
For i = StartRow + RowStep To FinalRow Step RowStep
Set rFormula = Union(rFormula, Intersect(ws.Columns("E:W"), ws.Rows(i)))
Next i
'Do something with your created range
rFormula.Formula = "=""MyFormulaHere"""
End Sub
为了尽可能接近你原来的帖子:合并范围怎么样
Union(Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
"E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
"E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58"), _
Range("E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
"E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92")).Select
旁注:
OP中的版本以一个“
结尾,虚线必须至少反映必须通过&
连接的完整字符串部分,并且必须注意前面提到的255个字符限制@BigBen。另一种方法是将范围部分输入多个单元格并连接它们
考虑避免使用
。选择,因为在大多数情况下它是不需要的,并且可以直接处理。只是为了尽可能接近您的原始帖子:如何组合范围
Union(Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
"E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
"E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58"), _
Range("E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
"E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92")).Select
旁注:
OP中的版本以一个“
结尾,虚线必须至少反映必须通过&
连接的完整字符串部分,并且必须注意前面提到的255个字符限制@BigBen。另一种方法是将范围部分输入到多个单元格中并连接它们
考虑避免使用。选择,因为在大多数情况下它是不需要的,可以直接解决。不太清楚您试图从该代码中实现什么。。。为这些范围创建公式,或设置表格格式。。。可能有助于澄清您的问题
同时,看看这是否有帮助:
Sub-loopnsub()
将ws设置为工作表:设置ws=ActiveWorkbook.Sheets(“Sheet1”)
长时变暗lRow:lRow=ws.Cells(Rows.Count,“E”).End(xlUp).Row
变暗,变长
对于R=12至lRow步骤2
使用ws.Range(ws.Cells(R,“E”)、ws.Cells(R,“W”))
.Interior=65535'在此处设置背景颜色
.Font.Color=-16776961'在此处设置字体颜色
“等等,等等,等等
以
下一个R
端接头
不太清楚您试图从该代码中获得什么。。。为这些范围创建公式,或设置表格格式。。。可能有助于澄清您的问题
同时,看看这是否有帮助:
Sub-loopnsub()
将ws设置为工作表:设置ws=ActiveWorkbook.Sheets(“Sheet1”)
长时变暗lRow:lRow=ws.Cells(Rows.Count,“E”).End(xlUp).Row
变暗,变长
对于R=12至lRow步骤2
使用ws.Range(ws.Cells(R,“E”)、ws.Cells(R,“W”))
.Interior=65535'在此处设置背景颜色
.Font.Color=-16776961'在此处设置字体颜色
“等等,等等,等等
以
下一个R
端接头
每一行都需要以一个“
开头,在下划线之前需要一个”&
来连接这样的大字符串。但是,我认为这仍然不起作用,因为您可以定义一个很长的范围地址,因为您可以将一些地址传递到范围
,并且您的构造超出了此限制
请注意,您实际上可以构建超出此限制的范围(例如,使用联合
),但如果您随后根据上述问题查询该范围的地址
,它将被自动截断
Dim addr As String
addr = "E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
"E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
"E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58," & _
"E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
"E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92"
Debug.Print Len(addr) '### This will print 335, versus the limit of 255
因此,即使您正确地构造了地址(如上所述),您仍然无法使用它来定义范围
最终,这可能应该通过Union
或逐步迭代来处理。但是不清楚您需要如何处理这些范围。每一行都需要以一个“
开头,在下划线之前需要一个”&
来连接这样的大字符串。但是,我认为这仍然不起作用,因为您可以定义一个很长的范围地址,因为您可以将一些地址传递到范围
,并且您的构造超出了此限制
请注意,您实际上可以构建超出此限制的范围(例如,使用联合
),但如果您随后根据上述问题查询该范围的地址
,它将被自动截断
Dim addr As String
addr = "E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
"E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
"E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58," & _
"E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
"E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92"
Debug.Print Len(addr) '### This will print 335, versus the limit of 255
因此,即使您正确地构造了地址(如上所述),您仍然无法使用它来定义范围
最终,这可能应该通过Union
或逐步迭代来处理。但是不清楚您需要如何处理这些范围。每一行都需要以一个“
开头,在下划线之前需要一个”&
来连接这样的大字符串。但是,我认为这仍然不起作用。这不起作用-范围引用不能超过255个字符。可以对所需的行/列使用Intersect
。或者如果有一个模式,可以循环行。不要选择,只使用循环。或者实际使用一个内置的Excel表格并在那里应用格式。您可以交替使用颜色,无需VBA格式化。内置表格应允许附加列。。。您试过了吗?使用公式化的条件格式如何?每一行都需要以一个“
开头,在下划线之前需要一个”&
来连接这样的大字符串。但是,我认为这仍然不起作用。这不起作用-范围引用不能超过255个字符。可以对您选择的行/列使用Intersect