选择列并将“常规”格式应用于所有单元格+将宏放在按钮上

问题描述 投票:1回答:2

我正在尝试执行以下操作:

  1. 按下按钮时,应激活宏。
  2. 宏选择工作表2中的H列(相同的工作簿)。不是整个列,而是直到数据消失。可以确定最后一行数据是否在该行之后接下来的10行为空。
  3. 对于此选择,“常规”格式适用于每个单元格。
  4. 此后,对于G列,同样如此。
  5. 宏结束。

[我认为这应该很容易实现,但是我尤其在“确定数据的最后一行”部分上苦苦挣扎,好像将PC应用于整个列会大大减慢速度。

然后,我不确定应该将代码(Sheet,ThisWorkbook,模块)作为最佳实践放置在哪里。

excel vba excel-2010
2个回答
7
投票

还有其他方法可以做到这一点,但通常最简单的方法是选择一个大行号(是否会有超过20,000行?)并向上导航。

Range("H2", Range("H20000").End(xlUp)).NumberFormat = "General"
Range("G2", Range("G20000").End(xlUp)).NumberFormat = "General"

但是您也可以格式化整个列:

Range("G:H").NumberFormat = "General"

这(目前)不会影响文件的大小。

您想单击工作表的按钮来运行宏,因此可以使用窗体控件,按钮,然后代码将位于标准模块中。

已添加(根据我的评论):

这将起作用:

Application.Intersect(ActiveSheet.UsedRange, Range("G:H")).NumberFormat = "General"

但是它需要一些错误处理,以防万一这些范围不相交。

回复评论中的其他两个问题:

Worksheets("Whatever").Activate

如果应用于列的NumberFormat无法正常工作,则必定会发生其他干扰-或在导入(?)时数据为故障。试试:

Application.CalculateFull

或仅使用特定范围:

Range("..").Calculate

如果这不起作用,那么您可能必须将数据复制到空白列并删除旧列。或者也许将(可能是值)复制并粘贴到相同的范围内。


1
投票

您可以在不选择范围或工作表的情况下,对G和H列中的所有单元格进行常规格式化。您应该始终避免在VBA代码中选择任何内容。

找到数据的最后一行的事实上的标准方法是从工作表的底部开始,然后从那里开始。

以下内容在G和H列中找到了sheet2上数据最后的单元格。我们使用两者中的最大值来设置将应用一般格式的范围。

Sub GeneralFormatForAllPopulatedCells()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim g As Long, h As Long
    Dim lastRow As Long
    Dim rng As Range

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet2")

    g = ws.Range("G" & ws.Rows.Count).End(xlUp).Row
    h = ws.Range("H" & ws.Rows.Count).End(xlUp).Row

    If g > h Then
        lastRow = g
    Else
        lastRow = h
    End If

    Set rng = ws.Range("G1:H" & lastRow)
    rng.NumberFormat = "General"


End Sub

您应将代码放置在模块中,并确保Option Explicit出现在模块顶部,以便需要变量声明。您可以通过在VBA编辑器中打开选项对话框来打开所有模块的功能:工具->选项,然后选中需要变量声明旁边的框。

© www.soinside.com 2019 - 2024. All rights reserved.