D
dranonym
Grünschnabel
- 28. September 2007
- #1
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:
Code:
Private Sub Command2_Click()Dim xDim yGoTo checkrechnung:y = Text2.Text ^ 2 + Text3.Text * Text2.Text + Text4.TextLabel17.Caption = yWorkbooks("mappe1").Worksheets("mappe1").Cells(2, 1).Value = yExit Subcheck:If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" ThenExit SubElseGoTo rechnungEnd IfEnd Sub
Das haupproblem liegt bei:
Code:
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
Erfahrenes Mitglied
- 29. September 2007
- #2
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:
Code:
Private Sub Command2_Click()Dim x As VariantDim y As VariantIf Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then Exit SubElse 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 = yEnd IfEnd Sub
Viele Grüße,
Jacka
D
dranonym
Grünschnabel
- 30. September 2007
- #3
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 ^^
Zuletzt bearbeitet:
Jacka
Erfahrenes Mitglied
- 30. September 2007
- #4
Hi!
Mmm. komisch!
Schau dir nochmal die Anbindung an Excel an (Excel Verweis muss gesetzt sein):
Code:
Private Sub cmdBrowse_Click()Dim oExl As ObjectSet oExl = CreateObject("Excel.Application")oExl.Visible = TrueOn 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 WithEnd 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
D
dranonym
Grünschnabel
- 4. Oktober 2007
- #5
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
D
dranonym
Grünschnabel
- 5. Oktober 2007
- #6
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:
Code:
On Error Resume NextDim oExl As ObjectDim XIf txtD.Text = "" Or txtC.Text = "" ThenMsgBox "Es müssen alle Werte angegeben werden!", vbCritical, "Fehler..."Exit SubElseSet oExl = CreateObject("Excel.Application")oExl.Workbooks.Open (App.Path & "\mappe1.xls")oExl.Worksheets("Tabelle1").ActivateY1 = (oExl.ActiveSheet.Range("A1").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B1").Value = Y1Y2 = (oExl.ActiveSheet.Range("A2").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B2").Value = Y2y3 = (oExl.ActiveSheet.Range("A3").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B3").Value = y3y4 = (oExl.ActiveSheet.Range("A4").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B4").Value = y4y5 = (oExl.ActiveSheet.Range("A5").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B5").Value = y5y6 = (oExl.ActiveSheet.Range("A6").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B6").Value = y6y7 = (oExl.ActiveSheet.Range("A7").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B7").Value = y7y8 = (oExl.ActiveSheet.Range("A8").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B8").Value = y8y9 = (oExl.ActiveSheet.Range("A9").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B9").Value = y9y10 = (oExl.ActiveSheet.Range("A10").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B10").Value = y10y11 = (oExl.ActiveSheet.Range("A11").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B11").Value = y11y12 = (oExl.ActiveSheet.Range("A12").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B12").Value = y12y13 = (oExl.ActiveSheet.Range("A13").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B13").Value = y13y14 = (oExl.ActiveSheet.Range("A14").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B14").Value = y14y15 = (oExl.ActiveSheet.Range("A15").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B15").Value = y15y16 = (oExl.ActiveSheet.Range("A16").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B16").Value = y16y17 = (oExl.ActiveSheet.Range("A17").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B17").Value = y17y18 = (oExl.ActiveSheet.Range("A18").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B18").Value = y18y19 = (oExl.ActiveSheet.Range("A19").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B19").Value = y19y20 = (oExl.ActiveSheet.Range("A20").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B20").Value = y20y21 = (oExl.ActiveSheet.Range("A21").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B21").Value = y21y22 = (oExl.ActiveSheet.Range("A22").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B22").Value = y22y23 = (oExl.ActiveSheet.Range("A23").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B23").Value = y23y24 = (oExl.ActiveSheet.Range("A24").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B24").Value = y24y25 = (oExl.ActiveSheet.Range("A25").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B25").Value = y25y26 = (oExl.ActiveSheet.Range("A26").Value - txtD.Text) ^ 2 + txtC.TextoExl.ActiveSheet.Range("B26").Value = y26eExl.ActiveWorkbook.Close SaveChanges = True ' Änderungen werden gespeichertoExl.QuitOLE1.DoVerb 0OLE1.RefreshOLE1.Close eExl.ActiveWorkbook.Close SaveChanges = True ' Änderungen werden gespeichert oExl.Quit Set oExl = NothingEnd If
D
dranonym
Grünschnabel
- 29. Oktober 2007
- #7
Weis denn keiner eine Antwort?
Ich bräuchte diese Hilfe wirklich sehr!
Jacka
Erfahrenes Mitglied
- 29. Oktober 2007
- #8
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
Um antworten zu können musst du eingeloggt sein.