# VBS - Daten aus EXCEL auslesen



## rtd1978 (1. Juni 2005)

Hallo, ich könnte mal die Hilfe der VBS Community gebrauchen.

Ich habe hier 2 fast identische Excel Dateien.

Aufgabenstellung ist nun ein VBS Script zu schreiben, was mir die Daten ausliest, die Daten vergleicht und leere Stellen der ersten Datei mit dem Inhalt der gleichen Stelle der zweiten Datei beschreibt.

Grundlegendes Problem ist, dass ich zwar programmieren kann, aber leider fast keine VBS Kenntnisse habe.

Ein erster Schritt zur Lösung meines Problemes wäre, mir den korrekten Syntax zu nennnen, mit dem ich aus einem Excelsheet den Inhalt von Zellen auslesen kann und in eine andere Datei schreiben kann (Oder noch lieber in eine Variable, auf die ich zugreifen kann).

Danke für Hilfe,

René


----------



## Orakel (1. Juni 2005)

Hi rtd,

Öffne mal die erste Datei, und kopiere unten stehenden Code in ein Modul. Dann hast Du ein Makro "WorkWithTwoFiles", das Du ausführen kannst. Dieses Makro prüft in Spalte A der gerade geöffneten ersten Datei, ob ein Wert eingetragen ist. Wenn nein, wird der entsprechende Wert aus Datei2 in diese Zelle übertragen.


```
Option Explicit

Public Sub WorkWithTwoFiles()
    Dim nCounter                As Integer  ' Schleifenzähler
    Dim oWorkbook1              As Workbook ' Objekt auf erste Datei
    Dim oWorkbook2              As Workbook ' Objekt auf zweite Datei
    Dim szValue                 As String   ' Variable, die den Inhalt von Zellen aufnimmt


    Rem =======================================================================
    Rem == Aktive Datei der ersten Objektvariablen zuordnen.                 ==
    Rem =======================================================================
    Set oWorkbook1 = Workbooks(1)

    Rem =======================================================================
    Rem == Zweite Datei öffnen und Objektvariablen zuordnen.                 ==
    Rem =======================================================================
    Set oWorkbook2 = Application.Workbooks.Open("D:\Temp\Mappe2.xls")

    Rem =======================================================================
    Rem == n Zellen in einer Spalte untersuchen.                             ==
    Rem =======================================================================
    For nCounter = 1 To 20
        If oWorkbook1.Sheets(1).Cells(nCounter, 1).Value = "" Then
            szValue = oWorkbook2.Sheets("Tabelle1").Cells(nCounter, 1).Value
            oWorkbook1.Sheets("Tabelle1").Cells(nCounter, 1).Value = szValue
        End If
    Next nCounter

    Rem =======================================================================
    Rem == Zweite Datei wieder schliesen.                                    ==
    Rem =======================================================================
    oWorkbook2.Close

    Rem =======================================================================
    Rem == Objektverweis wieder entfernen.                                   ==
    Rem =======================================================================
    Set oWorkbook1 = Nothing
    Set oWorkbook2 = Nothing
End Sub
```

Hope it helpf
Das Orakel


----------



## rtd1978 (1. Juni 2005)

ok, das funktioniert wunderbar.

nur soll das tool von mehreren leuten angewandt werden. deshalb ist das einfügen von makros vielleicht ein bisschen umständlich.

ich versuche das ganze mal von einer externen datei ausführen zu lassen.
für weitere tipps diesbezüglich wäre ich sehr dankbar.  


gruß, René


----------



## rtd1978 (1. Juni 2005)

wie gesagt, ich kenn mich in vbs nicht so aus.

wieso bekomm ich bei dem oben gezeigten code (gespeichert in einer .vbs) bei ausführung immer diese fehlermeldung:

"Anweisungsende erwartet Zeile 4, Zeichen 33" - also nach "Dim nCounter" und
vor "As Integer". obwohl dieser ausdruck doch eine einheit darstellt?


