diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index a98e353..4271abe 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -431,8 +431,7 @@ function webform_results_download_form(&$form_state, $node) {
     '#default_value' => TRUE
   );
 
-  $form['actions'] = array('#type' => 'markup');
-  $form['actions']['submit'] = array(
+  $form['submit'] = array(
     '#type' => 'submit',
     '#value' => t('Download'),
   );
@@ -516,15 +515,27 @@ function webform_results_download_form_submit(&$form, &$form_state) {
     $options['sids'] = webform_download_sids($form_state['values']['node']->nid, $form_state['values']['range']);
   }
 
-  $export_info = webform_results_export($form_state['values']['node'], $form_state['values']['format'], $options);
+  // Only get the data if we have any to receieve. For ranged options we may
+  // end up with no results, which is OK, and we should get no results in those
+  // cases to avoid confusion.
+  $export_info = array();
+  if ($options['range_type'] == 'all' || !empty($options['sids'])) {
+    $export_info = webform_results_export($form_state['values']['node'], $form_state['values']['format'], $options);
+  }
 
   // If webform result file should be downloaded, send the file to the browser,
   // otherwise save information about the created file in $form_state.
-  if ($options['download']) {
-    webform_results_download($form_state['values']['node'], $export_info);
+
+  if ($export_info['row_count'] != 0) {
+    if ($options['download']) {
+      webform_results_download($form_state['values']['node'], $export_info);
+    }
+    else {
+      $form_state['export_info'] = $export_info;
+    }
   }
   else {
-    $form_state['export_info'] = $export_info;
+    drupal_set_message(t('No submissions were found with the given range options.'), 'error');
   }
 }
 
@@ -738,10 +749,14 @@ function webform_results_export($node, $format = 'delimited', $options = array()
   if (!empty($options['sids'])){
     $filters['sid'] = $options['sids'];
   }
+
+  // Nothing was found or returned, so we should not run the export code
+  // or we may receive errors.
+  $row_count = 0;
+
   $submissions = webform_get_submissions($filters);
 
   // Generate a row for each submission.
-  $row_count = 0;
   foreach ($submissions as $sid => $submission) {
     $row_count++;
 
@@ -799,7 +814,6 @@ function webform_results_export($node, $format = 'delimited', $options = array()
   $export_info['file_name'] = $file_name;
   $export_info['exporter'] = $exporter;
   $export_info['row_count'] = $row_count;
-  $export_info['last_sid'] = $sid;
 
   return $export_info;
 }
@@ -822,11 +836,11 @@ function webform_results_download($node, $export_info) {
   @unlink($export_info['file_name']);  // Clean up, the @ makes it silent.
 
   // Update user last downloaded sid if required.
-  if ($export_info['options']['range_type'] != 'range' && $export_info['row_count'] > 0) {
+  if ($options['range_type'] != 'range' && $row_count > 0) {
     // Delete existing record.
     db_query('DELETE FROM {webform_last_download} WHERE nid = %d AND uid = %d', $node->nid, $user->uid);
     // Write new record.
-    db_query('INSERT INTO {webform_last_download} (nid, uid, sid, requested) VALUES (%d, %d, %d, %d)', $node->nid, $user->uid, $export_info['last_sid'], time());
+    db_query('INSERT INTO {webform_last_download} (nid, uid, sid, requested) VALUES (%d, %d, %d, %d)', $node->nid, $user->uid, $sid, time());
   }
 
   exit();
