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

时间:2013-06-18 18:17:09

标签: excel vba excel-vba excel-2010

我希望做到以下几点:

按下按钮时,应激活微距。宏选择列H(不是整列,直到数据进入。在表2之后,如果在该行之后,后面的10行为空,则可以确定最后一行数据)(相同的工作簿)。对于此选择,“常规”格式应用于每个单元格。在此之后,对于G列也是如此。然后,宏结束。

我认为它应该很容易实现,但我特别挣扎着“确定数据的最后一行”部分,好像应用于整个列,PC大幅减速。

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

2 个答案:

答案 0 :(得分:5)

还有其他方法可以做到这一点,但最简单的方法通常是选择一个大行号(是否会有超过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 :(得分: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编辑器中打开选项对话框为所有模块启用此功能:工具 - >选项,然后选中需要变量声明旁边的框。