微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Excel VBA:如何在具有非特定单元格引用的工作表中仅选择活动区域

如何解决Excel VBA:如何在具有非特定单元格引用的工作表中仅选择活动区域

我正在构建一个代码来重新格式化任何活动工作表(而不是特定工作表)的部分(下划线,着色)。该代码有效,但局限性在于我可以随意设置单元格。

也就是说,对于我正在使用的formatting function下面的第一个m=2 To 500 n = 2 To 200,我正在工作表中测试宏,该工作表包含A1:L150中的值。我真正需要的是动态定义活动区域(第一行和第一列除外),即具有值的工作表区域。因此,例如,如果工作表的值在A2:M1055范围内,则需要在该区域进行格式化。如果另一个工作表在A2:O1500区域中填充了单元格,则格式将覆盖该区域。因此,用户不必理想地定义区域(除非没有其他方法)。第二个formatting相同:我需要整列。

  • 有没有一种方法可以理想地使用Cells()?
  • 如果不是,那可以替代吗?

工作表不是表格,并且有许多空白单元格。

Option Explicit
Dim ws As Worksheet
Dim m As Long
Dim n As Long

Sub format
  
Set ws = ActiveWorkbook.ActiveSheet
ws.Activate

'formatting sheet except first row  and first column 
For m = 2 To 500 
For n = 2 To 200

        If Cells(m,n).HasFormula = False Then
        Cells(m,n).Interior.Color = RGB(0,255,0)
        ElseIf Cells(m,n)...        
        End If
    Next n
Next m

Set ws = ActiveSheet
ws.Activate

'formatting first column
For m = 2 To 100
    For n = 1 To 1

        If Cells(m,n).Interior.Color = RGB(255,0)

解决方法

如果您有一个已知的起点,并且使用excel将选择到最后一条记录和最后一列数据,则可以使用现有代码使用范围选择。

Selection.Address可以为您提供诸如A1:L150之类的值。我使用split来分隔A1和L150,您可以使用mid拉出字母和数字,但如果超出z列,则要小心。您可以将引用更改为ReferenceStyle:=xlR1C1,以将值作为R1C1:R150C12获得。玩RowAbsoluteColumnAbsolute来获得想要的东西。

Dim ws As Worksheet
Dim m As Long
Dim n As Long
Dim sRange As String
Dim sRanges() As String

Set ws = ActiveWorkbook.ActiveSheet
ws.Activate

    ws.Range("A2").Select
    ws.Range(Selection,Selection.End(xlDown)).Select
    ws.Range(Selection,Selection.End(xlToRight)).Select

    sRange = Selection.Address(ReferenceStyle:=xlA1,_
                           RowAbsolute:=False,ColumnAbsolute:=False)
    sRanges = Split(sRange,":")
    Debug.Print sRanges(0)
    Debug.Print sRanges(1)

'Prints A1 and L150
,

非常感谢您的答复。我尝试了使用不同工作表的所有解决方案。适用于所有工作表的是@Tim Williams建议在the link中找到的标题为“使用按行和按列查找来识别此单元格的人”。

我认为是因为工作表和空白单元格的格式有些复杂(或者我的技能很差),所以我无法通过@ Reino4来解决该问题。对于没有空白单元格的工作表,也可以正常工作:谢谢!非常感谢!

我不确定我如何投票给蒂姆答复。

另外,感谢您对帖子的编辑

斯蒂芬

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。