Извините, вопрос не указан. Я попытался использовать Set
, чтобы помочь мне заполнить таблицу контроля качества, но появляется ошибка 10o4. Это кажется правильным для меня, и поэтому я не знаю, как его исправить. Поэтому, пожалуйста, взгляните на это, и оставьте комментарий, если у вас есть идея. Спасибо!Использование Set, но ошибка «Определенная приложением или объектная ошибка» отображается
Private Sub FillTarget(ByVal TargetSheet As String, ByVal DepositSheet As String, _
ByVal TargetRow As Integer, ByVal TargetColumn As String, _
ByVal DepositRow As Integer, ByVal DepositColumn As Integer)
Dim i, j, k As Integer
Dim OpenedFile As String
Dim myObject As String
Dim MarkRow As Integer
MarkRow = 1
Dim myData As String
Dim EndSearch As Boolean
Dim TargetCell As Range
Dim TargetTag As Range
Dim TargetType As Range
Dim TargetZone As Range
Dim TargetTest As Range
Dim DepositTag As Range
Dim DepositZone As Range
Dim DepositResult As Range
For i = 3 To TargetRow
With Worksheets(TargetSheet)
myObject = .Cells(i, 15).Text + "_" + Worksheets(TargetSheet).Cells(i, 17).Text
Set TargetCell = .Cells(i, TargetColumn) <==== Here comes the error
Set TargetTag = .Cells(i, 15)
Set TargetType = .Cells(i, 17)
Set TargetZone = .Cells(i, 18)
Set TargetTest = .Cells(i, 20)
End With
For j = MarkRow To DepositRow
With Worksheets(DepositSheet)
Set DepositTag = .Cells(j, 1)
Set DepositZone = .Cells(j, 2)
End With
If InStr(DepositTag.Text, myObject) <> 0 Then
OpenedFile = OpenedFile & DepositTag.Text & "|"
If InStr(DepositZone.Text, TargetZone.Text + ":") <> 0 _
Or InStr(TargetZone.Text, "/") <> 0 Then
For k = 2 To DepositColumn
With Worksheets(DepositSheet)
Set DepositResult = .Cells(j, k)
End With
If InStr(DepositResult.Text, TargetTest.Text) <> 0 Then
MarkRow = j
myData = DepositResult.Text
'Split_monData
'Derniere_Colonne
TargetCell.Value = myData
EndSearch = True
Exit For
End If
Next k
End If
End If
If EndSearch Then Exit For
Next j
EndSearch = False
Next i
End Sub
только FYI, ваш код можно сократить на тонну, разместив свой «Dim» s в одной строке. Вместо 'Dim range1 As Range' новой строки' Dim range2 As Range', все они могут быть записаны как «Dim range1 As Range, range2 As Range». Важно отметить, что вы должны всегда включать 'As Range' (или что бы то ни было объект), или эта конкретная переменная будет автоматически объявлена как Variant – RGA
Чтобы закончить комментарий @ RGA, вы должны написать' Option Explicit' над вашим ' Sub', поэтому вам всегда нужно объявлять переменные. Кроме того, будьте осторожны, когда объявляете 'Dim i, j, k As Integer' только' k' объявляется как integer, i и j будут как 'Variant' вам нужно написать' Dim i As Integer, j As Integer, k As Integer' –
Приятно познакомиться с вами @ Rémi! А для «Option Exolicit» вы могли бы объяснить немного? Я не знаю, почему и как его использовать. – Hiddenllyy