# Wert aus VB in Excel Tabelle einfügen



## dranonym (28. September 2007)

Hi Leute!!

Ich hab folgendes Problem:

Ich habe eine Rechnung für eine Parabel aufgestellt. Diese wollte ich dann in Excel über das OLE Objekt zeichnen lassen. Hab auch soweit alles eingestellt.
Nur jetzt muss ich einen Wert in eine Excel Zelle einfügen. Krieg es aber einfach nicht hin!

So sieht mein code bis jetzt aus:

```
Private Sub Command2_Click()
Dim x
Dim y
GoTo check

rechnung:
y = Text2.Text ^ 2 + Text3.Text * Text2.Text + Text4.Text
Label17.Caption = y
Workbooks("mappe1").Worksheets("mappe1").Cells(2, 1).Value = y
Exit Sub

check:
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then
Exit Sub
Else
GoTo rechnung
End If
End Sub
```

Das haupproblem liegt bei: 
	
	
	



```
Workbooks("mappe1").Worksheets("mappe1").Cells(2, 1).Value = y
```
weil wenn ich das Programm starte, und dann auf den Button klicke, kommt der Fehler: _"index außerhalb des gültigen bereiches"_ und es wird die gerade genannte zeile markiert.

Ich hoffe ihr versteht es ^^

MFG
Dr. Anonym

P.S. Ich hab Office 2007, aber es sollte am besten mit allen office versionen funktionieren.


----------



## Jacka (29. September 2007)

Hi!

Nur kurz zum Verständnis:
Ist der Code in VBA, also schon direkt in Excel oder sprichst du
Excel mit VB zb. VB6 an?

Ich gehe mal vom Letzteren aus, da es in Excel Textbox1 heißen würde und man VBA unter dem Neuen Office 2007 vergessen kann...

Versuch es mal so:
Workbooks("Mappe1").Sheets("Mappe1").Cells(2, 1).Value = y
Heißt die Tabelle wirklich Mappe1?

Poste mal den ganzen Teil des Codes, da mich das doch etwas verwirrt. 
Also Anbindung an Excel (Excel.Application, etc.).

Warum schreibst du den Code so komisch durcheinander?
Mein Vorschlag:

```
Private Sub Command2_Click()
Dim x As Variant
Dim y As Variant

If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then
   Exit Sub
Else
   y = Text2.Text ^ 2 + Text3.Text * Text2.Text + Text4.Text
   Label17.Caption = y
   ' Wo ist das Excel-Objekt?
   Workbooks("mappe1").Worksheets("mappe1").Cells(2, 1).Value = y
End If

End Sub
```


Viele Grüße,
Jacka


----------



## dranonym (30. September 2007)

Danke für die Anwort.

Hat aber auch nicht geklappt. Selbe Fehlermeldung.

wo steht denn der Name der Tabelle

Aber wissen Sie vielleicht noch eine Andere Möglichkeit Parabeln Zeichnen zu lassen. (also ohne ein Excel Plugin!). Weil diese ganzen Verweise sind doch etwas viel Arbeit.

Danke im Vorraus ^^


----------



## Jacka (30. September 2007)

Hi!

Mmm. komisch!

Schau dir nochmal die Anbindung an Excel an (Excel Verweis muss gesetzt sein):

```
Private Sub cmdBrowse_Click()
Dim oExl As Object

Set oExl = CreateObject("Excel.Application")
oExl.Visible = True

On Error Resume Next
  With CommonDialog1
    .CancelError = True
    .Filter = "Excel-Files (*.xls)|*.xls" ' Filter setzen, nur Excel anzeigen

   ' Dialogfeld Öffnen anzeigen
    .ShowOpen
     If .FileName <> "" Then
       oExl.Workbooks.Open .FileName  'Ausgewähltes Excel-File wird geöffnen..
       oExl.Worksheets("Tabelle1").Activate  '.. und Tabelle1 aktiviert
   
       oExl.ActiveSheet.Range("A1").Value = "12345"  ' In Zelle A1 Wert einfügen.
     
    'schließen der Excelliste
      ActiveWorkbook.Close SaveChanges:=True  ' Änderungen werden gespeichert
      oExl.Quit
      Set oExl = Nothing
      
  End If
 End With
End Sub
```

Ansonsten, direkt in VB zeichnen! Kleine Anleitung:
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0010.shtml

Hier hab ich noch ein Tutorial gefunden:
http://www.it-academy.cc/article/75...+Simulation+der+Erdanziehungskraft+in+VB.html


