Vba 在所有单元格、所有工作表和整个工作簿中执行代码

Vba 在所有单元格、所有工作表和整个工作簿中执行代码,vba,excel,Vba,Excel,我的问题是,我试图创建一个代码,将单元格值更改为“X”,如果它包含值,则需要检查多个工作表中的每个单元格(我非常清楚这可能需要很长时间!) 此应用程序适用于大型矩阵,其中“结构”比实际值更重要。它很复杂,也很难解释(它是由第三方创建的,并且非常旧系统,然后导出到excel) 我确信我的思路是正确的,但这根本不起作用,我在第行中为ws中的每个单元格都出现了一个“method not supported”(方法不受支持)错误 Sub Usage_X() Dim ws As Worksheet F

我的问题是,我试图创建一个代码,将单元格值更改为“X”,如果它包含值,则需要检查多个工作表中的每个单元格(我非常清楚这可能需要很长时间!)

此应用程序适用于大型矩阵,其中“结构”比实际值更重要。它很复杂,也很难解释(它是由第三方创建的,并且非常旧系统,然后导出到excel)

我确信我的思路是正确的,但这根本不起作用,我在第
行中为ws中的每个单元格都出现了一个“method not supported”(方法不受支持)错误

Sub Usage_X()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
ws.Activate
    For Each Cell In ws
        If Cell.Value <> "" Then
            Cell.Value = "X"
        End If
    Next
Next


End Sub
子用法
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
ws.Activate
对于ws中的每个单元格
如果单元格的.Value为“”,则
Cell.Value=“X”
如果结束
下一个
下一个
端接头

我认为您需要在一个范围内循环遍历每个单元格,而不是在工作表中。所以修改为

Sub Usage_X()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
Set rng = ws.UsedRange
    For Each Cell In rng
        If Cell.Value <> "" Then
            Cell.Value = "X"
        End If
    Next Cell
Next ws


End Sub
子用法
将ws设置为工作表
对于ActiveWorkbook.Worksheets中的每个ws
设置rng=ws.UsedRange
对于rng中的每个单元
如果单元格的.Value为“”,则
Cell.Value=“X”
如果结束
下一个细胞
下一个ws
端接头

为ws中的每个c as单元格尝试
{对于每个c,您需要说
Next Cell
Next ws
,而不仅仅是
Next
@Roland
,因为ws
中的单元格不是valid@MattCremeens虽然你是对的,我没有注意到这一点,但它并不能解决ws中每个单元格在
处的代码中断问题。对不起,ws中的每个单元格都应该是
。Cells
有缺陷斯莱。我从来没有想过使用
UsedRange
!谢谢