Nochmal eine Frage zu VB, vielleciht kann mir ja jemand einen Rat geben:
Ich habe vor kurzem die Beschäftigungstherapie aufgebrummt bekommen, Excelmakros für alle möglichen vorgänge zu schreiben.
Da die Makros aber an eine Tabelle \'gebunden\' sind
(ich habe lediglich den Visualbuilder und Excel hier, keinerlei Dokumentation oder Literatur und vorher habe ich mich nie damit auseinander gesetzt, also bitte Nachsicht!) fand mein ausbilder die Makros nicht so toll und meinte, ich solle sie \'universeller machen\'
Drum habe ich jetzt versucht, die Excel-Makros in ein VisualBasic-Programm einzubauen, so das sie extern und tabellenunabhängig laufen.
Das klappt soweit auch und funktioniert, aber
der Zugriff ist ersten ultralangsam, so das ein sinnvolles Arbeiten mit dem Programm in Verbindung mit größeren Tabellen hoffnungslos ist.
Das zweite ist, dass die VB-Anwendung (sammt Excel) während des Programmablaufs kaum noch reagiert und ssich bei großen Tabellen nacheiner Zeit einfach einfriert und sichdann so aufhängt.
Ich habe mal einen Code eingefügt, vielleicht kann ihn ja mal jemand überfliegen und Tips geben! Bei der Tabellenverarbeitung würd eine Spalte nach doppelten einträgen gesucht durchsucht und diese dann gelöscht, in einem listenfeld angezeigt oder beides (wird in der form durch check3 und check4 abgefragt)
Form1 ist meine Form, Text(1, 2, n) Textfelder zum einlesen von Variabel
Option Explicit
Public Anwendung As Excel.Application Sub start()
\'=====Deklaration=====
Dim Arbeitsmappe As Excel.Workbook
Dim Tabellenblatt As Excel.Worksheet
Dim Tabelle
Dim Bereich As Excel.Range
Dim Blatt
Dim Spalte1 As Integer
Spalte1 = 0
\'=====Deklaration ende=====
\'=====Nachschauen, ob schon eine von Excel ausgeführt wird.
On Error Resume Next
Set Anwendung = GetObject(, "Excel.Application")
If Err.Number 0 Then
Set Anwendung = CreateObject("Excel.Application")
End If
Err.Clear
On Error GoTo 0 \' Fortfahren mit der üblichen Fehlerbehandlung.
\'=====Excel-Datei öffnen=====
Set Arbeitsmappe = Anwendung.Workbooks.Open(Form1.Text1.Text)
\'=====Tabellenblatt öffnen=====
Blatt = Form1.Text2.Text
Set Tabellenblatt = Arbeitsmappe.Sheets(Blatt)
Tabellenblatt.Select
Set Bereich = Tabellenblatt.Rows(1)
Spalte1 = Form1.Text3.Text
\'====Beginn der Tabellenverarbeitung
\'=====Deklaration=====
Dim Zeile1 As Integer
Zeile1 = 1
Dim Zähler As Integer
Zähler = 0
Dim Doppelte As Integer
Doppelte = 0
Dim Vergleich As Excel.Range
\'=====Deklaration ende=====
If Form1.Check2.Value = vbChecked Then \'(wahlweise ist excel visible oder unvisible, zweiteres ist schneller
Anwendung.Application.Visible = True
Anwendung.Parent.Windows(1).Visible = True
Arbeitsmappe.Sheets(Blatt).Visible = True
Else
End If
\'(=====Beginn des Makros====)
If Form1.Check4.Value = vbChecked Then
Form1.List1.AddItem (" Folgende wurden als doppelte gefunden: ")
Form1.List1.AddItem ("")
End If
Bereich.Cells(Zeile1, Spalte1).Select
While Bereich.Cells(Zeile1, Spalte1) "" \'Suchschleife, läuft so lange bis aktive keinen Inhalt mehr hat
Zähler = Zähler + 1
Set Vergleich = Bereich.Cells(Zeile1, Spalte1)
While Bereich.Cells(Zeile1, Spalte1) ""
Zeile1 = Zeile1 + 1
\'Bereich.Cells(Zeile1, Spalte1).Select \'
If Bereich.Cells(Zeile1, Spalte1) = Vergleich Then
If Form1.Check4.Value = vbChecked Then
Form1.List1.AddItem (Bereich.Cells(Zeile1, Spalte1))
End If
If Form1.Check3.Value = vbChecked Then
Bereich.Rows(Zeile1).Select
Selection.Delete Shift:=xlUp
Zeile1 = Zeile1 - 1
Doppelte = Doppelte + 1
End If
End If
Wend
Zeile1 = 2 + Zähler
If Form1.Check2.Value = vbChecked Then
Bereich.Cells(Zeile1, Spalte1).Select
End If
Wend
If Form1.Check4.Value = vbChecked Then
Form1.List1.AddItem ("")
Form1.List1.AddItem ("")
End If
If Form1.Check1.Value = vbChecked Then
Form1.List1.AddItem (Doppelte & " Doppelte Einträge in gefunden und gelöscht!")
End If
Set Arbeitsmappe = Nothing
Set Tabellenblatt = Nothing
End Sub
ich weis nicht wie verständlich das ist weil das forum meine tabulatoren nicht übernimmt und der quelltext so nicht allzu übersichtlich ist, aber ich würde mich über jeden tipp freuen!
grüße, Ryo
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Was DoEvents macht?
Schau mal in die Hilfe.