Viele Grüße,
Jacka


----------



## dranonym (4. Oktober 2007)

Vielen Dank!
Jetzt funktionierts 

Aber jetzt hab ich ein anderes problem! Wie bringe ich das OLE-Objekt dazu, dass es sich nach dem Zeichnen von alleine Aktualisiert?
Habs schon mit "ole1.update" und "ole1.refresh" probiert, aber keins funktioniert!

Könnt ihr mir da auch helfen


----------



## dranonym (5. Oktober 2007)

Ok, habs jetzt einigermaßen hingekriegt!
Nur ein Problem hab ich immernoch:
Das eingefügte Objekt (Excel Dokument) wird nicht ganz im Fenster angezeigt, sondern rechts abgeschnitten, ich sehe nur einen kleinen Abschnitt davon.

hier mein Code bis jetzt:

```
On Error Resume Next
Dim oExl As Object
Dim X


If txtD.Text = "" Or txtC.Text = "" Then
MsgBox "Es müssen alle Werte angegeben werden!", vbCritical, "Fehler..."
Exit Sub
Else

Set oExl = CreateObject("Excel.Application")

oExl.Workbooks.Open (App.Path & "\mappe1.xls")
oExl.Worksheets("Tabelle1").Activate

Y1 = (oExl.ActiveSheet.Range("A1").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B1").Value = Y1

Y2 = (oExl.ActiveSheet.Range("A2").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B2").Value = Y2

y3 = (oExl.ActiveSheet.Range("A3").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B3").Value = y3

y4 = (oExl.ActiveSheet.Range("A4").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B4").Value = y4

y5 = (oExl.ActiveSheet.Range("A5").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B5").Value = y5

y6 = (oExl.ActiveSheet.Range("A6").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B6").Value = y6

y7 = (oExl.ActiveSheet.Range("A7").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B7").Value = y7

y8 = (oExl.ActiveSheet.Range("A8").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B8").Value = y8

y9 = (oExl.ActiveSheet.Range("A9").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B9").Value = y9

y10 = (oExl.ActiveSheet.Range("A10").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B10").Value = y10

y11 = (oExl.ActiveSheet.Range("A11").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B11").Value = y11

y12 = (oExl.ActiveSheet.Range("A12").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B12").Value = y12

y13 = (oExl.ActiveSheet.Range("A13").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B13").Value = y13

y14 = (oExl.ActiveSheet.Range("A14").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B14").Value = y14

y15 = (oExl.ActiveSheet.Range("A15").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B15").Value = y15

y16 = (oExl.ActiveSheet.Range("A16").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B16").Value = y16

y17 = (oExl.ActiveSheet.Range("A17").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B17").Value = y17

y18 = (oExl.ActiveSheet.Range("A18").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B18").Value = y18

y19 = (oExl.ActiveSheet.Range("A19").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B19").Value = y19

y20 = (oExl.ActiveSheet.Range("A20").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B20").Value = y20

y21 = (oExl.ActiveSheet.Range("A21").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B21").Value = y21

y22 = (oExl.ActiveSheet.Range("A22").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B22").Value = y22

y23 = (oExl.ActiveSheet.Range("A23").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B23").Value = y23

y24 = (oExl.ActiveSheet.Range("A24").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B24").Value = y24

y25 = (oExl.ActiveSheet.Range("A25").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B25").Value = y25

y26 = (oExl.ActiveSheet.Range("A26").Value - txtD.Text) ^ 2 + txtC.Text
oExl.ActiveSheet.Range("B26").Value = y26

eExl.ActiveWorkbook.Close SaveChanges = True ' Änderungen werden gespeichert
oExl.Quit
OLE1.DoVerb 0
OLE1.Refresh
OLE1.Close
     eExl.ActiveWorkbook.Close SaveChanges = True ' Änderungen werden gespeichert
 
      oExl.Quit
      Set oExl = Nothing

End If
```


----------



## dranonym (29. Oktober 2007)

Weis denn keiner eine Antwort?
Ich bräuchte diese Hilfe wirklich sehr!


----------



## Jacka (29. Oktober 2007)

Wo und was wird nicht richtig angezeigt?

Bitte versuch formuliere deine Fragestellung nocheinmal so, das sie auch alle
verstehen. Dann bekommst du auch deine Antwort.
Aber wir wissen immer noch nicht das System und was genau du eigentlich machen
willst.

Viele Grüße,
Jacka


----------

