VBA – 将行打印到.txt文件

我在打印文本文件中的值时遇到问题。 每当我有一个date或数字,我会得到一个“错误13”…我想这是链接到我的variables,但我不明白问题在哪里。

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 

错误出现在这一行打印#1,WsCib.Cells(i,j).Value +“;”; 'Séparateur=; 每当单元格(i,j).value是date或数字格式。

感谢您的帮助提前。

BR,

吉恩

 Print #1, WsCib.Cells(i, j).Value + ";"; 'Séparateur = ; 

VBA中的连接运算符是&不是 + 。 如果两个操作数都是string,后者有时会起作用。

数字+string会引发运行时错误13,除非string可以转换为数字,但当使用+时,VBA将永远不会将该数字转换为string,只会在此情况下尝试算术加法。

 Print #1, WsCib.Cells(i, j).Value & ";"; 'Séparateur = ' ^^^ 

这将解决手头的问题,但还有其他一些事情应该改变。

  • Dim LastCol, LastRow, i, j As Byte这个语句声明j为Byte,所有其他声明为Variant。 将它们全部变暗,并使用Long而不是Byte,因为Long应该始终是整型variables的自然select,除非有特定的原因。

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

  • 语句Print #1, WsCib.Cells(i, j + 1).Value也是多余的,因为该单元格是空白的。 要打印空行,只需Print #1, "" 。 尽pipe它的确如此,但是对于代码的可读性来说 ,这是一个错误。