2015-08-20 4 views
0

Я не был уверен, как сформулировать этот вопрос, поэтому я представил шаги.Управление значениями запросов SQL-запроса к ячейкам Excel

шаги: (VBA-Excel)

  1. данных Вставляется в базу данных. Запрос выполняется, чтобы вытащить все компании, у которых есть нарушения, и вставляет их в excel.
  2. У меня тогда есть цикл, который принимает значение каждого названия компании и вставляет значение ячейки (название компании) в другой запрос, который извлекает электронные письма.

Проблема заключается в том, что в некоторых компаниях есть два электронных адреса. Таким образом, запрос дб выглядит следующим образом:

  • Компания/Email
  • Microsoft/EMAIL1 @ ...
  • Microsoft/email2 @ ...
  • Sony/электронная почта @ ...

Когда запрос по электронной почте побежал используя (надеюсь, что это помогает)

n = 1 
Do While IsEmpty(Range("A" & n).Value) <> True 'If Cells in Col A is not empty 
    CSCust = Range("A" & n).Value 
    qryEmail = "SELECT Email FROM dbo.tblPHEmails WHERE SamplePoint LIKE '" & CSCust & "'" 
    Set connect = New ADODB.Connection 
    connect.Open (strConnectStr) 
    ' 
    'Clean Stream Query 
    Set recordSetCSEmail = New ADODB.recordSet 
    recordSetCSEmail.Open qryEmail, connect 
    Range("C" & n).CopyFromRecordset recordSetCSEmail 
    n = n + 1 
Loop 

В Excel это снова пишет одно электронное письмо, потому что оно автоматически вводит значения в следующую строку, где проверяется следующая компания (заменяется электронной почтой этой компании). Я хотел бы получить данные так, где это будет, как:

  • Company/Email/EMAIL2
  • Microsoft/EMAIL1 @ .../email2 @ ...
  • Sony/электронная почта @ .. .

Я знаю, что это немного долго (я прошу прощения), возможно ли это? Или я должен пойти и отредактировать список электронной почты в БД, чтобы каждая компания могла иметь более одного поля электронной почты?

+0

Я бы изменил заявление sql, чтобы дать вам оба письма в одной строке. С помощью вложенного оператора select вы можете вернуть второе письмо или нулевое значение, если оно не существует. И прежде чем спросить; для этого потребуется знание вашей платформы БД и другой информации. Тогда это будет новый вопрос. –

+0

Это именно то, что я сделал, и все получилось отлично! – JustoShow

ответ

0

попробуйте добавить максимальное количество строк, которые будут скопированы при помощи:

Range("C" & n).CopyFromRecordset recordSetCSEmail, 1 
+0

Это была хорошая попытка. Теперь мне просто нужно выяснить, как получить второе письмо в следующем столбце. – JustoShow

0

я понял, решение после перехода логики снова и снова. Во время цикла я просто проверю, было ли добавлено дополнительное электронное письмо в ячейке ниже (не более двух писем для каждой компании) и переместите его в нужное место.