use*_*035 0 excel vba excel-vba excel-2010
我希望做到以下几点:
按下按钮时,应激活宏.宏选择列H(不是整列,直到数据进入.在表2之后,如果在该行之后,后面的10行为空,则可以确定最后一行数据)(相同的工作簿).对于此选择,"常规"格式应用于每个单元格.在此之后,对于G列也是如此.然后,宏结束.
我认为它应该很容易实现,但我特别挣扎着"确定数据的最后一行"部分,好像应用于整个列,PC大幅减速.
然后,我不确定在哪里应该将代码(Sheet,ThisWorkbook,Module)作为最佳实践.
还有其他方法可以做到这一点,但最简单的方法通常是选择一个大行号(是否会有超过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)
如果这不起作用,则可能必须将数据复制到空白列并删除旧列.或者也许复制并粘贴(可能是值)到相同的范围.