Печать пробелов в текстовом документе, если ячейка Excel пуста - PullRequest
0 голосов
/ 29 сентября 2018

Я прошу прощения, я очень новичок в VBA.Передо мной была поставлена ​​задача создать текстовый документ из листа Excel, который будет заполнен нашими сотрудниками по продажам, а затем отправлен по FTP в наше приложение Orders.Текстовый файл имеет заданный макет, и я сталкиваюсь с этим форматом.Например, если пользователь не заполняет дату в Excel Cell C3, мне нужно, чтобы текстовый файл был заполнен шестью пробелами, а не пропущен.

Я попытался ввести оператор IF, где я объединяю данные, чтобы записать их в текстовый документ, но ошибка произошла из-за ошибки Application-Defined или Object-Defined, и это довольно общая ошибка.

Извините за сложенный код, это лучшее, что мог придумать мой простой ум.Как мне получить его, чтобы заполнить необходимые мне поля?

Sub CommandButton1_Click()
    Dim FilePath As String
    Dim CellData As String
    Dim LastCol As Long
    Dim LastRow As Long

    LastCol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
    LastRow = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row

    Range("Home").Select
    CellData = ""
    FilePath = "C:\Users\MN\Desktop\orders.txt"
    Count = ActiveCell.Row - 1

    Open FilePath For Output As #1
    Do
        Count = Count + 1
        Range("A" & Count).Select
        ITEMCD = ActiveCell.Value

        If ITEMCD = "" Then
            End
        End If

        CellData = ("26  ") & Format(ActiveCell.Value, "0000000") & _
                   ActiveCell.Offset(0, 1).Value & _
                   Format(ActiveCell.Offset(0, 2).Value, "MMDDYY") & _
                   ActiveCell.Offset(0, 1).Value & _
                   Format(ActiveCell.Offset(0, 2).Value, "MMDDYY")

        Print #1, CellData
        CellData = ""
    Loop Until ActiveCell.Value = ""
    Close #1
End Sub

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

A NULL или пустая ячейка не интерпретируется как числовое значение кодом VBA.Так что вам придется сделать что-то вроде этого:

    Dim cellValue as Long
    If Not IsNumeric(ActiveCell) Or IsEmpty(ActiveCell) Then
        cellValue = 0
    Else
        cellValue = ActiveCell.Value
    End If
    CellData = ("26  ") & Format(cellValue, "0000000") & _
               ActiveCell.Offset(0, 1).Value & _
               Format(ActiveCell.Offset(0, 2).Value, "MMDDYY") & _
               ActiveCell.Offset(0, 1).Value & _
               Format(ActiveCell.Offset(0, 2).Value, "MMDDYY")
0 голосов
/ 29 сентября 2018

Я не уверен насчет строк

If ITEMCD = "" Then
        End
    End If

, это может привести к ЗАВЕРШЕНИЮ кода без закрытия текстового файла.Вместо этого можно попробовать «End do».

Также для Celldata, я думаю,

ActiveCell.Offset(0, 1).Value & _
               Format(ActiveCell.Offset(0, 2).Value, "MMDDYY") 

повторяется дважды.если это так, и ожидается, что во 2-м и 3-м столбцах будет указана дата, попробуйте что-то в следующем порядке:

CellData = ("26  ") & Format(ActiveCell.Value, "0000000") & _
                   IIf(IsEmpty(ActiveCell.Offset(0, 1).Value), "      ", Format(ActiveCell.Offset(0, 1).Value, "MMDDYY")) & _
                   IIf(IsEmpty(ActiveCell.Offset(0, 2).Value), "      ", Format(ActiveCell.Offset(0, 2).Value, "MMDDYY")) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...