Excel-Tabellen und Diagramme in Visual Basic 6 erstellen. Wie?

hierzu eine weitere frage:


ich durchlaufe alle zellen in meinem excel sheet und merke mir die spalte und die zeile aus der ich was addieren möchte, was wie folgt aussieht:

For xRows = 1 To 4 'Anzahl Zeilen
For xCols = 1 To 17 'Anzahl Spalten
sWert = .Cells(xRows, xCols)
If sWert = "P1" Then
Zeile = z
Spalte = 5
Do While Spalte < 17
temp = .Cells(Zeile, Spalte) '?wie greife ich auf die zelle zu, deren Zeile und Spalte ich weiss ?
MsgBox ("Temp : " & temp)
ergebnis = ergebnis + temp
MsgBox ("ergebnis lautet : " & ergebnis)
Spalte = Spalte + 3
Loop
'Dreisatz um Prozentsatz pro Woche zu berechnen :
prozentsatzwoche = 100 / 500 * ergebnis
MsgBox ("Die Auslastung betraegt " & prozentsatzwoche)
End If
s = s + 1
Next xCols
z = z + 1
Next xRows



nun würde ich in temp gerne den inhalt der zelle schreiben, von der ich mir spalte und zeile gemerkt hab... ? an dieser stelle funktioniert es quasi nicht : temp = .Cells(Zeile, Spalte)

kann mir da bitte jemand helfen ich bin der verzweifelung nahe...
 
Hallo,

ich verstehe Dein Problem nicht. Du greifst doch schon auf die entsprechende Zelle zu mit temp = .Cells(Zeile, Spalte).

btw. Fremde threads zu missbrauchen um das eigene Problem mit Mehrfach-Postings im Forum streuen, finde ich grenzwertig...

Gruß
 
Also sollte der Quelltext wie folgt aussehen?
----------------------------------------------------------------------------------------------------
Public Function Test(xlDsn As String, SheetNr As Integer) As Long
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Open(xlDsn)

while not abbruch
SheetNr = SheetNr +1
abbruch = (len ( activeSheet.Cells(1,SheetNr).Cellvalue)=0)
wend
call msgbox ("Anzahl genutzte Reihen " & SheetNr)


Set xlSheet = xlApp.ActiveWorkbook.Sheets(SheetNr)
Test= xlSheet.UsedRange.Rows.Count
End Sub
------------------------------------------------------------------------------------------------------------

wobei xlDsn der Name der Excel-Tabelle ist und (len(active.....=0) die abbruchbedingung?

Was haben denn die letzten beiden Zeilen vor "end sub" zu bedeuten?

----------------------------------------------------------------------
Set xlSheet = xlApp.ActiveWorkbook.Sheets(SheetNr)
Test= xlSheet.UsedRange.Rows.Count
----------------------------------------------------------------------

Vielen dank für die Hilfe
 
Zuletzt bearbeitet:
Der von mir oben genannte Code gibt als Funktionswert die letzte belegte Zeile zurück:
Code:
Public Function Test(xlDsn As String, SheetNr As Integer) As Long
Set xlApp = New Excel.Application
Set xlBook = xlApp.Workbooks.Open(xlDsn)
If SheetNr > xlBook.Sheets.Count Then
      MsgBox "Sheet" + Str(SheetNr) + " gibt es nicht!", vbInformation
      Exit Function
End If
Set xlSheet = xlApp.ActiveWorkbook.Sheets(SheetNr)
Test= xlSheet.UsedRange.Rows.Count
xlBook.Close
xlApp.Quit
Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing

End Sub

Das rufst Du ganz einfach so auf:
Code:
      Msgbox "Anzahl Zeilen:"+Str(Test("C:\Exceldatei.xls",1))

Die SheetNr ist das gewünschte Kalkulationsblatt Deiner Exceldatei.

Die von Dir eingefügten Zeilen sind in diesem Fall überflüssig, da die aufgeführte Funktion xlSheet.UsedRange.Rows.Count die Zeilenzahl in den Funktionswert schreibt:
while not abbruch
SheetNr = SheetNr +1
abbruch = (len ( activeSheet.Cells(1,SheetNr).Cellvalue)=0)
wend
call msgbox ("Anzahl genutzte Reihen " & SheetNr)

Alles klar?

Grüsse
ronaldh
 
Ok, vom Grundprinzip hab ichs glaube ich verstanden.

Ich hätte noch ein, zwei Sachen zu klären.


Was genau ein paar Ausdrücke bedeuten und zwar folgende:

Set xlApp = New Excel.Application <- "Excel" ist die Variable, oder seh ich das falsch?


----- Das ist die Abfrage, ob die Sheet/das Arbeitsblatt vorhanden ist, oder?--------------

If SheetNr > xlBook.Sheets.Count Then
MsgBox "Sheet" + Str(SheetNr) + " gibt es nicht!", vbInformation
Exit Function
End If
---------------------------------------------------------------------------------------------------------------------------

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing => was haben die genau zu bedeuten?



Vielen Dank für die bisherigen Antworten

Hammel_b
 
Set xlApp = New Excel.Application <- "Excel" ist die Variable, oder seh ich das falsch?

Excel musst Du als Verweis im VB definieren (Projekt/Verweise/Microsoft Excel x.x Application).

----- Das ist die Abfrage, ob die Sheet/das Arbeitsblatt vorhanden ist, oder?--------------

If SheetNr > xlBook.Sheets.Count Then
MsgBox "Sheet" + Str(SheetNr) + " gibt es nicht!", vbInformation
Exit Function
End If
Rrrichtig! Falls Du sicher bist, auf Arbeitsblatt 1 zuzugreifen, kannst Du natürlich auch gleich die 1 als Sheet eingeben.

Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing => was haben die genau zu bedeuten?

Damit werden die Verknüofungen zu Excel in Deinem VB-Programm wieder zerstört, damit das Programm unter allen Umständen korrekt aus dem Hauptspeicher entfernt wird.

So sollte man beispielsweise auch bei ADO Recordsets oder Connections verfahren (wenn man mit Datenbanken arbeitet).

Wenn man dies nicht macht, kann es vorkommen, dass Du Dein Programm beendest, es aber trotzdem noch im Hintergrund schlummert.

Ich hoffe, Dir hiermit geholfen zu haben.

Viele Grüsse
ronaldh
 
In dem Fall ist Excel keine Variable sondern ein Objekt, damit erstellst du eine neue Instanz. Das Nothing bedeutet, dass offene Objekte und Instanzen geschlossen und gelöscht werden.


Der Doc!
 

Neue Beiträge

Zurück