----------



## Orakel (1. Juni 2005)

Ganz einfach, weil VBS nicht VBA ist.

Hier de VBS Code


```
Rem =======================================================================
Rem == Initialisiere Excel Objekt.                                       ==
Rem =======================================================================
Set oExcel = CreateObject("Excel.application")

Rem =======================================================================
Rem == Aktive Datei der ersten Objektvariablen zuordnen.                 ==
Rem =======================================================================
Set oWorkbook1 = oExcel.Workbooks.Open("D:\Temp\Mappe1.xls")

Rem =======================================================================
Rem == Zweite Datei öffnen und Objektvariablen zuordnen.                 ==
Rem =======================================================================
Set oWorkbook2 = oExcel.Workbooks.Open("D:\Temp\Mappe2.xls")

Rem =======================================================================
Rem == n Zellen in einer Spalte untersuchen.                             ==
Rem =======================================================================
For nCounter = 1 To 20
    If oWorkbook1.Sheets(1).Cells(nCounter, 1).Value = "" Then
        szValue = oWorkbook2.Sheets("Tabelle1").Cells(nCounter, 1).Value
        oWorkbook1.Sheets("Tabelle1").Cells(nCounter, 1).Value = szValue
    End If
Next

Rem =======================================================================
Rem == Zweite Datei wieder schliesen.                                    ==
Rem =======================================================================
oWorkbook2.Close
oWorkbook1.Save
oWorkbook1.Close

Rem =======================================================================
Rem == Objektverweis wieder entfernen.                                   ==
Rem =======================================================================
Set oWorkbook1 = Nothing
Set oWorkbook2 = Nothing
oExcel.Quit
```

Gruß
Das Orakel


----------



## rtd1978 (1. Juni 2005)

ah ja. hab grad bissl gegoogled. dim...as gehört also nicht in vbs.

der code ist einwandfrei. werd ihn morgen auf meine bedürfnisse zurechtschustern.

vielen dank an dich, gruß, René


----------



## rtd1978 (2. Juni 2005)

so, hab das script jetzt auf meine bedürfnisse zurechtgeschrieben. allerdings funktioniert es nicht.


```
Rem =======================================================================
Rem == Initialisiere Excel Objekt.                                       ==
Rem =======================================================================
Set oExcel = CreateObject("Excel.application")

Rem =======================================================================
Rem == Aktive Datei der ersten Objektvariablen zuordnen.                 ==
Rem =======================================================================
Set oWorkbook1 = oExcel.Workbooks.Open("C:\Dokumente und Einstellungen\res.TLAN\Eigene Dateien\VB\Scripte\ziel.xls")

Rem =======================================================================
Rem == Zweite Datei öffnen und Objektvariablen zuordnen.                 ==
Rem =======================================================================
Set oWorkbook2 = oExcel.Workbooks.Open("C:\Dokumente und Einstellungen\res.TLAN\Eigene Dateien\VB\Scripte\quelle.xls")

Rem =======================================================================
Rem == n Zellen in n Spalten untersuchen.                                ==
Rem =======================================================================

For xCount = 1 To 50                      							'Spalte
    	For iCount = 1 To 50             							'Zeile
                  syn_id = oWorkbook1.Sheets("Tabelle1").Cells(iCount, 1).Value
                  If oWorkbook1.Sheets("Tabelle1").Cells(iCount, xCount).Value = "" Then
                         For yCount = 1 To 50
	         		If(oWorkbook2.Sheets("Tabelle1").Cells(yCount, 1).Value = syn_id) Then
	                 		zeiledatei = yCount
	         		End If
			Next
                         zwischen = oWorkbook2.Sheets("Tabelle1").Cells(zeiledatei, xCount).Value
                         oWorkbook1.Sheets("Tabelle1").Cells(iCount, xCount).Value = zwischen
	         End If
	Next
Next

Rem =======================================================================
Rem == Zweite Datei wieder schliessen.                                   ==
Rem =======================================================================
oWorkbook2.Close
oWorkbook1.Save
oWorkbook1.Close

Rem =======================================================================
Rem == Objektverweis wieder entfernen.                                   ==
Rem =======================================================================
Set oWorkbook1 = Nothing
Set oWorkbook2 = Nothing
variable = MsgBox("Well done, Commander !",vbOKOnly,"Meldung")
oExcel.Quit
```

