VB6 Zugriff auf Excel

Hallo
ich habe ein Exceltabelle in die ich werde in A1, B1 eingebe
danach steht dann in C1 das Ergebnis einer Berechnung aus A1 B1.

Ich möchte nun die Liste an VB6 anbinden ohne darin die Daten neu
zu prgrammieren.

Wie kriege ich die Daten in Textfelder, wobei auch die Ergebnisse rüber sollen?

und andersrum, wenn ich ein Textfeld für A1 ändere, sollen die Daten
in die Excelzelle A1 und dann die berechnete Zelle C1 wieder in VB6 erscheinen.

Fragt nicht wieso ich das so will, es sind zuviele Berechnungen, welche ich im VB6 Projekt neu berechnen müsste.

mfg niri

Hallo Nirwana,

für die eine Richtung vllt. wie nachfolgend.
Mit Text1 bzw. Excel-A1 scheint es zu klappen.
Weiß grad nicht wie ich im VB-Code Text2 und Text3 ansprechen muß.
ERkennbar an den ??? in der Zeile.

In VB, eine UF mit drei Textboxen.
In Excel steht in c1 eine Formel die A1 und B1 addiert.
Kannste ja was eintragen.

Für die andere Richtung, also Durch Änderungen in A1 oder B1
die TBs in VB zu ändern fehlen mir Ansprechmöglichkeiten.
Getobjekt(,„VB.Application“) geht nicht.

Gruß
Reinhard

In die UF:

Private Sub Text1_Change()
'A1
Call Aktualisieren(Text1)
End Sub

In ein Standardmodul:

Option Explicit

Sub Aktualisieren(TB)
'Verweis auf Microsoft Excel X.0 Object Library setzen
Dim appXL As Object
Set appXL = GetObject(, "Excel.Application")
appXL.EnableEvents = False
With appXL.Workbooks("Mappe2").Worksheets("Tabelle1")
 Select Case TB.Name
 Case "Text1"
 .Range("A1").Value = TB.Text
 Case "Text2"
 .Range("B1").Value = TB.Text
 Case Else
 MsgBox "seltsam"
 End Select
 appXL.Calculate
 Application.EnableEvents = False
 TB.Text = .Range("A1")
 '???.Text = .Range("B1") 'Text2
 '???.Text = .Range("C1") 'Text3
 Application.EnableEvents = True
End With
appXL.EnableEvents = True
End Sub

Hi Reinhard,
naja ich hatte das mit dem Zugriff schon mal, aber ich werds mal probieren. Blöd halt, das die Exceldatei dann immer mit benötigt wird.
Ins Programm (also Die Exe) Einbinden geht wohl nicht oder???

Dann hab ich noch ne andere Frage und zwar wird die Exe mit dem Code immer grösser. Es gibt aber einige Sachen, die sich immer wieder häufen, wie Formatierungen, welche in den Routinen auftreten, nur wieder da reinkopiert sind.
Kann man irgendwie nach doppelten Fragmenten mit einem Tool suchen oder das Programm mal bereinigen, indem man doppelte Sachen in eine Sub Public schiebt.
Problem ist halt, das es danach noch ohne Probleme laufen muss, ohne das ich alles prüfen will.

Das andere ist das mit den dlls. Da die Exe datei immer grösser wird, wollte ich das auch mal machen. Wie erstellt man denn einfach eine Dll. Kann ich da die Subs reinpacken und der Zugriff ist wie im Programm???

mfg niri

Hallo Nirwana,

naja ich hatte das mit dem Zugriff schon mal, aber ich werds
mal probieren. Blöd halt, das die Exceldatei dann immer mit
benötigt wird.
Ins Programm (also Die Exe) Einbinden geht wohl nicht oder???

k.A. Bei mir in VB5.0 kann ich mit
Projekt—Komponenten—einfügbare Objekte
ein Excel-Arbeitsblatt in die VB-Form einfügen.
Aber grad eben zum ersten Mal gemcht, kenn mich da also nicht aus.
Teste da bitte mal rum.

Aber ich glaub dann hast du innerhalb der Exe die Daten dieses
Blattes, wahrscheinlich noch flüchtig also mußte Änderungen bei
Programmbeendung irgendwie abspeichern und beim Neustart einlesen.
Ist aber alles von mir ausgedacht, muß nix mit dem Realen zu tun haben.
Wenn es so ist wie ich es beschrieb haste demzufolge auch keine xls.

Kann man irgendwie nach doppelten Fragmenten mit einem Tool
suchen

Ein Wort ausgucken was meist nur in diesen fragmenten vorkommt, danach das Projekt durchsuchen lassen.

oder das Programm mal bereinigen, indem man doppelte
Sachen in eine Sub Public schiebt.

Starte erst die Suche und klapper alle Fragmente ab, schau sie dir an.
Dann überlege welche Parameter eine Sub bräuchte um möglichst überall
dort benutzt zu werden.

Dann bastele die Sub, prinzipiell (Pseudocode) so:
Prozedur myFormat(Objekt, Schriftgröße, Optional Schrift =„Arial“)

Dann testen mit unterschiedlichen Objekten und anderen Parametern.
Sub Test()
Call myFormat(Text1, 12, „System“)
End sub

Problem ist halt, das es danach noch ohne Probleme laufen
muss, ohne das ich alles prüfen will.

Naja, wenn du alles richtig codiert hast, beim Testen alle Möglichkeiten durchgespielt hast und sie auch richtig in
das Originalpprojekt eingebaut hast läuft da alles wie vorher.
Irgendwo ein klitzekleines Fehlerchen und du kannst dein wissen über
Fehlersuche learning by doing erweitern :smile:)

Das andere ist das mit den dlls. Da die Exe datei immer
grösser wird, wollte ich das auch mal machen. Wie erstellt man
denn einfach eine Dll. Kann ich da die Subs reinpacken und der
Zugriff ist wie im Programm???

K.A., mein Vb5.0 kann keine erzeugen.
Soll Fremdprogramme geben die das können. Frag Mamma *gg*

Gruß
Reinhard

Hi
ich glaube das hast du jetzt falsch verstanden, es geht darum doppelten Code zu filtern (zb 20-30 Zeilen) und dann in eine eigene Public Sub zu schieben.
Das Problem ist, das dieser Code ja auch wirklich gleich sein muss, eine Variable anders und ich hab ein Problem.

Da ich nicht alles anschauen will, die Frage, ob man hier auch Datenblöcke irgendwie suchen und finden kann, welche gleich sind.
Ich weis ja auch schon grob die Blöcke.

mfg niri

Hallo Nirwana,

ich glaube das hast du jetzt falsch verstanden

du hast da vollkommen recht, ich glaube das auch.
Allerdings von dir *grins*
Also pari, lassen wir das :smile:

, es geht darum
doppelten Code zu filtern (zb 20-30 Zeilen) und dann in eine
eigene Public Sub zu schieben.
Das Problem ist, das dieser Code ja auch wirklich gleich sein
muss, eine Variable anders und ich hab ein Problem.

Ja, so ist es.
Seltsamerweise fand ich bei google keinen VB-Code der alle Module
ausliest, auch mit Direktsuche in Vb@archiv nich.
Hier ist VBA von Word

Du mußt da noch den Verweis auf Microsoft Word… setzen.
Bei Kurztest eben hat VB „strFile()“ angemeckert.
Gut, Peanutsproblem, kriegt man irgendwie hin.
Wichtiger ist zu wissen wie man Module auslesen kann.

Wenn man das mit Vb-Code geschafft hat so hat man ja alle
Daten und kann darin suchen, bzw. schon beim Auslesen selektieren.
Da man ja auch umgekehrt zur Laufzeit mit VB in Module schreiben/ändern kann so kann man dann sogar automatisch
bestimmte Codesequenzen durch einen Einzeiler ersetzen lassen.
Allerdings nur wenn die Codesequenzen exakt gleich sind.

Wie du richtig sagtest, eine Abweichung in den Codesequenzen und damit ist Essig.
Dann ist es besser, wie ich versucht habe anzuregen, ein markantes
Wort, eine markante Wortfolge die hauptsächlich nur in den
später zu ersetzenden Codesequenzen vorkommen kann zu suchen.

Wenn du nun weißt daß der Suchbegrif immer so ca. als 8.te Codezeile
auftritt in der Codesequenz von plus/minus 20 Zeilen so kannst du
dir ja mittels Code beim Auslesen der Module dann immer irgendwo
von dieser Fundzeile ausgehend auch so 12 Zeilen darüber und darunter
irgendwo auflisten lassen.

Aufgrund dieser Daten kannste ja dann deine „Ersatz“-Sub
erstellen und deren Parameter.

Sehr schad daß wohl Chewpapa in die Politikbretter abgewandert ist:frowning:

Gruß
Reinhard

Hallo Nirwana,

so etwas wie es dir passiert ist, kommt davon wenn man bei einem Ürojekt einfach so los drauf los tippselt. Naja aus Fehlern lernt man und begeht soe kein zweites male. Ein Tool was Deinen Wünschen entspricht gibt es meines erachtens nicht! Ok wenn man den genauen Text der mehrfach vorkommenden Passagen kennt, koennte man ihn kopieren, dann mittels ersetzen, löschen und eine Sprungmarke nach Sub xyz setzen. Dann in einem Modul diese Sub erstellen und die Passage da rein kopieren. Aber wie gesagt, dazu müsste man den genauen Text kennen.

Ansonsten faellt mir nur folgendes ein.

Projekt abschliessen, sich erfreuen das man ein Tool geschafft hat und sich als naechstes einen Text Parser bastelt, der genau das macht, was du möchtest. Sollte ja kein Problem sein :smile:

MfG Alex