У меня есть таблица, в которую я ввожу данные. Имена файлов, а также время и масса информации, которая в итоге создает пакетный файл 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 строк заполняются # ЗНАЧЕНИЕ !. Таким образом, это выглядит так (ниже), когда в таблицу добавляется только 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. Я получаю сообщение об ошибке "Run-time error '13': несоответствие типов". Это несколько ожидаемо, потому что это электронная таблица объединяет все виды данных с датами, текстом и общими форматами. Что я хотел бы знать, так это ... как я могу изменить свой макрос так, чтобы он обрабатывал только нужные мне строки без ошибок. Я попытался сделать свои варианты переменных типов, чтобы увидеть, помогло ли это, конечно, это не так. Кроме того, как я могу обработать ошибки и просто пропустить строки, где обнаружено несоответствие типов? Я надеюсь, что это достаточно подробностей, спасибо всем, кто смотрит на это.