2016-04-19 8 views
0

Может кто-нибудь мне помочь? Я до сих пор довольно новичок в этом, и я не могу заставить его работать. Я пытаюсь:Excel VBA = отображаемые значения в диапазоне ячеек

Отображение данных в ряде ячеек по электронной почте. Я нашел этот код на сайте, чтобы я начал, но это для текстовых полей:

Sub Sample() 
    'Setting up the Excel variables. 
    Dim olApp As Object 
    Dim olMailItm As Object 
    Dim iCounter As Integer 
    Dim Dest As Variant 
    Dim SDest As String 

    'Create the Outlook application and the empty email. 
    Set olApp = CreateObject("Outlook.Application") 
    Set olMailItm = olApp.CreateItem(0) 

    'Using the email, add multiple recipients, using a list of addresses in column A. 
    With olMailItm 
     SDest = "" 
     For iCounter = 1 To WorksheetFunction.CountA(Columns(1)) 
      If SDest = "" Then 
       SDest = Cells(iCounter, 1).Value 
      Else 
      SDest = SDest & ";" & Cells(iCounter, 1).Value 
      End If 
     Next iCounter 

    'Do additional formatting on the BCC and Subject lines, add the body text from the spreadsheet, and send. 
     .BCC = SDest 
     .Subject = "FYI" 
     .Body = ActiveSheet.TextBoxes(1).Text 
     .Send 
    End With 

    'Clean up the Outlook application. 
    Set olMailItm = Nothing 
    Set olApp = Nothing 
End Sub 

Все работает, за исключением того, что это только одно текстовое поле, и у меня есть списки и whatsits в клетках, что мне нужно отправить слишком , Код, который я пытаюсь использовать это:

.body = Activesheet.range("B1:E1").Value 

вместо:

.body = ActiveSheet.TextBoxes(1).Text 

, но это просто посылает пустое сообщение. Любой совет?

ответ

1

Двойной транспонирование диапазон и использовать Join() метод:

.Body = Join$(WorksheetFunction.Transpose(WorksheetFunction.Transpose(Range("B1:E1").Value)), vbTab) 

Это транспонирование диапазона в единый массив размерности, которые затем могут быть соединены с заданным ограничителем с использованием методы Join().