繁体   English   中英

使用InStr函数时出现VBA_Error'1004'

[英]VBA_Error '1004' while using the InStr Function

早上好,

我想使用For循环比较两张纸的内容,并在满足条件的情况下执行一些操作。

For j = 1 To ligne_Brouillon

    If InStr(Sheets("Brouillon").Cells(j, 7).Text, Sheets("Data").Cells(i, 18).Text) <> 0 Then  'compare two cells' content

        For k = 8 To colonne_brouillon

            If InStr(Sheets("Brouillon").Cells(j, k).Text, Sheets("Data").Cells(i, 20).Text) <> 0 Then  'if the first cell contents the keyword
                Sheets("Data").Cells(i, ma_Colonne).Text = Sheets("Brouillon").Cells(j, k).Text
            End If

        Next

    End If

Next

但是我尝试运行时遇到错误“ 1004”。 我不知道谁来解决这个问题。 如果您有任何想法,请给我一些建议。 提前致谢。


当然,我的目标是填写质量控制表,其中包含测试的名称和结果。 测试和结果分别保留在某些文件中。 我的工作是在进行新测试时填写表格。 对于每个测试点,标准都是相同的(例如颜色,形式等),我只需要用正确的结果填充正确的单元格即可。 我想打开一个新表并用所有结果填充它,然后用这个新表填充表。 我认为这样会更容易。

这是完整的代码:

Private Sub Button_Importer_Click()

    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Brouillon"

    list_de_controle = "TEXT;" & listPath  'here I have a list to open

    For i = 1 To nombre_Ligne  'From the first to the last line in "Data"sheet

        mon_Objet = Cells(i, 15).Text + "_" + Cells(i, 17).Text
        Open listPath For Input As #1  'open the list of tests

        Do While Not EOF(1)
            Line Input #1, nom_de_Fich
            If InStr(nom_de_Fich, mon_Objet) > 0 Then 
           'if this file is the correct test file I want to open

                mfile = Dir(nom_de_Fich & "*.*")
                If mfile <> "" Then
                    GoTo_Brouillon  'go to the new sheet

                    Open nom_de_Fich For Input As #2  'open the file
                        Insérer_contenu
                    Close #2

                End If

                compléter_Tableau  'with this new sheet, I will fill the table

            End If

        Loop
        Close #1

    Next

End Sub

对于Subcompéter_Tableau():

Public Sub compléter_Tableau()

    Dim ligne_Brouillon
    Sheets("Brouillon").Range("A1").Select
    ActiveCell.End(xlDown).Select
    ligne_Brouillon = Selection.Row
    ActiveCell.End(xlToRight).Select
    colonne_brouillon = Selection.Column

    For j = 1 To ligne_Brouillon

        If InStr(Sheets("Brouillon").Cells(j, 7).Text, Sheets("Data").Cells(i, 18).Text) <> 0 Then

            For k = 8 To colonne_brouillon

                If InStr(Sheets("Brouillon").Cells(j, k).Text, Sheets("Data").Cells(i, 20).Text) <> 0 Then
                    Sheets("Data").Cells(i, ma_Colonne).Text = Sheets("Brouillon").Cells(j, k).Text
                End If

            Next

        End If

    Next
End Sub
Private Sub Button_Importer_Click()

    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Brouillon"

    list_de_controle = "TEXT;" & listPath  'here I have a list to open

    For i = 1 To nombre_Ligne  'From the first to the last line in "Data"sheet

        mon_Objet = Cells(i, 15).Text + "_" + Cells(i, 17).Text
        Open listPath For Input As #1  'open the list of tests

        Do While Not EOF(1)
            Line Input #1, nom_de_Fich
            If InStr(nom_de_Fich, mon_Objet) > 0 Then 
           'if this file is the correct test file I want to open

                mfile = Dir(nom_de_Fich & "*.*")
                If mfile <> "" Then
                    GoTo_Brouillon  'go to the new sheet

                    Open nom_de_Fich For Input As #2  'open the file
                        Insérer_contenu
                    Close #2

                End If

                compléter_Tableau i  ' pass i into the other sub so it can be used

            End If

        Loop
        Close #1

    Next
    End Sub

并更改第二个Sub来接受参数,以便它知道i是什么:

Public Sub compléter_Tableau(byVal i)

    Dim ligne_Brouillon
    ligne_Brouillon = Sheets("Brouillon").Cells(Sheets("Brouillon").Rows.Count, "A").End(xlUp).Row
    colonne_brouillon = Sheets("Brouillon").Cells("A", Sheets("Brouillon").Columns.Count).End(xlToLeft).Column

    For j = 1 To ligne_Brouillon

        If InStr(Sheets("Brouillon").Cells(j, 7).Text, Sheets("Data").Cells(i, 18).Text) <> 0 Then

            For k = 8 To colonne_brouillon

                If InStr(Sheets("Brouillon").Cells(j, k).Text, Sheets("Data").Cells(i, 20).Text) <> 0 Then
                    Sheets("Data").Cells(i, ma_Colonne).Text = Sheets("Brouillon").Cells(j, k).Text
                End If

            Next

        End If

    Next
End Sub

我还简化了选择最后一行和最后一列的方法; 尝试避免使用ActiveCellSelect因为实际上在任何情况下都不需要它们,并且会降低速度

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM