[英]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 尝试避免使用
ActiveCell
和Select
因为实际上在任何情况下都不需要它们,并且会降低速度
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.