Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Array aus Excel-Makro in Visual Basic übernehmen?

Diskussion: Array aus Excel-Makro in Visual Basic übernehmen? im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo zusammen! Ist es möglich, einen mehrdimensionalen Array aus einem Excel-Makro in einer Visual Basic Anwendung weiter zu verwenden?! ...

Antwort
Alt 23.11.07, 11:34   #1 (permalink)
 
Registriert seit: 04.10.01
SPaRXLi Leistung: Facit NTK
SPaRXLi eine Nachricht über ICQ schicken
Likes: 0
Standard Array aus Excel-Makro in Visual Basic übernehmen?

Anzeige

Hallo zusammen!

Ist es möglich, einen mehrdimensionalen Array aus einem Excel-Makro in einer Visual Basic Anwendung weiter zu verwenden?!
Es geht darum, dass aus einer Exceltabelle viele Daten ausgelesen werden und in einen Array gespeichert werden sollen (Array(sheet,zeile,spalte)).
Mit einem Excel-Makro geschieht dies innerhalb von wenigen Sekunden.
Mache ich das ganze jedoch direkt in der VB-Anwendung, also das Füllen des Arrays mit den Daten aus der Exceltabelle, dann dauert dies mehrere Minuten, bis zu einer viertel Stunde!!
Nun war meine Überlegung, ob ich den Array über das Makro füllen lassen kann und dieser dann irgendwie an die VB-Anwendung übergeben werde kann.

Danke schonmal für eure Hilfe!

SPaRXLi ist offline   Mit Zitat antworten
Alt 23.11.07, 11:56   #2 (permalink)
Senior Member
 
Benutzerbild von lookshe
 
Registriert seit: 10.03.07
lookshe Leistung: 8086
Likes: 19
Standard

Ich weiss ja nicht, was du da genau implementiert hast, allerdings konnte ich bei vielerlei Dingen den Effekt, dass ein Makro wesentlich schneller läuft als ein gleichwertiges VB-Programm, noch nicht feststellen. Vielleicht solltest du dir mal deinen Programmcode genauer anschauen, ob du da noch was optimieren kannst.
lookshe ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 23.11.07, 12:14   #3 (permalink)
Themenstarter
 
Registriert seit: 04.10.01
SPaRXLi Leistung: Facit NTK
SPaRXLi eine Nachricht über ICQ schicken
Likes: 0
Standard

Der Witz ist, dass ich genau den gleichen Code benutzt habe.

Makro und Visual Basic:

Sub arrayladen()

Dim kursarray(2 To 100, 1 To 1300, 1 To 12)

For i = 2 To Sheets.Count

For j = 1 To 10 Step 3

k = 1

Do While Sheets(i).Cells(k, j) <> ""

kursarray(i, k, j) = Sheets(i).Cells(k, j)
kursarray(i, k, j + 1) = Sheets(i).Cells(k, j + 1)
kursarray(i, k, j + 2) = Sheets(i).Cells(k, j + 2)

k = k + 1

Loop

Next j

Next i

MsgBox "fertig"

End Sub


Visual Basic:

Option Explicit

Dim Excel As Object
Dim LFlag As Boolean

Private Sub Command1_Click()

CommonDialog1.Filter = ("Excel-Datei (*.xls)|*.xls;")
CommonDialog1.InitDir = App.Path
CommonDialog1.ShowOpen

If CommonDialog1.FileName <> "" Then
Excel.Workbooks.Open CommonDialog1.FileName
LFlag = True
End If

End Sub

Und dann eben noch die gleiche Sub von oben...
SPaRXLi ist offline   Mit Zitat antworten
Alt 23.11.07, 12:19   #4 (permalink)
Senior Member
 
Benutzerbild von lookshe
 
Registriert seit: 10.03.07
lookshe Leistung: 8086
Likes: 19
Standard

Hast du den Verweis auf Excel korrekt gesetzt? Dann solltest du nicht Object, sondern Application.Excel (oder sowas) nehmen.

Besser als eine Do-While-Schleife wäre glaub ich auch, wenn du dir die letzte belegte Zelle holst und mit einer For-Schleife bis dahin iterierst.

Muss ich mir später mal genauer angucken. Bin grad inner Vorlesung
lookshe ist offline   Mit Zitat antworten
Alt 23.11.07, 12:35   #5 (permalink)
Themenstarter
 
Registriert seit: 04.10.01
SPaRXLi Leistung: Facit NTK
SPaRXLi eine Nachricht über ICQ schicken
Likes: 0
Standard

Ok, danke schonmal soweit für deine Hilfe!

Hab noch was vergessen oben, für die Visual Basic Anwendung:

Private Sub Form_Load()

Set Excel = CreateObject(?Excel.Application?)
Excel.Visible = False

End Sub


Und hier der vollständigkeit halber dann nochmal die Sub arrayladen() von Visual Basic:

Sub arrayladen()

Dim kursarray(2 To 100, 1 To 1300, 1 To 12)

For i = 2 To Excel.Sheets.Count

For j = 1 To 10 Step 3

k = 1

Do While Excel.Sheets(i).Cells(k, j) <> ""

kursarray(i, k, j) = Excel.Sheets(i).Cells(k, j)
kursarray(i, k, j + 1) = Excel.Sheets(i).Cells(k, j + 1)
kursarray(i, k, j + 2) = Excel.Sheets(i).Cells(k, j + 2)

k = k + 1

Loop

Next j

Next i

MsgBox "fertig"

End Sub
SPaRXLi ist offline   Mit Zitat antworten
Alt 23.11.07, 13:06   #6 (permalink)
Senior Member
 
Benutzerbild von lookshe
 
Registriert seit: 10.03.07
lookshe Leistung: 8086
Likes: 19
Standard

Mh, das mir jetzt ehrlich gesagt auch etwas unerklärlich.

Andere Idee: Hast du schonmal versucht auf eine laufende Excelanwendung mit der geöffneter Datei zuzugreifen? Könnte vielleicht nen Overhead im VB geben, weil es die Excelanwendung öffnen muss.

Ansonsten schau mal bei vbarchiv.net im Forum, wenn es so ein Problem wirklich gibt, dann ist das dort zu finden.
lookshe ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Array aus Excel-Makro in Visual Basic übernehmen?
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Excel - Mit wenn Formel Makro auslösen nonpretium Applikationen 13 05.08.09 16:27
visual basic redips Applikationen 7 21.01.06 18:05
C++ und Visual Basic HackerXp (In)security allgemein 5 07.01.05 14:48
Visual Basic Api BlackCat Code Kitchen 2 21.12.04 22:05
Visual Basic low end Easyrider Code Kitchen 0 08.07.04 16:48


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61