Ваша проблема в том, что вы пытаетесь вставить строки в последнюю строку листа +1. Это за пределами.
Вместо этого:
Set xRg = Range("d:d")
xEndRow = xRg.Rows.Count + xRg.Row
Сделайте это:
Set xRg = Range("d:d")
xEndRow = Range("d1").End(xlDown).Row + 1
Таким образом, вы просто смотрите на населенные клетки вместо всех возможных.
Примечание
Я предпочитаю использовать что-то вроде xEndRow = Cells(Rows.Count, 1).End(xlUp).Row
, потому что поиск последней строки сверху может иногда быть неправильным, если набор данных не завершен. Возможно, вам придется поиграть с разными подходами, чтобы определить, что лучше для вашей ситуации.