Настройте пять констант ( Const
) в соответствии со своими потребностями.
Sub UpdateMaster()
Const cMaster As String = "Master" ' Master Worksheet Name
Const cSample As String = "Sample" ' Sample Worksheet Name
Const cCols As String = "A:D" ' Data Columns Range Address (or "1:4")
Const cLRC As Variant = "A" ' Last-Row Column Letter/Number (or 1)
Const cFR As Long = 2 ' First Row Number
Dim rng As Range ' Last Used Cell in Last-Row Column of both
' Worksheets, Sample/Master/Unique Range
Dim vntM As Variant ' Master Array
Dim vntS As Variant ' Sample Array
Dim vntR As Variant ' Row Array
Dim vntU As Variant ' Unique Array
Dim MNoR As Long ' Master Number of Rows
Dim SNoR As Long ' Sample Number of Rows
Dim Cols As Long ' Number of Columns in Data Columns Range
Dim i As Long ' Sample/Unique Array Row Counter
Dim j As Long ' Sample/Master/Unique Array Column Counter
Dim k As Long ' Master Array Row Counter
Dim m As Long ' Row Array Row Count(er)
' Speed up.
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
' Handle errors.
On Error GoTo ErrorHandler
' In (Last-Row Column of) Sample Worksheet
With ThisWorkbook.Worksheets(cSample).Columns(cLRC)
' Create a reference to Last Used Cell.
Set rng = .Find("*", , xlFormulas, , xlByColumns, xlPrevious)
' Check if no data in column.
If rng Is Nothing Then
MsgBox "No data in column '" & Split(.Cells(1).Address, "$")(1) _
& "'.", vbCritical, "Column Empty"
GoTo ProcedureExit
End If
' Calculate Sample Number of Rows.
SNoR = rng.Row - cFR + 1
' Create a reference to Sample Range.
Set rng = .Parent.Columns(cCols).Rows(cFR).Resize(SNoR)
' Copy Sample Range to Sample Array.
vntS = rng
End With
' In (Last-Row Column of) Master Worksheet
With ThisWorkbook.Worksheets(cMaster).Columns(cLRC)
' Create a reference to Last Used Cell.
Set rng = .Find("*", , xlFormulas, , xlByColumns, xlPrevious)
' Check if no data in column.
If rng Is Nothing Then
MsgBox "No data in column '" & Split(.Cells(1).Address, "$")(1) _
& "'.", vbCritical, "Column Empty"
GoTo ProcedureExit
End If
' Calculate Master Number of Rows.
MNoR = rng.Row - cFR + 1
' In Data Columns Range
With .Parent.Columns(cCols)
' Calculate Number of Columns in Data Columns Range.
Cols = .Columns.Count
' Create a reference to Master Range.
Set rng = .Rows(cFR).Resize(MNoR)
' Copy Master Range to Master Array.
vntM = rng
End With
End With
' Resize Row Array to Sample Number of Rows (as big as it could get).
ReDim vntR(1 To SNoR)
' Loop through rows of Sample Array.
For i = 1 To SNoR
' Loop through rows of Master Array.
For k = 1 To MNoR
' Check if value of element at current row in 1st column of Source
' Array is equal to the value of element at current row in 1st
' column of Master Array.
If vntS(i, 1) = vntM(k, 1) Then ' Match FOUND.
' Loop through the rest of the columns (to update the values).
For j = 2 To Cols
' Write value of element at current row in current column
' of Source Array to element at current row in current
' column of Master Array.
vntM(k, j) = vntS(i, j)
Next
' Stop looping through rows of Master Array (unique values).
Exit For
End If
Next
' Check if no match was found using the 'For Next Trick' i.e. when the
' for next loop finishes uninterupted, the value of the 'counter' is
' by 1 greater than the 'end' (VBA Help: "For counter = start To end").
If k = MNoR + 1 Then
' Count the number of rows in Row Array.
m = m + 1
' Write the current row number of Sample Array to Row Array.
vntR(m) = i
End If
Next
' Check if new values found.
If m > 0 Then
' Resize Row Array to number of new values found.
ReDim Preserve vntR(1 To m)
' Resize Unique Array to number of rows of Row Array and to Cols
' number of columns.
ReDim vntU(1 To m, 1 To Cols)
' Loop through rows of Row/Unique Array
For i = 1 To m
' Loop through columns of Sample/Unique Array.
For j = 1 To Cols
' Write the rows (containded in Row Array) of Sample Array to
' Unique Array.
vntU(i, j) = vntS(vntR(i), j)
Next
Next
End If
' Erase Row & Sample Arrays. All needed data is in Master & Unique Arrays.
Erase vntR
Erase vntS
' Copy Master Array to Master Range.
rng = vntM
' Erase Master Array.
Erase vntM
' Check if new values found.
If m > 0 Then
' Create a reference to Unique Range.
Set rng = rng.Cells(rng.Rows.Count, 1).Offset(1).Resize(m, Cols)
' Copy Unique Array to Unique Range.
rng = vntU
End If
MsgBox "The operation finished successfully.", vbInformation, "Success"
ProcedureExit:
' Speed down.
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
Exit Sub
ErrorHandler:
MsgBox "An unexpected error occurred. Error '" & Err.Number & "': " _
& Err.Description, vbCritical, "Error"
GoTo ProcedureExit
End Sub
Я получил это, есть исправление для него.
Хотя это больше не происходит с более новыми машинами / установками.
Не для того, чтобы просто связать свой сайт, но я столкнулся с этой проблемой и написал сообщение в блоге по теме . Проверьте это, там есть ссылки на дополнительную информацию по этой теме. Но резюмируя это, вот детали:
Проблема:
Веб-сайт выдает ошибку при попытке загрузить пользовательский веб-элемент управления. Как видите, в последнем выпуске мы добавили новый настраиваемый элемент управления к другому настраиваемому веб-элементу управления, который отображается по мере необходимости. Поскольку внешний / родительский элемент управления и новый дочерний элемент управления являются отдельными элементами управления в исходном коде, когда .Net Framework переходит на компиляцию одного из этих двух элементов управления и не перекомпилирует другой одновременно, у вас будет устаревший файл пытается ссылаться на старую версию сборки. Тот факт, что файл. Net framework добавляет случайную строку к имени сборки во время компиляции. Имя вновь скомпилированного файла и предыдущая версия файла вызывают несоответствие имени файла, и поэтому внешний / родительский элемент управления ищет файл, который больше не существует. .
Возможные обходные пути или временные исправления:
1) Установив для свойства пакетной обработки тега компиляции значение false в файле web.config
<compilation debug="false" batch="false" />
2) Вы также можете уменьшить частоту этого, установив с помощью свойства numRecompileBeforeAppRestart
:
<compilation debug="false" numRecompilesBeforeAppRestart="50" />
Подробнее см. в статье базы знаний 934839
Исправления проблемы после того, как она уже произошла:
1) Удалить временный ASP .Net файлы (это удаляет сайт)
2) Заставить родительский / внешний элемент управления перекомпилировать, отредактировать и сохранить файл кода. Это лучший вариант для исправления, чем №1, потому что это не приводит к отключению веб-сайта.
Мое предложение:
1) Сначала я думаю, что мы должны установить временное исправление №1 сверху, это может предотвратить все проблемы в будущем и может быть единственным ответом, который нам нужен.
2) Во-вторых, я бы загрузил и установил исправление 934839 от Microsoft в среде QA, чтобы убедиться, что оно не вызывает никаких проблем. После некоторого времени тестирования исправления в QA я бы установил исправление, чтобы получить постоянное исправление этой проблемы. В настоящее время мы можем удалить временные работы вокруг пункта 1.
Примечание:
2) Во-вторых, я бы загрузил и установил исправление 934839 от Microsoft в среде QA, чтобы убедиться, что оно не вызывает никаких проблем. После некоторого времени тестирования исправления в QA я бы установил исправление, чтобы получить постоянное исправление этой проблемы. В настоящее время мы можем удалить временные работы вокруг пункта 1.
Примечание:
2) Во-вторых, я бы загрузил и установил исправление 934839 от Microsoft в среде QA, чтобы убедиться, что оно не вызывает никаких проблем. После некоторого времени тестирования исправления в QA я бы установил исправление, чтобы получить постоянное исправление этой проблемы. В настоящее время мы можем удалить временные работы вокруг пункта 1.
Примечание: После установки Temp fix # 1 у меня больше не было этой проблемы. Я использую это исправление более 12 месяцев, и все в порядке!