尝试使用VBA

时间:2017-06-16 02:39:22

标签: excel vba excel-vba

我遇到一个问题,我的一个循环将字符串输入excel。我从文本文件中提取可以是任意长度的数据,但到目前为止我使用的所有内容都是100行数据和50000行数据之间的任何数据。我试图提取的字符串长度为4个字符,通常是数字,但可以是字母数字。默认情况下,字符为0001,0002,0003和0004,但如果他们选择使用任何其他4个字符,这完全取决于我们的客户。在Excel中输入数据时,我只想输入唯一值。

可以给出整个代码,但其他一切工作正常,所以我认为没有必要。如果您这么认为,请求我将其编辑。请记住,我已经尝试了很多不同的尝试,逻辑似乎永远不会成功。

结果是一长串行,其中包含文本文件中的每个值。

如果我不得不猜测,这是因为字符串是一个数字然后excel将其存储为“2”而不是“0002”所以我已经格式化整个列以显示4个字符。即便如此,我认为Excel将其视为“2”,因此字符串永远不会匹配数据。

感谢任何帮助。

FileName = Application.GetOpenFilename()
Open FileName For Input As #1

strSearch = "MTRDT"

Do Until EOF(1)
Line Input #1, ReadData
    If Left(ReadData, Len(strSearch)) = strSearch Then
            MtrdtCount = MtrdtCount + 1
            MeterType = Mid(ReadData, 78, 4)
            lastrow = Cells(Rows.Count, "G").End(xlUp).Row + 1
            MeterTypeTest = True

            For Each cell In Range("G3:G" & lastrow)
                If MeterType = cell.Value Then
                    MeterTypeTest = False
                    Exit For
                End If
            Next cell

            If MeterTypeTest = True Then
                Range("G" & MeterTypeCnt) = MeterType
                MeterTypeCnt = MeterTypeCnt + 1

            End If
    Else
    End If
Loop

2 个答案:

答案 0 :(得分:1)

如果您使用显示的方法输入了所有数据,则Excel无法将数据输入为0002作为数字2 - 它会将其视为字符串{ {1}}。

但您正在针对"0002"测试这些值,这意味着您将"'" & Mid(ReadData, 78, 4)"0002"进行比较。

您需要在向数据库输入数据时添加"'0002"字符,而不是在进行比较之前。所以以下内容应该有效:

'

答案 1 :(得分:0)

我认为将列“G”的numberformatLocal设置为低于标准

Columns("g").NumberFormatLocal = "@"


Filename = Application.GetOpenFilename()
Open Filename For Input As #1

strSearch = "MTRDT"

Do Until EOF(1)
Line Input #1, ReadData
    If Left(ReadData, Len(strSearch)) = strSearch Then
            MtrdtCount = MtrdtCount + 1
            MeterType = Mid(ReadData, 78, 4)
            lastrow = Cells(Rows.Count, "G").End(xlUp).Row + 1
            MeterTypeTest = True

            For Each cell In Range("G3:G" & lastrow)
                If MeterType = cell.Value Then
                    MeterTypeTest = False
                    Exit For
                End If
            Next cell

            If MeterTypeTest = True Then
                Range("G" & MeterTypeCnt) = MeterType
                MeterTypeCnt = MeterTypeCnt + 1

            End If
    Else
    End If
Loop