Я искал решение и пробовал много вариантов, но ничего не работает.Ошибка времени выполнения '1004': Определенная пользователем или объектная ошибка VBA
Я также очень новичок в VBA, и вы можете подумать, что мой код нуждается в некоторой работе. Во что бы то ни стало, если это имеет смысл изменить его. Если вы можете быть конкретным и объяснить свои изменения, это было бы здорово.
У меня возникли проблемы с помощью следующей строки:
count = Application.WorksheetFunction.CountIf(Range(Cells(4, c), Cells(14, c)), Workbooks("Testing").Worksheets("Barrel MASTER").Range(BarrelSheet.Cells(r, "A")))
Я все переменные, определенные как лучше, как я знаю, как. Когда в режиме отладки и зависает над последним диапазоном в приведенной выше строке, я получаю желаемый результат. Вышеуказанная строка работала без переменной строки в BarrelSheet.Cells(r, "A")
. Он работал, когда это были ячейки («A15»).
Это остальная часть кода:
Sub Item_Location()
Dim c As Integer 'Counter to cycle through columns in cage inventory
Dim r As Integer 'Counter to cycle through Rows on MASTER sheets
Dim Finalcolumn As Integer
Dim ItemNum As Integer
Dim count As Integer
Dim multi As Integer 'Is there a repeat code in the same cage
Dim multioverall As Integer 'Is there a repeat code within 2 different cages
Dim ItemCode As String
Dim BarrelMasterB As Workbook
Dim BarrelSheet As Worksheet
Dim CodeCage As Worksheet
Set BarrelMasterB = Workbooks("Testing")
Set BarrelSheet = Workbooks("Testing").Worksheets("Barrel MASTER")
'Application.ScreenUpdating = False
'MsgBox ("This may take some time. When completed you will be prompted")
For r = 15 To 18
Workbooks("Testing").Activate
'ItemCode = Workbooks("Testing").Worksheets("Barrel MASTER").Range(BarrelSheet.Cells(r, "A")).Value
Finalcolumn = Range("L1").Column
ItemNum = Workbooks("Testing").Sheets(1).Range("B1000").End(xlUp).Row
multioverall = 0
'------------ Start of Searching for 1 Item code and 1 Cage -------------
multi = 0 'Resets to 0 for different cage
Workbooks.Open ("C:\Users\me\Desktop\Camp Spider Web\Inventory\Cage Inventory\Cage 1.xlsm") 'Opens Cage file to search for specified Code
Set CodeCage = Workbooks("Cage 1").Worksheets("Cage Inventory Coded")
For c = 5 To Finalcolumn
count = Application.WorksheetFunction.CountIf(Range(Cells(4, c), Cells(14, c)), Workbooks("Testing").Worksheets("Barrel MASTER").Range(BarrelSheet.Cells(r, "A"))) 'Counts how many
If count = 1 And multi = 1 Then 'If there was a double code in the same item row
MsgBox ("Repeated Code. Check Item Codes on Cage Inventory")
c = 12 'Ending the search
ElseIf count = 1 Then
Workbooks("Testing").Worksheets("Barrel MASTER").Range(Cells(r, "E")) = Workbooks("Cage 1").Worksheets("Cage Inventory Coded").Range("M4") 'returning cage #
multi = multi + 1 'Keep track of how many codes have been found
multioverall = multioverall + 1
If multioverall = 2 Then
MsgBox ("There as been a second Item code found in Cage 1")
GoTo Reset
End If
ElseIf count > 1 Then 'if there is a double item code in the same column
MsgBox ("Repeated Code. Check Item Codes on Cage 1 Inventory")
c = 12 'Ending the search for next column
End If
Next c
Workbooks("Cage 1").Close SaveChanges:=True 'Saves and closes above cage
'-------- Start of Searching for 1 Item code and 1 Cage ------------
Next r
'Application.ScreenUpdating = True
'MsgBox ("Now Complete")
End Sub
Некоторые из линий имеют "впереди, просто так, что, когда я тестирую его, он не бежит все , Могут также быть некоторые переменные, которые определены, которые я не использую. Это потому, что я много пробовал, и после этого я их удалю. Некоторые могут быть использованы позднее.
Код будет запущен, пока рабочая книга Barrel Master активна, но открывается рабочая тетрадь 1, которая активирует ее. Секция поиска (код между -----
) будет скопирована 32 раза, так как будет 32 разных книги информации, все в том же формате, что и для поиска. Спасибо заранее! Приветствия
спасибо. Это боль, которая не знает точно, что делать, поскольку я новичок в этом. Кажется, это имеет смысл, поскольку это не диапазон, и я использовал его, чтобы вернуть ценность. Есть ли другой момент, когда вы будете использовать .range, когда у вас есть только одна ссылка на ячейку? Снова Спасибо, что так много до сих пор это сделало трюк. – Walkintall
Обычно, если у вас уже есть переменная диапазона, вам не нужно обертывать ее в 'Range()', если вы не делаете что-то вроде «Range (topLeftCell, bottomRightCell)», чтобы получить прямоугольный диапазон. Чаще всего, когда вы используете 'Range()' для оценки строки, чтобы вернуть диапазон, например 'Range (" A1 ")', 'Range (" E10: F20 ")' или 'Range (Range (Range) A1 "). Значение)' (где A1 может содержать, например, «F40») –
Удивительное идеальное объяснение. Большое вам спасибо за вашу помощь. Я действительно ценю это, так как мой опыт VBA - это самообучение из Интернета и форумов. Все спасибо вам и другим, как вы. ура – Walkintall