为Vba补债

时间:2016-05-19 15:25:06

标签: vba for-loop

Sub CopyEstabelec()

    Dim v As String
    Dim b As String
    Dim i As Long

    i = 10

    For i = 10 To 1619
        v = Range("A" & i).Value
        If v = "Estabelecimento:" Then
            b = Range("B" & i).Value
            Range("AA" & i).Value = b
        End If
    Next i

End Sub

有人可以帮我找出代码无效的原因吗?它报告"类型"不兼容。我想要做的是将范围(" B"& i)中的值复制到范围(" AA"& i)(如果范围)( " A"& i)等于" Estabelecimento:"。

2 个答案:

答案 0 :(得分:0)

试试这个:

Sub CopyEstabelec()

Dim v As String
Dim i As Long

For i = 10 To 1619
v = TRIM(Range("A" & i).Value)
    If v = "Estabelecimento:" Then
     Range("AA" & i) = Range("B" & i)
    End If
Next i

End Sub

答案 1 :(得分:0)

从你的代码中我不会说为什么会抛出这个错误:" types"不兼容

您可能想要添加一些信息和/或显示导致该错误的数据。

我还建议遵循Tim的建议:逐步执行代码和查询变量状态。大多数情况下你可能想要输入立即窗口:

?Range("A" & i).Parent.Name, Range("A" & i).Address, Range("A" & i).Value

?Range("B" & i).Parent.Name, Range("B" & i).Address, Range("B" & i).Value

哪里你实际 (工作表,地址)有什么价值

虽然作为对您的代码的贡献,请考虑以下内容:

使用SpecialCells()对象的Range方法仅循环遍历相关单元格 - 在这种情况下:具有"常量" (即:不是由公式产生的)文本值

Option Explicit

Sub CopyEstabelec()
    Dim cell As Range
    For Each cell In Range("A10:A1619").SpecialCells(xlCellTypeConstants, xlTextValues)
        If cell.Value = "Estabelecimento:" Then cell.Offset(, 26).Value = cell.Offset(, 1).Value
    Next cell
End Sub

或相同,但采用公式方法:

Sub CopyEstabelec()
    With Range("A10:A1619").SpecialCells(xlCellTypeConstants, xlTextValues).Offset(, 26)
        .FormulaR1C1 = "=IF(RC1=""Estabelecimento:"", RC2,"""")"
        .Value = .Value '<~~ to keep values instead of formulas
    End With
End Sub