vB + Excelmakro = Endlosschleife

doppelpunkthexe

Cadet 1st Year
Registriert
Nov. 2012
Beiträge
12
Hallo

Ich habe ein Problem. Ich habe folgendes Makro in vB eingearbeitet und erhalte, wenn ich das Programm ausführe, eine Endlosschleife. Die Spalten werden nicht wie gewollt bis zum ersten Inhaltsleeren Feld gefüllt, sondern bis ins endlose.

Code:
.Sheets("MeinSheet").Select()
                z = 2
                Do While .Cells(z, 1) <> ""
                    .Range("C" & z & ":C" & z).Select()
                    .ActiveCell.FormulaR1C1 = promoDateTA
                    .Range("D" & z & ":D" & z).Select()
                    .ActiveCell.FormulaR1C1 = promoDateTAEnd
                    z = z + 1
                Loop

Über Excel funktioniert das Makro komischerweise aber. Nur vB bereitet Schwierigkeiten.
Hat jemand eine Idee?
 
@
Ja, den Officeassisten verwenden ist die Lösung! Hallooooooooooo F1= Hilfe / Rechts oben=> Hilfetexteingabe oder Formelassistenden.
 
DerKleine49 schrieb:
@
Ja, den Officeassisten verwenden ist die Lösung! Hallooooooooooo F1= Hilfe / Rechts oben=> Hilfetexteingabe oder Formelassistenden.
Vielen Dank für deine Hilfe, aber lies am besten noch mal meinen Startpost durch.
Der Formelassistent wirft nichts raus, da die Problematik nur in Visual Basic auftritt.
Ich brauche eine VB konforme Lösung via Excel-Objekt, in Excel selbst tritt nämlich der genannte Fehler gar nicht erst auf.
 
Wie man sieht, kann "while" schnell Probleme machen. Da der zu durchsuchende Bereich sich bei der Verarbeitung (fast immer) nicht ändert, ist vorher bekannt wie weit man Iterieren muss. Dann ist immer "for" zu bevorzugen.
Code:
maxrow = .Range("A" & .Rows.Count).End(xlUp).Row
For Z = 2 To maxrow
    .Cells(Z, 3).FormulaR1C1 = promoDateTA
    .Cells(Z, 4).FormulaR1C1 = promoDateTAEnd
Next
Die Selects sind hier unnötig, der Wert kann der Zelle direkt zugewiesen werden. Kostet nur unnötig Performance.
 
Danke für deine Hilfe Spike S.
In Visual Basic füllt er leider nichts aus, aber du lieferst mir einen guten Anhaltspunkt zum weiteren Forschen.
 
Das verstrickt sich innerhalb VB so sehr, es ist zum Verzweifeln.
Kennst Du zufällig auch eine Lösung, per Call auf eine Sub in einem Modul in der Excelfile zuzugreifen?
Also von meinem vB Programm praktisch auf die Sub Test1() im Modul1 zugreifen und die Sub ausführen.

Mein Ansatz wäre in etwa so:
Code:
With excelMakro {
.Modul1.Test1()
}

Aber das mag vB irgendwie nicht.
 
Funktionen und Subs aus den Modulen stehen überall innerhalb der Arbeitsmappe zur Verfügung. Es reicht also:
Code:
call Test1
 
Komisch - ich bekomme eine Exception, wenn ich das mache.
Die Sub habe ich auch als Public definiert. :confused_alt:

Hier mal mein Code (gekürzt und ein wenig entsinnt) zum Testen:

Code:
dim xoApp = CreateObject("Excel.Application")
With xoApp {
   .Workbooks.Open(openFileDialog1.bla)
   .Makro1()
}

' Ergebnis: Exception :(

/Edit:
Die Lösung funktioniert mit .Run("MakroName")! :)
 
Zuletzt bearbeitet:
Gut das du eine andere Lösung gefunden hast :)

Aber zu letztem Problem: ".Makro1" müsste theoretisch über das Workbook-, nicht über das Application-Objekt aufgerufen werden.
Ist openFileDialog1.bla ein Objekt mit Attribut "bla" was den Dateinamen als string enthält?
Welche konkrete Exception erscheint?
 
Zurück
Oben