繁体   English   中英

VBA-将行打印到.txt文件

[英]VBA - Print lines to a .txt file

我在文本文件中打印值时遇到问题。 每当我有日期或数字时,我都会收到“错误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=; 只要cell(i,j).value是Date或Number格式。

感谢您的帮助。

BR,

吉恩

 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, "" 尽管它的作用相同,但是对于代码的可读性来说却是一个好选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM