VBA, Fragen dazu
#11
Hallo Olaf,

ich habe mir die Datei heruntergeladen, das VBA-Projekt ist dabei!

In der VarINI() sollte die Globale Variable „Breit“ mit der Eigenschaft „SizeWidth“ initialisiert werden, nicht mit „SizeHeight“.

Code:
'die Globalen Variablen mit Werten füllen
   
   Hoch = oScheibe.SizeHeight
   Breit = oScheibe.SizeWidth ' geändert von SizeHeight auf SizeWidth
   DRHoch = oDurchreiche.SizeHeight
   DRBreit = oDurchreiche.SizeWidth

Die Eigenschaft „MaxLength“ der Textfelder würde ich schon bei der Initialisierung des Dialogs festlegen, nicht erst bei der Aktivierung. Dazu müsstest Du die Prozedur „UserForm_Initialize()“ anlegen.

Code:
Private Sub UserForm_Initialize()
   TextBox1.MaxLength = 3
   TextBox2.MaxLength = 3
   TextBox3.MaxLength = 3
   TextBox4.MaxLength = 3
   TextBox5.MaxLength = 10
   TextBox6.MaxLength = 5
End Sub

Wenn Du die Eigenschaft schon beim Einfügen der Textboxen in den Dialog im Eigenschaftsfenster festlegst, brauchst Du gar keinen Code zu schreiben. Die  Prozedur „UserForm_Initialize()“ könntest Du Dir dann also sparen:
[Bild: zwischenablage01yvk55.jpg]


Die Eigenschaften „Value“ und „Text“ der Textfelder verweisen auf den identischen Inhalt.

mit dem Befehl TextBox1.Value = 1 überschreibst Du also den Inhalt, der vorher mit TextBox1.Text = GText(Breit) festgelegt wurde. Wenn ich diese Überschreibungen auskommentiere, funktioniert der Dialog.

Code:
Private Sub UserForm_Activate() 'Textfelder beim aktivieren des Dialogs belegen

   TextBox1.Text = GText(Breit)
   TextBox2.Text = GText(Hoch)
   TextBox3.Text = GText(DRBreit)
   TextBox4.Text = GText(DRHoch)
   TextBox5.Text = GText(Dateiname)
   TextBox6.Text = GText(Anzahl)

   'den Text in Textbox1 auswählen
   TextBox1.SelStart = 0
   TextBox1.SelLength = 100

'    TextBox1.Value = 1
'    TextBox2.Value = 1
'    TextBox3.Value = 1
'    TextBox4.Value = 1
'    TextBox5.Value = 1
'    TextBox6.Value = 1
'
End Sub


Auch ich wünsche Dir ein schönes Wochenende.

Gruß

Koter
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Olaf
Zitieren
#12
Nachtrag:
Die Sub „DeckelPlatzieren()“ steht im Modul „ThisDocument“ und wird vom Ereignis „SelectionChange()“ aufgerufen.
Ich würde das Ereignis in diesem Projekt nicht verwenden. Die Ereignisse des Dialogs reichen aus, um die Prozeduren des Projekts auszuführen.
Im aktuellen Entwicklungsstadium des Projekts, ist das einzige sinnvoll einzusetzende Dokument-Ereignis das Ereignis „Open()“ um den Dialog zu starten.

Das Ereignis „SelectionChange()“ wird bei jeder Änderung der Auswahl im Dokument abgefeuert. Weil Auswahländerungen oft auftreten, tritt dieses Ereignis oft auf. Auswahländerungen werden aber nicht nur durch den Benutzer ausgelöst, auch Makro-Prozeduren können diese auslösen. Das Ereignis ist also schwer vorherzusagen. Es birgt die Gefahr von Endlosschleifen die CorelDraw einfrieren oder komplett abstürzen lassen können. Auch eine Fehlersuche wird nicht gerade vereinfacht.

[Bild: 179px-L%C3%A4mpel_bw_transparent.png]
Wenn ich das Ganze hier noch einmal so lang und breit in Schulmeister-Manier wiederhole, dann nicht, um Dir auf die Nerven zu gehen (oder höchstens ein kleines Bisschen). Ich halte es aber für nützlich, noch einmal darüber nachzudenken.

Die Sub „DeckelPlatzieren()“ kannst Du ja z.B. in das Plattenmodul verschieben und von der Prozedur „machPlatten()“ ausführen lassen.

Code:
Sub machPlatten()
   If Not Dialog1.Visible Then Exit Sub ' nicht ausführen wenn der Dialog nicht sichtbar ist
   
   Call machDeckelPlatte 'Die Scheibe ändern
   Call DeckelPlatzieren
   
End Sub



Gruß

Koter
Zitieren
#13
Hallo Koter,

vielen Dank. Das Problem ist wahrscheinlich das ich Deinen Code verwendet habe, der teilweise auch aus mindestens 2 Dateien von Dir stammt und den zusammengewürfelt habe und zusätzlich auch noch etwas ergänzt habe. Das ganze dann mit zu wenig Wissen von mir.......

Ich versteh mitlerweile ein bisschen vom Code aber immer noch viel zu wenig.

Ich gehe den Code nochmal Stück für Stück durch anhand der von Dir genannten Fehler.

Vielen Dank und eine schöne Woche.

Gruß

Olaf

Betriebssystem / Grafik-Software: Corel Draw GS SE 2018
Zitieren
#14
Achso, wegen der Schulmeister-Manier..... Das finde ich genau richtig.

Mir fehlt ja definitv einfach ganz ganz viel Grundwissen und da bin ich wirklich für jede Hilfe und jeden Fehler der gefunden wird sehr dankbar.

