| |
 | CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48 |
| |
 | KISTERS 3DViewStation: Neuer Strukturvergleich ab sofort verfügbar, eine Pressemitteilung
|
Autor
|
Thema: -Wie realisiere ich Variablenkontrolle (1402 mal gelesen)
|
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 18. Apr. 2013 14:54 <-- editieren / zitieren --> Unities abgeben:         
Servus zusammen, habe folgenden Code geschrieben. Möchte zwei abfragen realisieren. Einmal Materialart... das Klappt Dann neue Abfrage über Materialstärke. Hab in MsgBox zwei Werte vorgegeben. Es ist aber egal welchen Wert ich in die Messagebox eingebe, es öffnet sich trotzdem das Excelfile. Wie muss ich den Code anpassen, dass nur eine der geforderten Werte der Messagebox das Excelfile öffnen? Sub CATMain() Set Excel = CreateObject("Excel.Application") Dim Materialabfrage As Integer Dim Blechstaerke As Double retry: Materialabfrage = InputBox("Bitte Materialart wählen" & Chr(13) & Chr(10) & "[1] Stahl [2] Alu", "Eingabe Materialart ") If (Materialabfrage < 1) Or (Materialabfrage > 2) Then GoTo retry
End If If Materialabfrage = 1 Then
Blechstaerke = InputBox("Bitte Blechstaerke wählen" & Chr(13) & Chr(10) & "[0.7] 0.7mm [0.75] 0.75mm", "Eingabe Blechstaerke", Blechstaerke) Hier wird der Eingegebene Wert an Blechstaerke weitergegeben, aber die nachfolgende If anweisung akzeptiert jeden wert!
If Blechstaerke = 0.7 Then GoTo Line1
Line1: Excel.Visible = True Excel.Workbooks.Open SetzePfad & "L:\Schreiben\Schriften\Datenbank.xlsx" Excel.Sheets(1).Activate Excel.Sheets("Stahl 0,7 mm").select Value = Excel.Sheets("Stahl 0,7 mm").Range("A2").Value Excel.Quit MsgBox Value End If
End Sub Vielen Dank vorab. Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 18. Apr. 2013 15:40 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus Du vergleichst Äpfel mit Birnen: "Blechstaerke" ist ein String, 0.7 ein Long (oder Double??). Vor dem Vergleich muss du die Typen konvertieren (zB CDbl) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 19. Apr. 2013 08:14 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Apr. 2013 08:42 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus Ups, du hast recht. lass wir mal den Wert der Blechstärke ausgeben (Msgbox). Bei der Eingabe wird die Ländereinstellung für das Dezimaltrennzeichen verwenden (in der Inputbox) also: 0.7 -> 7 und 0,7 -> 0.7 Dies wird interessant wenn das Makro unabhängig von der Sprache laufen soll. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 19. Apr. 2013 09:11 <-- editieren / zitieren --> Unities abgeben:         
Sers, ja stimmt der Wert für die Blechstärke steht bei Eingabe von 0,7 auf = 0,7. Bei Eingabe von 0.7 ist das Ergebnis der Blechstärke gleich 7 Der Vergleich hinkt aber, da im Code ja nur 0.7 funktioniert. Hmm ne Idee wie man das anders machen kann? Vielen Dank Vorab. Gruß [Diese Nachricht wurde von sven180581 am 19. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Apr. 2013 09:35 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus ggf musst du vor der Typkonvertierung den Punkt durch ein Komma ersetzen. "0.7" -> "0,7" -> ergibt 0.7 -> wird in MsgBox als 0,7 angezeigt Das ist zwar unlogisch (und der Code funktioniert dann nur in der deutschen Umgebung) , aber bei der Konvertierung werden die Ländereinstellungen beachtet. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 19. Apr. 2013 10:00 <-- editieren / zitieren --> Unities abgeben:         
Reicht mir, wenn es in der deutschen Umgebung funzt  Hab es mal so probiert und des Double oben raus genommen. Aber klappt immer noch net. Das echt fuchsig. Blechstaerke = InputBox("Bitte Blechstaerke wählen" & Chr(13) & Chr(10) & " [0,7] = 0,7mm [0,75] = 0,75mm", "Eingabe Blechstaerke", Blechstaerke) Blechstaerke = CDbl(Blechstaerke) If Blechstaerke = 0.7 Then GoTo Line1 .... Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Apr. 2013 10:05 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus ich würde es so probieren: Code: Dim Eingabe As String Dim Blechstaerke As Double Eingabe = InputBox("Bitte Blechstaerke wählen" & Chr(13) & Chr(10) & " [0,7] = 0,7mm [0,75] = 0,75mm", "Eingabe Blechstaerke", Blechstaerke) Blechstaerke = CDbl(Replace(Eingabe, ".", ","))If Blechstaerke = 0.7 Then MsgBox "Wert ist 0,7mm " End If
Gruß BerndPS: AFAIK wird inzwischen empfohlen Sprungmarken nicht mehr zu verwenden (ggf nur noch zur Fehlerbehandlung) ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 19. Apr. 2013 10:20 <-- editieren / zitieren --> Unities abgeben:         
|
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 19. Apr. 2013 13:33 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Apr. 2013 14:07 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus Ja, du könntest zB den String für den Namen des Worksheets mit den Schleifen "zusammensetzen" bzw Ermitteln und dann nur einmal den Zugriff auf Excel verwenden. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 21. Apr. 2013 20:55 <-- editieren / zitieren --> Unities abgeben:         
|
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12054 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 21. Apr. 2013 21:04 <-- editieren / zitieren --> Unities abgeben:          Nur für sven180581
Servus zB (geht bestimmt noch "schöner") : Code: Excel.Visible = True Excel.Workbooks.Open SetzePfad & "L:\Schreiben\Schriften\Datenbank.xlsx" 'Was soll hier die Variabel SetzePfad?? if Materialabfrage = 1 and Blechstaerke = 0.7 then Value = Excel.Sheets("Stahl 0,7 mm").Range("A2").Value elseif Materialabfrage = 1 and Blechstaerke = 0.75 then Value = Excel.Sheets("Stahl 0,75 mm").Range("A2").Value elseif Materialabfrage = 2 and Blechstaerke = 1 then Value = Excel.Sheets("Alu1mm").Range("A10").Value else Value = Excel.Sheets("Alu 1,05 mm").Range("A10").Value end if Excel.Quit MsgBox Value
Allerdings: was passiert wenn andere Werte eingeben werden? .... Kannst du nicht immer die gleiche Zelle in allen Tabellen nehmen (ggf auch mit Zellnamen arbeiten)? Gruß BerndPS: Die Abfrage der Blechdicke brauchst du auch nur einmal. ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 21. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sven180581 Mitglied

 Beiträge: 19 Registriert: 23.01.2013
|
erstellt am: 22. Apr. 2013 09:56 <-- editieren / zitieren --> Unities abgeben:         
Servus, achso ja das schaut ganz gut aus. Also ich bin mit den Zellen flexibel. Kann auch immer Die werte aus z.b.A2 oder so auslesen lassen. Bezeichung der Zelle würde dkritisch lauten! Aber das ja nen String. Benötige ja aus der Datenbank den dazugehörigen Zahlenwert. Also momentan akzeptiert mein Code nur die vorgegebenen Blechstärken. Bei Eingabe anderer springt es zurück in den Code ohne etwas auszuführen. Bei deinem Code akzeptiert er alle Zahlen in Bereich der Blechstärke Warum fragst du? Gruß Sven [Diese Nachricht wurde von sven180581 am 22. Apr. 2013 editiert.] [Diese Nachricht wurde von sven180581 am 22. Apr. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |