Сначала отсортируйте диапазон planillaDest по возрастанию по столбцу A, затем:
Dim lookupRange As Range
Set lookupRange = planillaDestino.Range("A2:A" & filaDestinoUltima)
For filaIndiceFuente = 2 To filaFuenteUltima
criterioFuente = planillaFuente.Cells(filaIndiceFuente, "A").Value
Dim matchRow As Long
matchRow = Application.WorksheetFunction.Match(criterioFuente, lookupRange, 1)
If lookupRange.Cells(matchRow, 1).Value = criterioFuente Then
'CELLS GET TO THE OTHER FILE HERE
' If row to move from planillaFuente to planillaDest, then:
planillaDest.Cells(matchRow + 1, "P").Value = planillaFuente.Cells(filaIndiceFuente, "D").Value
End If
Next filaIndiceFuente
Вы закрываете окно перед тем, как установить DialogResult? Вы должны опубликовать весь контент ваших обработчиков событий кнопки.
У меня была похожая проблема, но моя проблема возникла из кода в моем заключительном заявлении. Я пытался Dispose () List до закрытия окна, а затем установил свойство List <> на null ... оно задыхалось от свойства set, когда я пытался установить его значение на null, поэтому я придумал следующий неуклюжий обходной путь в моем методе set set и все работало потом:
List<SettingItem> settingItems;
public IEnumerable<SettingItem> Settings
{
get
{
return settingItems.OrderBy(t => t.Name).AsEnumerable();
}
set
{
if (value == null)
{
settingItems.Clear();
}
else
{
settingItems = value.ToList();
}
}
}
Во-первых, вы должны принять во внимание, что он возвращает значение типа "пустое значение" (bool?), Поэтому, чтобы сравнить его или установить для другой переменной, вы должны преобразовать его в regular bool
bool result = (bool)myWindow.DialogResult;
Что касается значения null ... Я не понимаю, почему это должно происходить, если только он каким-то образом не возвращается в значение null ПОСЛЕ того, как оно установлено в true или false. Вы можете показать свой код?
РЕДАКТИРОВАТЬ:
Ваш код работал у меня нормально, это то, что у меня во втором окне:
private void button2_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
И в Window1:
private void window1_Loaded(object sender, RoutedEventArgs e)
{
Window2 win = new Window2();
bool? result = win.ShowDialog();
if (result.HasValue && result.Value)
{
//it DID get here
}
}
Есть ли большая разница?
DialogResult
- это логическое значение, допускающее значение NULL. Однако вам не нужно использовать его, чтобы получить значение.
bool? result = myWindow.ShowDialog();
if (result ?? false)
{
// snip
}
?? устанавливает значение по умолчанию для возврата, если результат нулевой. Больше информации: Использование типов, допускающих значение NULL (Руководство по программированию на C #)
Что касается исходного вопроса, единственный раз, когда я видел и отслеживал эту проблему, это когда окно удалялось между установкой DialogResult и закрытием окна. К сожалению, единственный совет, который я могу предложить, - это пройтись по вашему коду и проверить порядок операций. Я полагаю, что я "исправил" это, установив DialogResult
, а затем явно закрыв окно.