2010-05-21 8 views
1

Je ne suis pas très familier avec VBA, mais besoin de l'utiliser pour un nouveau programme de logiciel que je me sers (pas Microsoft lié)Chargement des données en VBA à partir d'un fichier texte

Je dispose d'un fichier texte qui contient des colonnes de données Je voudrais lire dans VBA. En particulier, le fichier texte a 4 entrées par ligne. Ainsi je voudrais charger dans les vecteurs de colonne (N par 1).

Le fichier texte est séparé par un espace entre chaque entrée. Par exemple, je veux charger dans la colonne un et l'enregistrer comme tableau A, puis la colonne deux et enregistrer comme tableau B, puis la colonne trois et enregistrer comme tableau C, puis la colonne quatre et enregistrer comme tableau D.

Cet extrait de code ci-dessous trouvé de http://www.tek-tips.com/faqs.cfm?fid=482 est quelque chose que je trouve qui peut charger dans le texte à un tableau, mais je dois l'adapter pour pouvoir enregistrer les colonnes que différents tableaux comme indiqué ci-dessus ...

Open "MyFile.txt" For Input As #1
ReDim Txt$(0)
Do While Not EOF(1)
ReDim Preserve Txt$(UBound(Txt$) + 1)
Input #1, Txt$(UBound(Txt$))
Loop
Close #1

+0

Que voulez-vous dire par enregistrer la colonne comme variable? Voulez-vous stocker ces colonnes sous forme de tableaux? – Marek

Répondre

0

Il y a peu de questions dans votre question, mais je suggère d'utiliser "Texte à la colonne"

Si vous n'êtes pas très familier avec la programmation VBA essayez d'enregistrer macro avec ces étapes:

  1. Importer un fichier Excel
  2. colonne sélectionnez un
  3. sélectionnez « Texte à colonnes » forme de menu Outils
  4. délimité par l'espace Choisissez

de cette façon, vous obtiendrez tableau de données que vous avez demandé, assignant maintenant toutes les variables vous voulez ne devrait pas être un problème.

EDIT (sans utiliser Excel):

Jetez un coup d'oeil sur cette méthode FSO.

en remplaçant

MsgBox strLing

avec une sorte de fonction split, comme

strTemp = Split(strLine, " ") 

Vous serez en mesure de boucle à travers toutes les valeurs dans votre fichier source , cela fonctionnerait-il?

+0

oui ce serait un tableau dans VBA .... comme je l'ai dit ce n'est pas lié à Microsoft donc tout dans Excel ne le coupe pas ..... Je veux prendre les vecteurs colonne A, B, C, D qui sont tous de taille N par 1 que je vais charger dans le fichier texte .... Ensuite, je fais le traitement sur ces vecteurs de colonne avec une boucle for plus tard sur qui est déjà implémenté et doit être fait en VBA, J'ai juste besoin de charger dans les vecteurs de colonnes qui sont des tableaux .. hmmm – omegayen

+0

obtenir l'erreur « Attendons un scalar.var existant » (Set objFSO = CreateObject (« Scripting.FileSystemObject »)) – omegayen

+0

qui ne semble pas familier pour moi :/ Travaillez-vous dans VBEditor? Avez-vous ajouté une référence à votre projet (Outils> Références> Ajouter> scrrun.dll)? – Marek

1

Pour cet exemple, vous aurez besoin d'un fichier appelé schema.ini dans le même répertoire que le fichier texte. Il doit contenir:

[Import.txt] 
Format=Delimited() 

Où IMPORT.TXT est le nom du fichier (http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx).

Vous pouvez ensuite utiliser ce qui devrait fonctionner en VBScript ou VBA avec très peu de manipulation:

Set cn = CreateObject("ADODB.Connection") 

'Note HDR=Yes, that is, first row contains field names ' 
'and FMT delimted, ie CSV ' 

strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Docs\;" _ 
& "Extended Properties=""text;HDR=Yes;FMT=Delimited"";" 

cn.Open strcon 

strSQL="SELECT * FROM Import.txt" _ 

set rs = createobject("adodb.recordset") 

rs.open strSQL,cn 

MsgBox rs(2) 
MsgBox rs.GetString 

La première boîte de message doit renvoyer la troisième colonne de la première ligne, il est un test qu'il fonctionne . La seconde boîte de message doit retourner le fichier entier, ne l'utilisez donc pas avec un grand ensemble. Le jeu d'enregistrements peut être manipulé ou vous pouvez utiliser .GetRows pour créer un tableau de valeurs (http://www.w3schools.com/ado/met_rs_getrows.asp)

1

Semble le problème restant à convertir d'un tableau de lignes en quatre tableaux de colonnes. Peut-être que cet extrait aide

Option Explicit 
Option Base 0 

Sub import() 
    Dim sTxt() As String 
    Dim sLine As Variant 
    Dim iCountLines As Long 
    Dim iRowIterator As Long 
    Dim i As Long 
    Dim sRow() As String 
    Dim sColumnA() As String 
    Dim sColumnB() As String 
    Dim sColumnC() As String 
    Dim sColumnD() As String 

    ' read in file ' 
    Open "MyFile.txt" For Input As #1 
    ReDim sTxt(0) 

    Do While Not EOF(1) 
     Input #1, sTxt(UBound(sTxt)) 
     ReDim Preserve sTxt(UBound(sTxt) + 1) 
    Loop 
    Close #1 

    ' dim array for each columns ' 
    iCountLines = UBound(sTxt) 
    Debug.Print "working with ", iCountLines, "lines" 
    ReDim sColumnA(iCountLines) 
    ReDim sColumnB(iCountLines) 
    ReDim sColumnC(iCountLines) 
    ReDim sColumnD(iCountLines) 

    ' "transpose" sTxt ' 
    iRowIterator = 0 
    For Each sLine In sTxt 
     sRow = Split(sLine, " ") 
     If UBound(sRow) = 3 Then 
      sColumnA(iRowIterator) = sRow(0) 
      sColumnB(iRowIterator) = sRow(1) 
      sColumnC(iRowIterator) = sRow(2) 
      sColumnD(iRowIterator) = sRow(3) 
      iRowIterator = iRowIterator + 1 
     End If 
    Next sLine 

    ' now work with sColumnX ' 
    Debug.Print "Column A" 
    For i = 0 To iCountLines 
     Debug.Print sColumnA(i) 
    Next i 

End Sub 
Questions connexes