为什么在使用Visual Basic将excel文件导出为CSV时会出现此错误?

为什么在使用Visual Basic将excel文件导出为CSV时会出现此错误?,excel,vba,csv,Excel,Vba,Csv,当出现错误消息并单击“调试”时,它会显示我附带的visual Basic中的代码 要解决此问题,我们必须: 1.将突出显示的黄色行退格到上一行 2.然后将其返回到原始位置。这样做会将黄色/错误突出显示“移动”到下一行。 3.如果CICheck“CI”和Cost>0,则继续将黄色/错误突出显示“推”到第1行1 4.在VBE中重新运行程序。 5.关闭VBE 6.导出的CSV应存在于原始Excel文件的CSV选项卡中 AltContract = Cells(j, 1) CICheck = Cel

当出现错误消息并单击“调试”时,它会显示我附带的visual Basic中的代码

要解决此问题,我们必须:
1.将突出显示的黄色行退格到上一行
2.然后将其返回到原始位置。这样做会将黄色/错误突出显示“移动”到下一行。
3.如果CICheck“CI”和Cost>0,则继续将黄色/错误突出显示“推”到第1行1
4.在VBE中重新运行程序。
5.关闭VBE
6.导出的
CSV
应存在于原始Excel文件的
CSV
选项卡中

 AltContract = Cells(j, 1)
 CICheck = Cells(j, 2)


If Len(AltContract) > 0 Then 'picking CI num between CI group or Alt CI
    SetContract = AltContract

Else 'no alt contract

    For i = 1 To 1000 'loop to set CI from above
    If Cells(j - i, 2) = "CI" Then '<~~~ ERRROR HERE
    BillDsc = Cells(j - i, 7)
    BillGrp = Cells(j - i, 6)
        Exit For
    End If
    Next
End If


If CICheck <> "CI" And Cost > 0 Then


Do Until Cells(j + i, 2) <> "CI"

    If Len(Cells(j + i, 1)) > 0 Then GoTo NextIteration

   i = i + 1
AltContract=单元格(j,1)
CICheck=单元(j,2)
如果Len(AltContract)>0,则“在CI组或Alt CI之间拾取CI编号”
SetContract=AltContract
其他人没有替代合同
对于i=1到1000'循环,从上方设置CI
如果单元(j-i,2)=“CI”,则“0”,则
直到单元格(j+i,2)“CI”为止
如果Len(细胞(j+i,1))>0,则转到下一个滴度
i=i+1
您需要限定
单元格
对象。
您可以直接使用
此工作簿.Sheets(“Sheet1”).Cells(j-1,2)

(希望
j
这里有一个在代码中其他地方正确定义的整数)


一个更快的方法是使用以下命令创建一个资格认证快捷方式:

Dim ws as WorkSheet
Set ws = Thisworkbook.Sheets("Sheet1")
然后使用
ws.Cells(j-1,2)


另一种方法是将
块一起使用

Dim ws as WorkSheet
Set ws = Thisworkbook.Sheets("Sheet1")

    With ws
        .Cells(j-1, 2)
    End With


您应该缩进代码以排列循环。会让你更容易看到你的屏幕截图上没有错误信息。。。错误的实际文本是什么?(你的问题包括它!)-也就是说,非限定的
单元格
调用是对
ActiveSheet
的隐式引用,这取决于代码的编写位置。@MathieuGuindon有一张错误的照片。它看起来只是一个链接,但实际上有两个链接。鬼鬼祟祟的操作。
运行时错误1004
@urderboy-gah,明白了。固定的
With Thisworkbook.Sheets("Sheet1")
    .Cells(j-1, 2)
End With