У меня возникла проблема с тем, чтобы мои циклы правильно пропускали записи. У меня есть несколько записей, которые необходимо обновить у мастера из многих работоргов. Каждое подчиненное устройство имеет другое имя (его пользователя), и мне нужно сделать мой цикл «Обновление» более эффективным, только сравнивая те записи, которые содержат имя пользователя, а затем сравнивает уникальные идентификаторы, а не то, что он в настоящее время делает, который сравнивает все уникальные идентификаторы, чтобы найти совпадение.Проблема с данными соответствует
Моя текущая командная кнопка просто ищет имя пользователя в столбце, и если счетчик больше 0, он вызывает модуль для обновления записей для этого пользователя.
В столбце Master и Slave 1 всегда есть уникальный идентификатор записи, а столбец 2 всегда является пользователем, которому назначена запись. Вот мой текущий тест кодирования (станет шаблоном для книг других пользователей):
Option Explicit
Public Sub Agnes_Update()
Dim owb As Workbook
Dim Master, Slave As Worksheet
Dim fpath As String
Dim i, j As Integer
fpath = Application.ActiveWorkbook.Path & "\Agnes.xlsx"
Set owb = Application.Workbooks.Open(fpath)
Set Master = ThisWorkbook.Worksheets("Allocated")
Set Slave = owb.Worksheets("Work")
For j = 2 To 10 '(the master sheet)
For i = 2 To 10 '(the slave sheet)
'if ID cell is blank exit - ends loop when all updates are completed
If Trim(Slave.Cells(j, 1).Value2) = vbNullString Then Exit For
'if column 2 of master does not contain the current username being
'updated then move to next record
If Master.Cells(j, 2).Value = "Agnes" Then
'if unique ID in column 1 matches slave from master then begin
'updating of required cells
If Master.Cells(i, 1).Value2 = Slave.Cells(j, 1).Value2 Then
Master.Cells(i, 4).Value = Slave.Cells(j, 4).Value
Master.Cells(i, 5).Value = Slave.Cells(j, 5).Value
Master.Cells(i, 6).Value = Slave.Cells(j, 6).Value
Master.Cells(i, 7).Value = Slave.Cells(j, 7).Value
Master.Cells(i, 8).Value = Slave.Cells(j, 8).Value
Master.Cells(i, 9).Value = Slave.Cells(j, 9).Value
Master.Cells(i, 10).Value = Slave.Cells(j, 10).Value
Master.Cells(i, 11).Value = Slave.Cells(j, 11).Value
Master.Cells(i, 12).Value = Slave.Cells(j, 12).Value
Master.Cells(i, 13).Value = Slave.Cells(j, 13).Value
Master.Cells(i, 14).Value = Slave.Cells(j, 14).Value
Master.Cells(i, 15).Value = Slave.Cells(j, 15).Value
Master.Cells(i, 16).Value = Slave.Cells(j, 16).Value
Master.Cells(i, 17).Value = Slave.Cells(j, 17).Value
Master.Cells(i, 18).Value = Slave.Cells(j, 18).Value
Master.Cells(i, 19).Value = Slave.Cells(j, 19).Value
Master.Cells(i, 20).Value = Slave.Cells(j, 20).Value
Master.Cells(i, 21).Value = Slave.Cells(j, 21).Value
Master.Cells(i, 22).Value = Slave.Cells(j, 22).Value
Master.Cells(i, 23).Value = Slave.Cells(j, 23).Value
End If
End If
Next
Next
Workbooks("Agnes").Close
End Sub
Я предпочитаю использовать метод Master.cells = Slave.cells
как некоторые из подчиненных элементов заблокированы, чтобы запретить пользователю о внесении изменений в данные, и в будущем позиция некоторых данных может изменить столбцы, поэтому я просто исправлю, какой главный столбец = какой подчиненный столбец. Я понимаю, что могу установить код, чтобы разблокировать книгу, но это еще больше кодирует простой бит обновления.
Я считаю, что текущая проблема с кодом лежит в строке If Master.Cells(j, 2).Value = "Agnes" Then
, так как удаление этой строки позволяет коду пройти через все уникальные идентификаторы, чтобы найти и обновить мастер во всех совпадениях, но я бы предпочел только попробовать сопоставлять уникальные идентификаторы, когда имя пользователя найдено в столбце 2, чтобы попытаться сделать код более быстрым и эффективным.
Помогите мне исправить этот код для меня?
| Это не совершенно ясно, что здесь ошибка. Подпрограмма никогда не вводит внутренний 'If', даже если имя в строке« Agnes »? Нужно ли обрезать ведущие или конечные пробелы из «Master.Cells» (j, 2) .Value'? – stucharo
Привет @stucharo Извинения, моя проблема - лист Allocated никогда не обновляет запись «Agnes» от подчиненного устройства, даже если он находится в ячейке, и я не могу заставить его это сделать. – Wowdude