我目前在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
谢谢, 塞德里克。
答案 0 :(得分:0)
示例文本的第251个字符是=
符号。当您将其写入单元格时,Excel会假定您正在输入公式。
要变通解决此问题,请在文本前加上'
,就像您手动键入时一样:
Sheets("LibImport").Range("F" & ligneLib) = "'" & Mid(Sheets("NCXL").Range("B" & ligneNC), 250 * (j - 1) + 1, 250)
它们将不会在Excel中显示,但是如果您稍后要对该单元格的内容进行其他操作,则 可能 需要对其进行说明。< / p>