【发布时间】:2019-05-16 14:19:14
【问题描述】:
我有一个可以输入数据的电子表格。文件名、时间和大量信息最终会生成一个 Windows 批处理文件。
我的 excel 公式的最终结果图片 我的 excel 公式的最终结果的文本表示
Column-I Column-J Column-K
echo f | xcopy /f /y \\server123\data\3838383.398 %userprofile%\Desktop\VT\3838383.398
echo f | xcopy /f /y \\server123\data\3838384.398 %userprofile%\Desktop\VT\3838384.398
echo f | xcopy /f /y \\server123\data\3838385.398 %userprofile%\Desktop\VT\3838385.398
话虽如此,我有大约 30 行可以输入信息。有时我只需要 1 行。当我这样做时,剩余的 29 行将被 #VALUE! 填充。所以当我只有 1 行数据放入电子表格时,它看起来像这样(下图)。
Column-I Column-J Column-K
echo f | xcopy /f /y \\server123\data\3838383.398 %userprofile%\Desktop\VT\3838383.398
echo f | xcopy /f /y #VALUE! #VALUE!
echo f | xcopy /f /y #VALUE! #VALUE!
echo f | xcopy /f /y #VALUE! #VALUE!
然后我使用此公式将 I、J、K 列连接到 Z 列 =CONCATENATE(I5,J5," ",K5)
这就是魔法发生的地方,我有一个宏,可以将 Z 列中的任何内容转换为 windows .bat 文件。这是代码:
Sub Send2Bat()
Dim ColumnNum: ColumnNum = 26 ' Column Z - I have the I J and K Columns concatenated there.
Dim RowNum: RowNum = 0
Dim objFSO, objFile
Dim openBat As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\Users\UserProfile\Desktop\VT\Batch Files\Convert.bat") 'Output Path
aFile = "C:\Users\UserProfile\Desktop\VT\Batch Files\"
Dim OutputString: OutputString = ""
Dim targetSheet As Worksheet
Set targetSheet = Application.Worksheets("ForBatchFile")
Dim LastRow: LastRow = targetSheet.Cells(targetSheet.Rows.Count, ColumnNum).End(xlUp).Row
Do
RowNum = RowNum + 1
If Not (IsEmpty(targetSheet.Cells(RowNum, ColumnNum).Value)) Then
OutputString = OutputString & Replace(targetSheet.Cells(RowNum, ColumnNum).Value, Chr(10), vbNewLine) & vbNewLine
End If
Loop Until RowNum = LastRow
objFile.Write (OutputString)
Set openBat = CreateObject("Shell.Application")
openBat.Open (aFile)
Set objFile = Nothing
Set objFSO = Nothing
End Sub
当我填写了所有 30 行时,一切正常。我的问题是当我没有并且某些单元格中包含#VALUE! 时,它不会输出 .bat 文件。我收到“运行时错误'13':类型不匹配”错误。这在某种程度上是意料之中的,因为它是电子表格将各种内容与日期、文本和一般格式连接起来。我想知道的是......我怎样才能改变我的宏,以便它只处理我需要的行而不会出错。我试过让我的变量变体类型,看看是否有帮助,当然没有。此外,我该如何处理错误并跳过检测到类型不匹配的行?我希望这是足够的细节,感谢任何看到这个的人。
【问题讨论】:
-
对不起,这不是重复的。那并没有解决我的问题。下面的帖子修复了它。我们能否取消标记为重复项。 !VALUE# 应该在那里,我只是想忽略它们。
标签: excel vba batch-file excel-formula