Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1004to1008
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kann man mit VB Excel-VBA vollständig ansprechen?

Kann man mit VB Excel-VBA vollständig ansprechen?
02.09.2008 23:13:00
Larsinator
Hallo zusammen,
ich würde gerne ein grösseres Projekt starten und dabei Excel von ausserhalb steuern mit VB 6.
Unten habe ich schon mal einen Anfang gemacht, indem ich Excel anspreche und eine neue Datei mit Formaten und Inhalten erzeuge.
Geht soweit ganz gut.
Bevor ich mich da aber jetzt in etwas verrenne meine Frage:
--> Kann ich per VB in Excel alles ansprechen wie ich es auch in VBA machen könnte oder gibt es da Restriktionen?
Wenn es da grössere Einschränkungen gibt, hätte ich eine zweite Frage:
--> Wie kann man den VBA-Code am sichersten verbergen? (meines bescheidenen Wissens ist der VBA-Projektschutz ja nicht sehr sicher)
Lieben Dank schon mal vorab und viele Grüße
  Lars

XLSoffen = True
Call pruefXLS(XLSoffen)
If (XLSoffen = True) Then '---Excel ist bereits offen
Set xl = GetObject(, "Excel.Application")
Else'---Excel jetzt starten
Set xl = CreateObject("Excel.Application")
End If
xl.Visible = True
xl.Workbooks.Add
'***** HEADER: *****
xl.activeworkbook.activesheet.Columns("A:C").columnwidth = 9
xl.activeworkbook.activesheet.Columns("A:A").NumberFormat="00000"
xl.activeworkbook.activesheet.Columns("B:B").NumberFormat ="000000"
(...)
------------------------------------------------------------------


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kann man mit VB Excel-VBA vollständig ansprechen?
03.09.2008 09:05:00
Nepumuk
Hallo Lars,
1. Gibt es keine Einschränkung was Excel betrifft. Der Zugriff auf VBA-Routinen ist nur insofern eingeschränkt, als dass du ein Userform nicht direkt, sondern nur indirekt über eine Routine in Excel starten kannst. Aber wozu so'n doofes Userform, wenn du sowieso in VB arbeitest.
2. VBA-Code kannst du vor uns nicht verbergen. Wirklich geschützt ist er nur in kompilierter Form als COM-Addin oder ActiveX-DLL.
Wenn du die Mappe öffnest, würde ich aber an deiner Stelle diese grundsätzlich in einer eigenen Excelsession starten und nicht in einer eventuell schon geöffneten. Das spart erstens die Abfrage, ob Excel schon offen ist und ist zweitens auch sicherer. Denn, wenn dem User Excel mal abgestürzt ist und als Prozess noch im Taskmanager hängt, dann würde deine Mappe in diesem Prozess geöffnet. Damit bleibt deine Mappe unsichtbar und der User wundert sich, warum nichts passiert. Dann versucht er das ganze noch 10mal um dann verzweifelt bei dir anzurufen. Außerdem sind mehrere parallel laufende Excelprozesse kein Problem.
Gruß
Nepumuk
Anzeige
AW: Kann man mit VB Excel-VBA vollständig ansprechen?
04.09.2008 22:40:30
Larsinator
Hallo Nepumuk,
danke für Deine Infos! Ich werde dann auch immer mit einem neuen Excel starten.
Ich hab´ jetzt mal ein wenig herum gespielt, aber irgendwie fehlt mir da noch was. :o(
---------------------------------------------------------------------------------------------------------------------
1a.) Dieser VB-Code macht was er soll:

LCase(Left(xl.activeworkbook.activesheet.Cells(AktZeile, 1), 10))


Nicht zum Laufen bekommen habe ich:


MaxZeile = xl.application.ActiveCell.SpecialCells(xlLastCell).Row


Wo hab ich da noch einen Denkfehler?
---------------------------------------------------------------------------------------------------------------------
1b.) Ich hab mir mal ein paar Testdaten angelegt und zwar eine Excel-Tabelle mit 60.000 belegten Zeilen.
Jetzt prüfe ich in einer VB-Schleife den Text in der ersten Spalte einer jeden Zeile auf einen bestimmten String ab. (mit obigem Lcase)
Wenn ich das Ganze in VBA mache, dauerts ein paar Sekunden und per VB mehr als 4 Minuten.
Ich gehe davon aus an dem Performance-Unterschied kann man nichts machen, oder?
---------------------------------------------------------------------------------------------------------------------
2.) Ja, wie "sicher" der VBA-Code ist, ist mir durchaus bewusst. Ich werde mich jetzt mal an dem Thema COM-Addin versuchen.
Solltet jmd. einen Link hierzu haben, nehme ich den natürlich dankbar an.
Ebenso, wenn es Bedenken gibt, dass die Performance gleich schlecht zu erwarten ist.
---------------------------------------------------------------------------------------------------------------------

