| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Nahe an industriellen Realbedingungen |
Autor
|
Thema: Zahl mit Punkten in VBA um eins erhöhen (718 mal gelesen)
|
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 18. Jan. 2008 11:51 <-- editieren / zitieren --> Unities abgeben:
Habe folgendes Problem: Die Variable "Zahl" hat den Wert 935.81.00.006. wenn ich nun Zahl = Zahl + 1 in VBA rechnen lasse, ergibt das folgenden Variableninhalt: 9358100007. Ich würde aber 935.81.00.007 benötigen. Irgendwelche Tips? Schönes Wochenende Christoph ------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lutz Federbusch Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau
Beiträge: 3094 Registriert: 03.12.2001 alle SW seit 97+ AutoCAD2016-2022 ERP ProAlpha + CA-Link Intel Core i7-7820K 32GB Win10x64 Quadro K5000 SpacePilot
|
erstellt am: 18. Jan. 2008 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Deine Zahl ist sicher ein String. Von dem die letzten 3 Stellen abschneiden. In eine Zahl umwandeln, 1 addieren und wieder als String an den Rest ankleben. Oder Du prüfst Dein jetziges Ergebnis auf Punkte und setzt die wieder neu, wenn sie nicht da sind - auch mit Stringoperationen. ------------------ Lutz Federbusch Mein Gästebuch Der Mensch, Herr oder Sklave der Technik? [Diese Nachricht wurde von Lutz Federbusch am 18. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Harald Stratmann Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 169 Registriert: 17.11.2003 W7 professional-64bit 12GB Ram NVidia Quadro 2000 SWX 2013
|
erstellt am: 18. Jan. 2008 12:13 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
|
oma1 Mitglied designer
Beiträge: 131 Registriert: 22.03.2005 SW 2007 SP 3.4<P>Windows XP SP2<P>DELL Precision M65 Intel Core 2 2Ghz 2GB RAM
|
erstellt am: 18. Jan. 2008 12:46 <-- editieren / zitieren --> Unities abgeben:
Danke Harald, es muss so lauten, dann klappt es: Dim s1,s2 s3,s4 as string s1 = left(zahl,3) s2 = right(left(zahl,6),2) s3 = right(left(zahl,9),2) s4 = right (zahl,3) Zahl = s1 & "." & s2 & "." & s3 & "." & s4 10 UUUUUUS
------------------ cma Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 18. Jan. 2008 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
so geht's auch, ziemlich wasserdicht (VB6 geht aber auch in VBA) :-) Klaus ------------------ Lieber Fehler riskieren als Initiative verhindern (R. Mohn) [Diese Nachricht wurde von modeng am 18. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThoMay Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 5258 Registriert: 15.04.2007 SWX 2019 Windows 10 x64
|
erstellt am: 18. Jan. 2008 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo und einen schönen guten Tag Christoph. In Excel sollte man vornehmlich mit ZAHLEN rechnen und nicht mit Texten spielen. Deshalb mein anderer Vorschlag: siehe Bild. Gruß ThoMay ------------------ Es gibt keine dummen Fragen, nur unzweckmäßige. Hierauf bekommt man dann machesmal eine unzweckmäßige, freundliche Antwort. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tbd Mitglied Teamleiter
Beiträge: 825 Registriert: 26.01.2006 Dell Percision T5400 Intel(R) Xeon(R) CPU X5460 @ 3.16GHz 3,25 GB RAM Nvidia Quadro FX 4600 ----- Win XP Prof SP 3 SW 2008 SP 5.0 PARTsolutions 8.1.08 Cideon SAP PLM 5.103.5.17 Visual Studio 2008
|
erstellt am: 18. Jan. 2008 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hallo Christoph, ich bin mir sicher das du nicht immer genau weist wieviele Stellen zwischen den Punkten liegen. Deshalb würde ich dir empfehlen den String mit Hilfe der Split Methode zu verarbeiten! Habe da mal was gebastelt:
Code:
Dim sZahl As String Dim sNeueZahl As String Dim sZahlBestandteile() As String Dim iZahl As Integer Dim iBestandteillaenge As Integer Dim iLaenge As Integer Dim iBestandteile As Integer sZahl = "935.81.00.006." sZahlBestandteile = Split(sZahl, ".") iBestandteillaenge = Len(sZahlBestandteile(UBound(sZahlBestandteile) - 1)) iZahl = CInt(sZahlBestandteile(UBound(sZahlBestandteile) - 1)) iZahl = iZahl + 1 sZahlBestandteile(UBound(sZahlBestandteile) - 1) = CStr(iZahl) For iLaenge = Len(sZahlBestandteile(UBound(sZahlBestandteile) - 1)) To iBestandteillaenge - 1 sZahlBestandteile(UBound(sZahlBestandteile) - 1) = "0" & sZahlBestandteile(UBound(sZahlBestandteile) - 1) Next For iBestandteile = 0 To UBound(sZahlBestandteile) If iBestandteile = UBound(sZahlBestandteile) Then sNeueZahl = sNeueZahl & sZahlBestandteile(iBestandteile) Else sNeueZahl = sNeueZahl & sZahlBestandteile(iBestandteile) & "." End If Next Debug.Print (sZahl) Debug.Print (sNeueZahl)
------------------ Mfg Daniel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 18. Jan. 2008 13:09 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Etwas aufwändiger, aber dafür flexibler (funktioniert auch, wenn Zahl mehr oder weniger Gruppen hat): Code: Private Sub Form_Load() Dim Zahl As String Dim record As Variant Dim i As Integer Zahl = "935.81.00.006"'Zahl in Bestandteile zerlegen record = Split(Zahl, ".") 'Record = {"935","81","00","006} 'davon letzten Teil nehmen Zahl = record(UBound(record)) ' Zahl = "006" 'hier wird 1 auf die letzte Zahl addiert (oder sonst ne Aktion ausgeführt Zahl = Trim(str(Val(Zahl) + 1)) ' Zahl= "7" 'wieder in Form bringen (Anzahl der Stellen) Do While Len(Zahl) < Len(record(UBound(record))) Zahl = "0" & Zahl Loop record(UBound(record)) = Zahl 'Zahl = "007" 'Ausdruck wieder zusammensetzen Zahl = record(0) For n = 1 To UBound(record) Zahl = Zahl & "." & record(n) Next n MsgBox Zahl ' Zahl = "935.81.00.007"
Viele Wege führen nach Rom. Ach ja...statt s3 = Right(Left(Zahl,7),2) geht einfacher s3 = Mid(Zahl, 8, 2) ------------------ Klaus www.al-ko.com | mein Gästebuch | privat... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 19. Jan. 2008 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Hi zusammen, wenn es mal schnell gehen muss Sub Test Dim Zahl As String Dim ZahlPlusEins As String Zahl = "935.81.00.006" ZahlPlusEins = Format(CDbl(Replace(Zahl, ".", "")) + 1, "000,00,00,000") Call MsgBox(ZahlPlusEins) end sub Gruß Micha Nachtrag: Geht auch wenn die letzte Zahl eine 999 ist. ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
[Diese Nachricht wurde von VBSpawn am 19. Jan. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 21. Jan. 2008 07:38 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 21. Jan. 2008 09:40 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
das ist kein Trick ..... nur grenzenlose Faulheit ;o) ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Ingenieur für Flugzeugstrukturen - mechanische Konstruktion und Berechnung (m/w/d) | Die FTI Engineering Network GmbH wurde 2001 gegründet. Als zugelassener Entwicklungs- und Herstellungsbetrieb umfasst unser Portfolio komplette Systemlösungen vom Design über die Herstellung bis zur Zertifizierung und Integration. Unsere Systemlösungen sind weltweit im Einsatz, z.B. im Airbus A380. Zu unseren Kunden zählen namhafte Flugzeughersteller, Airlines und Wartungsbetriebe. FTI ist Mitglied der Peiker Holding.... | Anzeige ansehen | Leitung, Teamleitung |
|
Harald Stratmann Mitglied Dipl.-Ing. Maschinenbau
Beiträge: 169 Registriert: 17.11.2003 W7 professional-64bit 12GB Ram NVidia Quadro 2000 SWX 2013
|
erstellt am: 21. Jan. 2008 09:44 <-- editieren / zitieren --> Unities abgeben: Nur für oma1
Den Trick von VBspawn find ich auch cool, setzt allerdings voraus, daß im System die Sprach- und Regionsoptionen entsprechend eingestellt sind. Ansonsten finde ich es schon klasse, wie kreativ mit einer solch banalen Programmieraufgabe umgegangen werden kann. Ein dickes Lob von meiner Seite für die Beiträge. Hier kann tatsächlich jedem geholfen werden. Ich hoffe so geht's noch lange weiter. Gruß an alle Harald
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |