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

use*_*035 0 excel vba excel-vba excel-2010

我希望做到以下几点:

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

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

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

And*_*y G 5

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

Range("H2", Range("H20000").End(xlUp)).NumberFormat = "General"
Range("G2", Range("G20000").End(xlUp)).NumberFormat = "General"
Run Code Online (Sandbox Code Playgroud)

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

Range("G:H").NumberFormat = "General"
Run Code Online (Sandbox Code Playgroud)

这不会(这些天)影响文件的大小.

您想单击工作表的一个按钮来运行宏,因此您可以使用表单控件,按钮,然后代码将在标准模块中.

添加(来自我的评论):

这可行:

Application.Intersect(ActiveSheet.UsedRange, Range("G:H")).NumberFormat = "General"
Run Code Online (Sandbox Code Playgroud)

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

在评论中回答另外两个问题:

Worksheets("Whatever").Activate
Run Code Online (Sandbox Code Playgroud)

如果NumberFormat应用于列不起作用,那么必然会发生其他干扰 - 或者导入时数据错误(?).尝试:

Application.CalculateFull
Run Code Online (Sandbox Code Playgroud)

或者只使用特定范围:

Range("..").Calculate
Run Code Online (Sandbox Code Playgroud)

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