2011-11-09 3 views
4

J'ai besoin de lire le tableau de données comme dans picure en utilisant vba. J'ai utilisé Msg.Body pour lire le corps du texte mais en fait j'ai besoin de trouver la première ligne comme en-tête et reposer comme champ de données et mettre à jour le tableau SGBD en conséquence.Alors est-il possible de lire la table comme je le ferais? OutlookComment lire le tableau collé dans le corps du message Outlook en utilisant vba?

+0

Quel est le format de corps de courrier? HTML, texte riche? Quelle est la source de la table - a-t-elle été collée à partir de Word/Excel? –

+0

Pouvez-vous diviser le corps de l'e-mail en utilisant Split (Msg.Body, vbCrLf)? Le premier jeton de tableau sera l'en-tête. Tout de LBound (Split (Msg.Body, vbCrLf)) + 1 à UBound() sera les données. – JimmyPena

+0

@TimWilliams oui c'était collé d'excel !!! – kinkajou

Répondre

6

Cette procédure exemple devrait aider. J'ai recréé votre tableau dans Excel, je l'ai collé dans un email Outlook et je l'ai envoyé à moi-même. Ensuite, j'ai utilisé cette procédure pour lire les valeurs de "cellule".

Sub GetLines() 

Dim msg As Outlook.mailItem 
Dim rows As Variant 
Dim numberofColumns As Long 
Dim numberofRows As Long 
Dim headerValues As Variant 
Dim headerRow() As String 
Dim data() As String 
Dim i As Long, j As Long 

' get currently selected email 
Set msg = ActiveExplorer.Selection.item(1) 

' tokenize each line of the email 
rows = Split(msg.Body, vbCrLf) 

' calculate array size 
numberofColumns = Len(rows(0)) - Len(Replace(rows(0), Chr(9), "")) 
numberofRows = UBound(rows) + 1 

' put header row into array 
ReDim headerRow(1 To numberofColumns) 
headerValues = Split(rows(0), Chr(9)) 

For i = 1 To numberofColumns 
    headerRow(i) = Trim$(headerValues(i - 1)) 
Next i 

' calculate data array size 
numberofRows = numberofRows - 1 

' put data into array 
ReDim data(1 To numberofRows, 1 To numberofColumns) 

    For i = 1 To numberofRows 
    For j = 1 To numberofColumns 
     data(i, j) = Trim$(Split(rows(i), Chr(9))(j - 1)) 
    Next j 
    Next i 

End Sub 

D'abord, nous marquons chaque ligne de l'email dans un tableau. Nous calculons la taille du tableau, puis créons un tableau pour ne contenir que la première ligne de la table (l '"en-tête").

Ensuite, nous soustrayons un du nombre de lignes parce que nous allons passer la ligne d'en-tête. Nous parcourons ensuite chaque ligne, la divisons et parcourons ses valeurs en boucle, en les affectant à notre tableau 2D au fur et à mesure. En fin de compte, la variable "headerRow" peut être itérée pour récupérer les valeurs de champs que vous souhaitez utiliser pour votre SGBD. La variable "data" contient uniquement les valeurs correspondant à chaque champ. Ainsi, headerRow (1) et data (n, 1) doivent correspondre aux valeurs de la première colonne de votre tableau.

+1

+1 bien fait. – brettdj

Questions connexes