【问题标题】:Getting around VBA type mismatch for .Bat generated in Excel解决 Excel 中生成的 .Bat 的 VBA 类型不匹配问题
【发布时间】: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


【解决方案1】:

您可以检查错误并仅使用“好”行:

Dim v As Variant

'....
'....

'when you already know the start and end values, use For...Next
for rownum = 1 to LastRow

    v = targetSheet.Cells(RowNum, ColumnNum).Value

    If Not IsError(v) Then  '<< skip any errors
        If Len(v) > 0 Then  '<< skip empty values
            OutputString = OutputString & Replace(v, Chr(10), vbNewLine) & vbNewLine
        End If
    End If

Next RowNum

【讨论】:

  • 谢谢你,先生,你是明星。
猜你喜欢
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多