Anzeige
AW: Kann man mit VB Excel-VBA vollständig ansprechen?
05.09.2008 10:09:28
Nepumuk
Hallo Lars,
xlLastCell ist eine Excelkonstante. Die kannst du in VB natürlich nicht benutzen. Schau im Objektkatalog von Excel nach, welchen numerischen Wert diese Konstante hat und benutze den. Wenn du diese öfters benötigst, leg dir diese als eigene Konstanten an.
Die Geschwindigkeitsunterschiede sind teilweise schon gravierend. Aber eine "kluge" Programmierung umschifft so etwas. Z.B. indem du die Werte in eine Array einliest und darin bearbeitest.
COM-Addins werden in C geschrieben. Wenn du nur VB hast, dann schreib eine ActiveX-DLL
Gruß
Nepumuk
AW: Kann man mit VB Excel-VBA vollständig ansprechen?
05.09.2008 12:09:00
Larsinator
Hallo nochmal,
hmpf und schäm. Eigentlich zu logisch. Aber u.g. Code läuft und jetzt glaub ich Dir auch, dass es wenig Einschränkungen gibt. ;o)
Na gut, jetzt hab ich also VB zumindest mal als eine Option.
In ein Array holen bringt mir aber wahrscheinlich nicht allzu viel, weil ich gerade die Excel-Formatierungen bearbeiten will, muss also auch dort "arbeiten".
Dann ist die VB-Option halt eine langsame Option.
Eine prinzipielle Frage zu den Addins bzw. ActiveX-DLL (sorry, ich bin diesbezüglich Novice)hätte ich noch. Je nachdem, was für mich praktikabler ist, werde ich dann in die enstpr. Richtung arbeiten (wobei mir VB schon lieber wäre).
Ich möchte (per Button oder ShortCut) ein Formular aufrufen mit dem ich eine zu öffnende Datei auswählen kann, die Datei öffnen und dann versch. Sachen darin abarbeiten.
Die Excel-Hilfe sagt mir jetzt z.B. dass ich ein ActiveX-DLL zu einer Arbeitsmappe hinzu laden kann. Klingt für mich erst mal nicht so, dass es Excel-weit verfügbar wäre.
Was denkst Du, ist für mich der bessere Weg?
Viele Grüße
Lars

MaxZeile = xl.application.ActiveCell.SpecialCells(11).Row


Anzeige
AW: Kann man mit VB Excel-VBA vollständig ansprechen?
05.09.2008 13:11:00
Nepumuk
Hallo Lars,
eine ActiveX-DLL ist an eine Mappe gebunden. Ein COM-Addin an Excel. Du könntest aber eine ActiveX-DLL an ein "normales" Excel-Addin binden. Dann kannst du dessen Funktionen in jeder Mappe aufrufen. Allerdings nicht mit einem Shortcut. Aber über Commandbarbuttons kannst du Routinen im Addin aufrust, welche dann auf die Klassen in der DLL zugreifen.
Ganz ohne Code in Excel kannst du weder die Funktionen eines COM-Addins noch einer ActiveX-DLL nutzen.
Gruß
Nepumuk
Excel-AddIn aus VB aufrufen?
06.09.2008 01:59:17
Larsinator
Hallo nochmal,
also ich hab jetzt mal ein wenig auf dem Neuland rumgearbeitet und es läuft gut.
Habe mit VB 6 ein COM-AddIn erstellt und registriert. Start erfolgt über einen Button.
Jetzt nochmal eine Idee:
Ich starte ein VB-Prog., das folgendes machen soll...
1.) Registrieren des AddIns
2.) Starten einer neuen Excel-Instanz, damit das AddIn gleich mit geladen ist
3.) Aufruf des Excel-AddIns bzw. eines Subs aus VB raus (anstatt über Excel-Button)
Bei Punkt 1 und insbesondere Punkt 3 bin ich allerdings noch sehr planlos.
Gehts das und wenn ja, könnte ich dann vielleicht noch einen Ansatz haben?
Vielen Dank für die Mühen!
Viele Grüße
Lars
Anzeige

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige