如果Excel单元格为空,则在文本文档中打印空格

时间:2018-09-28 21:12:51

标签: vba excel-vba text

很抱歉,我是VBA的新手。我要负责的工作是从Excel工作表中创建一个文本文档,该文档将由我们的销售人员填写,然后通过FTPd传输到我们的Orders应用程序。文本文件具有固定的布局,我遇到的是满足该格式的文件。例如,如果用户未在Excel单元格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 :(得分:0)

我不确定行

If ITEMCD = "" Then
        End
    End If

可能会导致结束代码而不关闭文本文件。可以尝试“结束做”。

我认为,对于Celldata

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

重复两次。如果是事实,并且第二列和第三列都应有日期,请按顺序尝试

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")) 

答案 1 :(得分:0)

VBA代码未将NULL或空白单元格解释为数值。因此,您必须执行以下操作:

    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")