VBA-将行打印到.txt文件

VBA-将行打印到.txt文件,vba,excel,Vba,Excel,在文本文件中打印值时出现问题。每当我有一个日期或数字,我就会得到一个“错误13”。。。我想这和我的变量有关,但我不明白问题出在哪里 Sub SX_Externe_Generate_TXT() Dim WsCib As Worksheet Dim LastCol, LastRow, i, j As Byte Application.ScreenUpdating = False Set Ws = ThisWorkbook.Sheets("Externe") Set WsCib = ThisWor

在文本文件中打印值时出现问题。每当我有一个日期或数字,我就会得到一个“错误13”。。。我想这和我的变量有关,但我不明白问题出在哪里

Sub SX_Externe_Generate_TXT()
Dim WsCib As Worksheet
Dim LastCol, LastRow, i, j As Byte

Application.ScreenUpdating = False

Set Ws = ThisWorkbook.Sheets("Externe")
Set WsCib = ThisWorkbook.Sheets("SX_Externe")
LastCol = WsCib.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Column
LastRow = WsCib.Cells(1, 1).SpecialCells(xlCellTypeLastCell).Row

WsCib.Activate

Open "C:\Users\xizx692\Desktop\SX_Externe_Temp.txt" For Output As #1  'Tu crées le fichier text

i = 1

For i = 1 To LastRow
j = 1
    For j = 1 To LastCol
        Print #1, WsCib.Cells(i, j).Value + ";"; 'Séparateur = ;
    Next j
    Print #1, WsCib.Cells(i, j + 1).Value 'pas de séparateur (Saut de ligne)
Next i

Close #1

Ws.Activate

Application.ScreenUpdating = False

End Sub
错误出现在这一行Print#1,WsCib.Cells(i,j).Value+“;”Séparateur=每当单元格(i,j)的值为日期或数字格式时

提前谢谢你的帮助

比尔

VBA中的串联运算符是
&
不是
+
。如果两个操作数都是字符串,则后者有时有效

number+string会引发运行时错误13,除非字符串可转换为数字,但当使用
+
时,VBA不会将数字转换为字符串,在这种情况下,它只会尝试算术加法

Print #1, WsCib.Cells(i, j).Value & ";";  'Séparateur = 
'                                ^^^ 
这将解决手头的问题,但还有一些事情需要改变

  • Dim LastCol,LastRow,i,j为Byte
    此语句声明j为Byte,所有其他变量为Variant。将它们全部调暗,并使用long而不是Byte,因为long应该始终是整数变量的自然选择,除非有特定原因

          `Dim LastCol as Long, LastRow As Long, i as Long, j As Long`
    
  • i=1
    j=1
    是多余的,让
    For
    语句执行初始化工作

  • 语句
    Print#1,WsCib.Cells(i,j+1).Value
    也是多余的,因为该单元格为空。要打印空行,只需
    print#1,“
    。虽然它的功能是相同的,但它更适合于代码的可读性


Ash,非常感谢您的回答。它帮助我解决我的问题,而且,它教会了我很多东西。我之所以使用“字节”是因为我知道将有少于250行,我认为我的代码会更快。。。我真丢脸?我不知道j,我会在循环结束时回到“1”,这就是为什么我想强制j=1!你愿意回答我问的另一个问题吗?如果是的话!必须解决所有问题;D思考一下,为什么要将LastCol、LastRow和i定义为变体?谢谢@我的意思是,您最初的语句将它们声明为Variant,而不是Byte。对所有整数变量使用
Long
,因为它是32位的,所以速度最快,溢出风险更小。只有当您拥有可能导致内存问题的大型数组时,才会想到
整数
字节
      `Dim LastCol as Long, LastRow As Long, i as Long, j As Long`