简体   繁体   English

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

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

Good morning, 早上好,

I'd like to use a For cycle to compare two sheets' content, and do something if the condition is satisfied. 我想使用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

but I've met the error '1004' when I tried to run. 但是我尝试运行时遇到错误“ 1004”。 I don't know who to fix this. 我不知道谁来解决这个问题。 Please give me some advices if you got some ideas. 如果您有任何想法,请给我一些建议。 Thanks in advance. 提前致谢。


Sure, my object is to fill a table of quality control, which contains the name of tests and the results. 当然,我的目标是填写质量控制表,其中包含测试的名称和结果。 The tests and the results are reserved separately in some files. 测试和结果分别保留在某些文件中。 My work is to fill the table when I have a new test. 我的工作是在进行新测试时填写表格。 And for each point of test, the criteria are the same (such as the colour, the form etc.), and I just need to fill the correct cell with the correct result. 对于每个测试点,标准都是相同的(例如颜色,形式等),我只需要用正确的结果填充正确的单元格即可。 I want to open a new sheet and fill it with all the results and then fill the table with this new sheet. 我想打开一个新表并用所有结果填充它,然后用这个新表填充表。 I think that could easier. 我认为这样会更容易。

Here is the complete code: 这是完整的代码:

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

and for the Sub compéter_Tableau(): 对于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

and change the second Sub to accept the parameter so it knows what i is: 并更改第二个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

I've also simplified your method for selecting the last row and column; 我还简化了选择最后一行和最后一列的方法; try to avoid the use of ActiveCell , and Select s as they are not required in virtually any instance and slow things down 尝试避免使用ActiveCellSelect因为实际上在任何情况下都不需要它们,并且会降低速度

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

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