Betriebssystem / Grafik-Software: Corel Draw GS SE 2018
Zitieren
#15
Hallo Koter,

ich habe nun alles, wie von Dir beschrieben, umgestellt. Es funktioniert hervorragend, vielen Dank. Nun werde ich in der nächsten Woche an die große Datei gehen und schauen ob ich alles verstehe. Der Code in der "Baustelle" ist für mich tatsächlich sehr schwierig zu verstehen aber ich bleibe am Ball.

Vielen Dank und vorab schonmal ein schönes Wochenende.

Gruß

Olaf

Betriebssystem / Grafik-Software: Corel Draw GS SE 2018
Zitieren
#16
Hallo Olaf,

in der Baustelle sind die Prozeduren zum Speichern für X7 und zum platzieren. Die auskommentierten Teile habe ich nur zum Testen und zum Erstellen der Fixpunkte aus den roten Linien verwendet (das war mir per Hand zu mühsam).

Die Datei habe ich Dir auf diese Frage hin geschickt:

(18.09.2020, 11:01)Olaf schrieb: ...Hast Du eine Idee wie man das bestimmen könnten? Ich vermute das ich das mit Wenn dann sonst lösen muss, ich weiss allerdings nicht wie. Wenn es geht, wäre es toll "Wenn dann sonst" nicht für jedes einzelne Teil zu vergeben sondern eventuell schon vorher einzugrenzen durch " Wenn der Wert in dem Feld Breite kleiner ist als 251mm dann nehme nur die Teile aus linken Zeichnung des Deckels....

Mein Vorschlag zur Lösung dieser Aufgabe steht im Dialog-Modul in der Prozedur „CommandButton1_Click()“.
Die erste Unterscheidung benutzt „If Then“, danach folgt „Select Case“.

Der Programmablaufplan der Prozedur sieht so aus:
[Bild: pap-dialogbuttonohjjg.jpg]
Die Prozedur „platzieren“ in der Baustelle habe ich nur zum Testen der Prozedur „CommandButton1_Click()“ gebraucht. Ich hatte angenommen, dass Du dazu Deine eigenen Prozeduren schreiben wolltest.
Du kannst natürlich auch diese Prozedur verwenden.

Durch Deine gut konstruierte Namenskonvention bei den Vorlagen, konnte ich mir die Prozeduren für jede Vorlage sparen und alles von einer Prozedur erledigen lassen. Ein paar kleine Fehler haben sich aber bei den Namen in der Zeichnung eingeschlichen. Ich habe sie jetzt nicht so schnell wiedergefunden, aber ich glaube einige Namen sind doppelt vergeben. Wenn Du das berichtigst, sollte die Prozedur wie geplant funktionieren.

Der Prozedur wird als Argument eine Zeichenfolge von der „CommandButton1_Click()“ übergeben.
Das Argument wird mit den Namen der Objekte in der Zeichnung durch Befehle für Zeichenfolgen abgeglichen, um die richtige Vorlage auszuwählen. Zur Zerlegung von Zeichenfolgen an Leerzeichen wird die Funktion „Split()“ verwendet, die ein Datenfeld erzeugt.

Der Programmablaufplan der Prozedur sieht so aus:
[Bild: pap-platziereni7jyw.jpg]
Das Setzen von Koordinaten ist im PAP nicht genau beschrieben. Eigenschaften wie „TopY“ oder „CenterX“ hast Du ja schon öfter verwendet.

Wenn Du einen Abschnitt im Code genauer untersuchen willst, kannst Du auch Haltepunkte oder den Befehl „Stop“ verwenden:

[Bild: debug31jdr.gif]

Variableninhalte kannst Du beobachten, wenn Du Überwachungsausdrücke anlegst oder sie im Direktbereich mit „Debug.Print“ ausgeben lässt.

Du kannst vielleicht die Variablennamen noch ändern. Der Name der Variable „s“ ist nicht sehr aussagekräftig. Da hätte ich mir etwas mehr Mühe geben können.

Ein schönes Wochenende!

Gruß

Koter

Nachtrag: Bei den anderen Beiträgen gab es für von der Forums-Software verkleinerte Bilder eine „Click to enlarge“ - Funktion. Das scheint bei neuen Beiträgen nicht mehr zu funktionieren. Ich habe die PAPs als PDF angehängt weil die Bilder zu klein angezeigt werden.


.pdf   PAP-1.pdf (Größe: 34,19 KB / Downloads: 2)
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • Olaf
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Fragen eines blutigen Anfänger Spiderschweinn 10 1.627 05.04.2016, 20:02
Letzter Beitrag: ensing
  Fragen zu Corel Draw X6 Home & Student RSoutside 31 7.731 01.12.2014, 13:32
Letzter Beitrag: RSoutside
  Wechsel X4 auf X6, Fragen!? TottiSB 3 983 26.07.2012, 12:06
Letzter Beitrag: mvm
  Einige CorelDraw X4 Fragen anorak 4 1.948 04.03.2011, 14:49
Letzter Beitrag: anorak
  Neuling hat Fragen zu Corel Draw Schnittmustererstellung anhand von Bitmap lizardqueen 2 2.095 20.11.2009, 11:43
Letzter Beitrag: skifan
  Fragen zur Schnittmenge Hirs 1 664 18.10.2009, 04:09
Letzter Beitrag: Nachtviole
  allgemeine Fragen zu Corel Draw wolle28071975 2 3.507 17.05.2009, 17:24
Letzter Beitrag: Unkraut