Устранение неполадок в «условной» линии сортировки - PullRequest
1 голос
/ 24 мая 2019

Чувак, это сбивает с толку ...

Я создаю инструмент VBA в Excel.Помимо прочего, он отправляет электронные письма, основываясь на содержимом таблицы.Но прежде чем отправлять электронные письма, он отправляет их по адресу электронной почты.Он разбирается по домам, сначала сортируя таблицу по адресам электронной почты, а затем прокручивая снизу вверх, дедуплицируя соседние адреса электронной почты.

Последовательность сортировки приведена ниже (РЕДАКТИРОВАТЬ: для ясности добавлено больше строк):

' Sort the data by the EMAIL address
  Dim lastrow As Long
  lastrow = Cells(Rows.count, 1).End(xlUp).Row
  Sheets("Email_Tool").Range("A2:D" & lastrow).Sort key1:=Sheets("Email_Tool").Range("a2:a" & lastrow), order1:=xlAscending, Header:=xlNo

Вот дурацкая часть ...

  1. Когда я просто запускаю VBA-форму прямо из Excel, кажется, что алгоритм сортировки фактически не сортирует элементы должным образом.

  2. Когда я открываю панель разработчика и затем запускаю форму, кажется, что она сортируется должным образом, ИНОГДА, но чаще всего нет.

  3. Когда я открываюtable-which-содержит-значения, чтобы я мог видеть его прогресс, он каждый раз прекрасно выполняет сортировку.

В основном, электронная почта не становится домохозяйством.Причина этого в том, что строки не отсортированы.

Итак ...

Либо я неправильно понял что-то хитрое в том, как происходит сортировка, либо ...

.... Мне нужно придумать другой способ дедупликации моих данных (открытый для предложений).

Черт, я даже не могу понять, как УСТРАНИТЬ НЕИСПРАВНОСТЕЙ это глубже, чем это.Команда сортировки, которая иногда работает, а иногда не работает ?!При подаче абсолютно одинаковых данных в одинаковом порядке (даже из одного и того же буфера)?

Примечание на изображении: это обобщенный снимок экрана таблицы - используется только четыре фрагмента данных.Эти СЛЕДУЕТ сортировать по электронной почте, но они не ... если я не слежу за столом.(пытаясь понять, как загрузить изображение ...)

Открыть для предложений / идей и т. д.

1 Ответ

1 голос
/ 24 мая 2019

Range("a2:a" & lastrow) не предлагает явной ссылки на родительский лист.Если это не кодовая таблица частного листа (доступ к которой осуществляется с помощью щелчка правой кнопкой мыши на вкладке имени, а затем «Просмотреть код»), тогда можно догадаться, что такое активный лист.

Если это было предназначено для выполнения на листе с именем Электронные письма в той же книге, что и код, затем явно ссылаются на родительский лист.

Не сортируйте один столбец, если справа нет данных.Ссылка на все данные и сортировка на основе одного столбца как ключ .

sub something()

  dim lastrow as long

  with thisworkbook.worksheets("email")

    with .range("A1").currentregion

      .sort key1:=.cells(1), order1:=xldescending, header:=xlyes
      .removeduplicates Columns:=1, Header:=xlYes

    end with

  end with

end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...