Excel VBA会跳过很多次事件

时间:2017-10-31 12:02:30

标签: excel vba excel-vba

我有一张包含6张的工作簿。我和For Each一起走过他们。任务是: 1)遍历具有指定范围的每个单元格

2)如果单元格不为空并且仅包含数字那么添加到单元格“мм”的末尾。否则跳过这个单元格。

但事实上,脚本只对第一张表(Worksheet)有用。它不会对其他工作表进行任何更改。我不知道为什么会这样。我认为,代码中存在一些错误或错误,但我仔细检查了它,一切似乎都是正确的。请帮帮我:)。

Sub SaveWorksheetsAsCsv()
Dim xWs As Worksheet
Dim xDir As String
Dim folder As FileDialog
Dim r As Range
Dim rr As Range
Dim rrrrrr As Range
Dim cell As Range
k = Cells(Rows.Count, "A").End(xlUp).Row
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)

For Each xWs In Application.ActiveWorkbook.Worksheets

    If xWs.Name Like "Worksheet" Then
        Set r = Range("FA2:FA" & k)
        For Each cell0 In r
            If IsEmpty(cell0.Value) = False And IsNumeric(cell0.Value) = True Then
                cell0.Value = cell0.Value & " мм"
            End If
        Next
        'xWs.Columns(41).EntireColumn.Delete
    End If

    If xWs.Name Like "Worksheet 1" Then
        Set rr = Range("AG2:AG" & k)
        For Each cell1 In rr
            If IsEmpty(cell1.Value) = False And IsNumeric(cell1.Value) Then

                cell1.Value = cell1.Value & " мм"

            End If
        Next
        'xWs.Columns(126).EntireColumn.Delete
    End If

    If xWs.Name Like "Worksheet 5" Then
        Set rrrrrr = Range("FR2:FR" & k)
        For Each cell5 In rrrrrr
            If IsEmpty(cell5.Value) = False And IsNumeric(cell5.Value) Then

                cell5.Value = cell5.Value & " мм"

            End If
        Next
    End If

    xWs.SaveAs xDir & "\" & xWs.Name, xlCSV, local:=True

Next
End Sub

2 个答案:

答案 0 :(得分:3)

需要调整这些语句集以纠正表格引用。当前代码将始终查看活动工作表,并且范围引用不合格。

Set r = Range("FA2:FA" & k)

Set r = xWs.Range("FA2:FA" & k)

答案 1 :(得分:1)

您可以大量缩短和利用您的代码。

首先,您的var string1 = "twitter OR facebook AND NOT (hello OR p )" var string2 = "twitter OR facebook AND NOT (hello OR p )" var string3 = "twitter OR facebook AND NOT (hello OREGAN p )" var expr = /(\w+?)(?=\s+OR\s+)/g var result1 = string1.match(expr) var result2 = string2.match(expr) var result3 = string3.match(expr) console.log(result1, result2, result3)尝试获取最后一行,需要位于k = Cells(Rows.Count, "A").End(xlUp).Row内,因为每个工作表的最后一行都不同。

其次,您可以使用For Each xWs In Application.ActiveWorkbook.Worksheets

,而不是多个If

第三,Range不需要3个不同的对象,例如Select Caserrrrrrcell0cell1也是如此,您只能使用一个cell5r

cell(我的If)中唯一不同的是您设置的范围Select Case。其余的,循环遍历r对于所有3个标准都是相同的,所以你可以将这个部分放在循环之外,并且只有一次。

修改后的代码

r.Cells
相关问题