Hallo
Ik heb een macro gemaakt die de waarden in een Excel-tabel kopieert en in de persoonlijke rekwisieten van een kamer plakt. Deze waarden worden vervolgens gebruikt in de vergelijkingen.
Ik heb een probleem met het decimale scheidingsteken: het formaat dat in Excel wordt gebruikt is een komma ",", terwijl SW om een punt "" vraagt.
Hier is het stukje code dat de kopie maakt:
Dim numeroligne As Integer
numeroligne = 1 'Numéro de départ
Do While Not IsEmpty(Cells(numeroligne, 1))
retval = swModel.DeleteCustomInfo(Cells(numeroligne, 1))
retval = swModel.AddCustomInfo2(Cells(numeroligne, 1), swCustomInfoText, Cells(numeroligne, 2))
numeroligne = numeroligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
Ik heb verschillende dingen geprobeerd, zonder succes:
- vervang de variabele "swCustomInfoText" door "swCustomInfoNumber" of "swCustomInfoDouble": het type van de eigenschap verandert, maar ik heb nog steeds een komma als scheidingsteken
-Schakel over naar een scheidingsteken in het formaat "." in Excel": het verandert alleen het uiterlijk, maar de waarde die is opgehaald en geplakt in effen heeft nog steeds een komma ","
-gebruik een kommasymbool "," standaard in SW (systeem / algemene optie): in mijn vergelijking worden getallen met een kommascheidingsteken niet herkend
Help!
Hallo;
Hier is een stukje code om de instellingen in Excel te controleren:
ParamSeparators = Application.International(xlDecimalSeparator)
Dan is het eenvoudig om een lus in exel te maken om de "" carracters te vervangen door "." of andersom.
If ParamSeparators = "," then
for each cells in range (La zone excel contenant les valeurs à modifier)...
...Replace(Texte de la Cellule, ",", ".")
....
end if
En dat allemaal zonder dat je de instellingen van Solidworks of Excel hoeft te wijzigen.
Vriendelijke groeten.
2 likes
Zal het de waarde in het Excel-bestand veranderen? Het is inderdaad een oplossing. Maar nu ik toch bezig ben, vraag ik om "," systematisch te vervangen door ".", zonder de vraag te stellen "Als ParamSeparators = "," "
Het verbaast me dat er geen meer "natuurlijke" oplossing is
Hallo;
Ik gebruik dit type bediening wanneer ik macro's deel tussen verschillende pc's, zodat ik de instellingen van elke gebruiker compenseer.
Ik doe ook hetzelfde om te controleren of Office in 32 of 64Bits is.
Het is een soort erkenning van het falen van mijn pogingen tot "standaardisatie" en standaardisatie van onze computerapparatuur...
Als u de enige gebruiker bent, is dit type controle inderdaad overbodig...
Vriendelijke groeten.
1 like
Bij nader inzien, en als het mogelijk is, zou ik er de voorkeur aan geven de komma te vervangen door een punt IN SW . het stelt me in staat om met waarden zoals getallen in Excel te werken, en het is veel handiger voor mij dan ze in tekstformaat te hebben. Voorlopig ben ik tevreden met de vervanging in Excel, maar als iemand het beter heeft, zal ik heel blij zijn.
We moeten iets doen als
Eigenschappen weergeven
Haal de waarde van elke eigenschap op als een tekenreeks
Zoeken/vervangen in de tekenreeks
Kopieer de tekenreeks naar de juiste eigenschap
Het lijkt me nog steeds een gasfabriek...
Door het combineren van uw code en die van @Maclane dit zou moeten doen, zet gewoon de vervanging van de , door de. waar je je waarde vandaan haalt (uiteindelijk moet je misschien transformeren in een string voordat je gaat testen)
Kijk naar de waarde van de Debug.print in uw uitvoeringsvenster en pas aan of u deze in een string moet omzetten of niet. En indien nodig (numeriek en niet-numeriek, pas je alleen toe als de waarde numeriek is.
Als uw waarde nog steeds numeriek is, hoeft u deze test niet uit te voeren.
Dim numeroligne As Integer
numeroligne = 1 'Numéro de départ
Do While Not IsEmpty(Cells(numeroligne, 1))
retval = swModel.DeleteCustomInfo(Cells(numeroligne, 1))
Debug.print Replace(Cells(numeroligne, 2),",","."))
retval = swModel.AddCustomInfo2(Cells(numeroligne, 1), swCustomInfoText, Replace(Cells(numeroligne, 2),",","."))
numeroligne = numeroligne + 1 'Le numéro est augmenté de 1 à chaque boucle
Loop
Dank je wel SbaDenis! Ik zal dat een beetje later testen. En dat ik een beetje zoek om te begrijpen wat debug is. Afdrukken.
In ieder geval, BEDANKT dat je me hebt gepusht om VBA-code te leren. In het begin is het weerzinwekkend, maar hoe meer ik het doe, hoe leuker ik het vind. Ik val je lastig met veel vragen, maar ik heb het gevoel dat ik vooruitgang boek. Voorbij zijn de dagen dat ik hersenschimmen probeerde te maken van stukjes die ik hier en daar vond;)
Hallo
In Excel is het heel goed mogelijk om een punt te vervangen door een komma (of andersom).
We hadden problemen met configuraties, afhankelijk van of het werkstation in de VS of FR was geconfigureerd.
Zoals bijvoorbeeld dit:
=SUBSTITUEREN(A3; ","; ".")
Hallo
Ter info, ik kon de "," door "." in Excel niet veranderen. De sbadenis-methode werkte ook niet (debug.print grijpt in op de Excel-cel of op de opgeslagen tekstreeks?)
Ik heb uiteindelijk de oplossing gevonden door de opties in Windows (regionale instellingen) te wijzigen.
Het is niet erg bevredigend voor mij, want als ik mijn Excel-macro op een andere computer gebruik, moet ik controleren of deze parameter correct is ingesteld.
Idealiter zou u in staat zijn om te overschrijven in de solidworks-eigenschap
Hallo
In Excel moet u een kolom maken voor de eigenschap die u wilt beheren.
In deze kolom moet u de formule =SUBSTITUTE(A3; ","; ".") of A3 is de cel met de numerieke waarde die u in uw eigenschap wilt invoeren. (de formule vervangt hier de komma door de punt, i moet =SUBSTITUTE(A3; "."; ",") om het tegenovergestelde te doen). Je moet dus A3 vervangen om de juiste cel te selecteren.
In PJ een SW2020 deel met een Excel met behulp van deze functie op de eigenschap 'observatie': de afmeting van 2,5 (met komma) in SW wordt 2,5 (met punt) in de eigenschap
08hu_test.sldprt