diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp
--- a/src/qt/receivecoinsdialog.cpp
+++ b/src/qt/receivecoinsdialog.cpp
@@ -155,17 +155,41 @@
     OutputType address_type = model->wallet().getDefaultAddressType();
     address = model->getAddressTableModel()->addRow(AddressTableModel::Receive,
                                                     label, "", address_type);
-    SendCoinsRecipient info(address, label, ui->reqAmount->value(),
-                            ui->reqMessage->text());
-    ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this);
-    dialog->setAttribute(Qt::WA_DeleteOnClose);
-    dialog->setModel(model);
-    dialog->setInfo(info);
-    dialog->show();
-    clear();
 
-    /* Store request for later reference */
-    model->getRecentRequestsTableModel()->addNewRequest(info);
+    switch (model->getAddressTableModel()->getEditStatus()) {
+        case AddressTableModel::EditStatus::OK: {
+            // Success
+            SendCoinsRecipient info(address, label, ui->reqAmount->value(),
+                                    ui->reqMessage->text());
+            ReceiveRequestDialog *dialog = new ReceiveRequestDialog(this);
+            dialog->setAttribute(Qt::WA_DeleteOnClose);
+            dialog->setModel(model);
+            dialog->setInfo(info);
+            dialog->show();
+
+            /* Store request for later reference */
+            model->getRecentRequestsTableModel()->addNewRequest(info);
+            break;
+        }
+        case AddressTableModel::EditStatus::WALLET_UNLOCK_FAILURE:
+            QMessageBox::critical(this, windowTitle(),
+                                  tr("Could not unlock wallet."),
+                                  QMessageBox::Ok, QMessageBox::Ok);
+            break;
+        case AddressTableModel::EditStatus::KEY_GENERATION_FAILURE:
+            QMessageBox::critical(this, windowTitle(),
+                                  tr("Could not generate new %1 address")
+                                      .arg(QString::fromStdString(
+                                          FormatOutputType(address_type))),
+                                  QMessageBox::Ok, QMessageBox::Ok);
+            break;
+        // These aren't valid return values for our action
+        case AddressTableModel::EditStatus::INVALID_ADDRESS:
+        case AddressTableModel::EditStatus::DUPLICATE_ADDRESS:
+        case AddressTableModel::EditStatus::NO_CHANGES:
+            assert(false);
+    }
+    clear();
 }
 
 void ReceiveCoinsDialog::on_recentRequestsView_doubleClicked(
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -3611,6 +3611,9 @@
     if (spk_man) {
         spk_man->TopUp();
         result = spk_man->GetNewDestination(type, dest, error);
+    } else {
+        error = strprintf("Error: No %s addresses available.",
+                          FormatOutputType(type));
     }
     if (result) {
         SetAddressBook(dest, label, "receive");