VBA - 将行打印到.txt文件

时间:2017-06-19 18:49:20

标签: excel vba excel-vba

我在文本文件中打印值时遇到问题。每当我有一个或多个日期时,我会得到一个“错误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

错误来自此行打印#1,WsCib.Cells(i,j).Value +“;”;每当单元格(i,j).value是日期或数字格式时,'Séparateur=;

提前感谢您的帮助。

BR,

1 个答案:

答案 0 :(得分:3)

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

VBA中的串联运算符为& +。如果两个操作数都是字符串,后者有时会起作用。

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

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

这将解决手头的问题,但还有一些其他问题需要改变。

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

          `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, ""。虽然它的功能相同,但它对您的代码的可读性更为重要。