eine idee woran es liegen könnte?


----------



## Orakel (2. Juni 2005)

Hi,

hmmm Ideen ohne Ende. Wenn das Script Primzahlen ermitteln sollte, hätte ich das Problem sofort eingegrenzt.

Was funktioniert den nicht?

Mir fällt nur auf, dass Du Deine Suche und der Vergleich immer in Spalte 1 stattfindet.


Gruß
Das Orakel


----------



## rtd1978 (2. Juni 2005)

was genau nicht funktioniert weiss ich nicht. das script läuft einfach endlos. ohne fehlermeldung.

zur eigentlichen funktion. ich habe 2 excel-dateien. diese enthalten fehlernummern(spalte1) bemerkungen(spalte2), lösungen(spalte3), usw.

die erste datei enthält leerfelder in der spalte "lösungen" und wird weggeschickt. der bearbeiter füllt ein paar felder "lösungen" aus und schickt sie zurück. in der ersten datei wurde zwischenzeitlich auch geschrieben.
nun soll die 1. datei mit der 2. geupdatet werden. bedeutet, überall, wo in datei 1 leerfelder sind, soll der inhalt dieses leerfeldes von der 2. datei rein. das ganze aber bezogen auf die fehlernummer(spalte1)- deswegen immer spalte1.

ist das einigermaßen vertändlich oder muss ich noch was ergänzen?   .


----------



## rtd1978 (2. Juni 2005)

ok, habe gerade herausgefunden, dass es nicht endlos läuft. habe xcount mal auf 3 gesetzt. jetzt läuft es in 30 sekunden durch. allerdings ohne funktion. der austausch der daten funktioniert nicht.


----------



## rtd1978 (2. Juni 2005)

so, jetzt gibt es eine fehlermeldung:


```
For xCount = 2 To 3                      							'Spalte
    	For iCount = 1 To 50             							'Zeile
                  syn_id = oWorkbook1.Sheets("Tabelle1").Cells(iCount, 1).Value
                  If oWorkbook1.Sheets("Tabelle1").Cells(iCount, xCount).Value = "" Then
                         For yCount = 1 To 50
	         		If(oWorkbook2.Sheets("Tabelle1").Cells(yCount, 1).Value = syn_id) Then
	                 		zeiledatei = yCount
	         		End If
			Next
                         zwischen = oWorkbook2.Sheets("Tabelle1").Cells(zeiledatei, xCount).Value
                         oWorkbook1.Sheets("Tabelle1").Cells(iCount, xCount).Value = zwischen
	         End If
	Next
Next
```

Fehler: "Unbekannter Laufzeitfehler Zeile 29, Zeichen 26 -> also bei zwischen =..."

lasse die xCount-Schleife jetzt von 2 bis 3 zählen, weil in der ersten spalte ja nichts geändert werden muss.


----------



## rtd1978 (2. Juni 2005)

so, habs jetzt hinbekommen.

it läuft.

kannst du mir trotzdem nochmal kurz helfen in bezug auf vbs allgemein. wie gesagt, ich kenn mich mit vb etc. net besonders aus.

gibt es eine doku o.ä. für alle objekte (zbsp: .Sheets, .cells, .workbooks,.........)?

ich bräuchte jetzt nämlich die anzahl der zeilen in der exceldatei. also die anzahl der gefüllten zeilen. (damit ich iCount dynamisch machen kann)

danke und gruß, René


----------

