错误1004宏Excel

时间:2018-07-16 08:09:36

标签: excel vba excel-vba

我目前在VBA上遇到一些问题,错误1004。我在Internet上进行了检查,但不幸的是,找不到解决方案。

我正在研究Excel与其他基地之间的数据传输。我目前正在工作的第一部分:传输之前新文档的形状。实际上,我的第一个数据库中的文本可以包含250个以上的字符,而另一个数据库则希望我将所有文档分别拆分为250个字符(可以在程序中检查),并添加一个相关的数字以帮助收集文档。信息。

它非常好用,直到我到达 j = 2 LigneLib = 3899 以及包含257个字符的文本的行Sheets("LibImport").Range("F" & ligneLib) = Mid(Sheets("NCXL").Range("B" & ligneNC), 250 * (j - 1) + 1, 250)为止。这段代码已经可以用于超过500个字符的文本,这就是为什么我不理解这个问题的原因。

此外,当我删除所有行以再次启动宏时,在第一个循环的同一行上仍然出现错误。但是,仅当我重新启动Excel时,它才能再次起作用。

请在下面找到宏的详细信息:

Option Explicit

Sub Libelle()

    Dim ligneLib As Integer
    Dim ligneNC As Integer
    Dim endLoop As Integer
    Dim i As Integer
    Dim j As Integer

    ligneNC = 3
    ligneLib = 1

    For i = 1 To 3003

        endLoop = Round_Up(Len(Sheets("NCXL").Range("B" & ligneNC)) / 250)

        For j = 1 To endLoop 'Texte description

            Sheets("LibImport").Range("A" & ligneLib) = "100"
            Sheets("LibImport").Range("B" & ligneLib) = Sheets("NCXL").Range("A" & ligneNC) & "-DESC"
            Sheets("LibImport").Range("C" & ligneLib) = "NONCONFO"
            Sheets("LibImport").Range("D" & ligneLib) = j
            Sheets("LibImport").Range("F" & ligneLib) = Mid(Sheets("NCXL").Range("B" & ligneNC), 250 * (j - 1) + 1, 250)

            ligneLib = ligneLib + 1

        Next

        endLoop = Round_Up(Len(Sheets("NCXL").Range("C" & ligneNC)) / 250)

        For j = 1 To endLoop 'Texte cause

            Sheets("LibImport").Range("A" & ligneLib) = "100"
            Sheets("LibImport").Range("B" & ligneLib) = Sheets("NCXL").Range("A" & ligneNC) & "-CAUSE"
            Sheets("LibImport").Range("C" & ligneLib) = "NONCONFO"
            Sheets("LibImport").Range("D" & ligneLib) = j
            Sheets("LibImport").Range("F" & ligneLib) = Mid(Sheets("NCXL").Range("C" & ligneNC), 250 * (j - 1) + 1, 250)

            ligneLib = ligneLib + 1

        Next

        endLoop = Round_Up(Len(Sheets("NCXL").Range("E" & ligneNC)) / 250)

        For j = 1 To endLoop 'Texte action corrective

            Sheets("LibImport").Range("A" & ligneLib) = "100"
            Sheets("LibImport").Range("B" & ligneLib) = Sheets("NCXL").Range("A" & ligneNC) & "-DSCCOR"
            Sheets("LibImport").Range("C" & ligneLib) = "NONCONFO"
            Sheets("LibImport").Range("D" & ligneLib) = j
            Sheets("LibImport").Range("F" & ligneLib) = Mid(Sheets("NCXL").Range("E" & ligneNC), 250 * (j - 1) + 1, 250)

            ligneLib = ligneLib + 1

        Next

        endLoop = Round_Up(Len(Sheets("NCXL").Range("D" & ligneNC)) / 250)

        For j = 1 To endLoop 'Texte action curative

            Sheets("LibImport").Range("A" & ligneLib) = "100"
            Sheets("LibImport").Range("B" & ligneLib) = Sheets("NCXL").Range("A" & ligneNC) & "-DECIS"
            Sheets("LibImport").Range("C" & ligneLib) = "NONCONFO"
            Sheets("LibImport").Range("D" & ligneLib) = j
            Sheets("LibImport").Range("F" & ligneLib) = Mid(Sheets("NCXL").Range("D" & ligneNC), 250 * (j - 1) + 1, 250)

            ligneLib = ligneLib + 1

        Next

        ligneNC = ligneNC + 1

    Next

End Sub

Function Round_Up(ByVal val As Double) As Integer
    Dim result As Integer
    result = Round(val)
    If result >= val Then
        Round_Up = result
    Else
        Round_Up = result + 1
    End If
End Function

谢谢, 塞德里克。

1 个答案:

答案 0 :(得分:0)

示例文本的第251个字符是=符号。当您将其写入单元格时,Excel会假定您正在输入公式。

要变通解决此问题,请在文本前加上',就像您手动键入时一样:

Sheets("LibImport").Range("F" & ligneLib) = "'" & Mid(Sheets("NCXL").Range("B" & ligneNC), 250 * (j - 1) + 1, 250)

它们将不会在Excel中显示,但是如果您稍后要对该单元格的内容进行其他操作,则 可能 需要对其进行说明。< / p>