| |
 | Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
|
Autor
|
Thema: Problem in der VBA-Programmierung (828 mal gelesen)
|
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 11. Jan. 2005 09:12 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute, ich bin kein versierter Programmierer.Ich suche schon seit 2 Stunden das Problem und trotzdem klappt es nicht. Ich habe hier ein Problem mit der If anweisung. D15 ist ein Feld im Excel,das durch ein Listenelement verändert wird. Ich möchte,wenn dort das Wort Cool erscheint,das der Rechner mir dann die eine Datei und wenn das Wort doof erscheint,das er mir dann die andere Datei aufruft. Danke MfG Demokrat2000 Dim objSEApp As SolidEdgeFramework.Application Dim objSEDoc As Object Dim strDocument As String Dim strDocument2 As String Dim Cool As String Dim doof As String Private Sub combobox_Click() Set objSEApp = CreateObject("SolidEdge.Application") objSEApp.Visible = True If D15 = Cool Then strDocument = "c:\Test.par" Else: strDocument2 = "c:\Test2.par" End If Set objSEDoc = objSEApp.Documents.Open(strDocument) Set objApp = Nothing Set objDoc = Nothing Set objDocuments = Nothing End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 (SP2 & SP1) / Win XP pro (SP1) & Win 2000 pro (SP4) AutoCAD Map 2000i / WinNT (SP6)
|
erstellt am: 11. Jan. 2005 09:49 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Hallo Demokrat, wäre zwar eher eine Frage fürs ExcelForum gewesen, aber die Antwort bekommst natürlich auch hier. Ersetze deine IF Zeile durch diese Zeile.
Code: If Range("D15") = "Cool" Then
- D15 war bei Dir eine Variable und kein Bereich des ExcelBlattes - Cool war ebenfalls eine Variable und kein Vergleichsstring Gruss TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
melzig Mitglied Maschinenbautechniker
 
 Beiträge: 396 Registriert: 15.01.2003
|
erstellt am: 11. Jan. 2005 09:58 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
@ Demokrat2000 Woher soll denn der Computer wissen welches D15 er vergleichen soll. Das mußt du ihm schon mitteilen und außerdem den Vergleichswert in Klammern setzen, da es ja ein String ist. ungefähr so: Private Sub CommandButton1_Click() Dim Hund As String If Tabelle1.Range("A6").Value = "Hund" Then MsgBox "Ja" Else MsgBox "Nein" End If End Sub Tschüß Frank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BloodyMess Mitglied Applicationingenieur
  
 Beiträge: 604 Registriert: 06.06.2002 AutoCAD Map 3D 2005 (SP2 & SP1) / Win XP pro (SP1) & Win 2000 pro (SP4) AutoCAD Map 2000i / WinNT (SP6)
|
erstellt am: 11. Jan. 2005 10:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Mal so als Tip noch. Wenn Du im VBA Modus unter Extras -> Optionen -> Editor .. vor 'Variablendeklaration erforderlich' ein Häckchen setzt, sollte es Dir nicht mehr passieren, weil er dann meckert, dass er die Variablen nicht kennt und Du solltest dann selbst drauf kommen, dass dies keine Variablen sind. Gruss TP ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 12. Jan. 2005 09:49 <-- editieren / zitieren --> Unities abgeben:         
Sorry, ich habe da wieder ein problem mit dem Programmieren. ICh will in Solid Edge eine Gewindebohrun erzeugen aber ich weiß nicht,wo der Fehler liegt.Das Programm ist ein fertiges Programm aus S.E. ich versuche es gerade zu verändern. Ursprünglich erzeugt dieses Programm einen Zylinder und setzt in die Mitte eine Gewindebohrung. Ich will aber ,das er mir zuerst prüft, ob Solid Edge offen ist und danach will ich ,das er mir die Bohrung an eine bestimmte Stelle setzt. Ich habe schon versucht in S.E. einen Körper zu erzeugen und dort mal ne Bohrung zu erzeugen.aber irgendwie meckert er da auch noch rum. Ich weiß nicht, wo er den Fehler hat. Denn die Variablen sind alle neu (also werden vorher nicht verwendet.) Theoretsich müßte er doch einfach nur die Bohrung erzeugen ohne,das da ne Fehlermeldung ausbringt. Hier mal der programmcode. Private Sub help_Click() Dim objApp, SESearch As SolidEdgeFramework.Application Dim objDoc As SolidEdgePart.PartDocument Dim objBaseProfile As SolidEdgePart.Profile Dim objBaseProfArray(1 To 2) As SolidEdgePart.Profile Dim objBase As SolidEdgePart.Model Dim objRegHoleData As SolidEdgePart.HoleData Dim objRP As SolidEdgePart.RefPlane Dim objRegHoleProfile As SolidEdgePart.Profile Dim objRegHole As SolidEdgePart.Hole Dim objAttributeSets As Object Dim lngStatus As Long Dim bAttribSetPresent As Boolean On Error Resume Next Set SESearch = GetObject(, "SolidEdge.Application") If Err Then MsgBox "Bitte Solid Edge starten" End If ' creating the extruded protrusion and validating it Set objBaseProfArray(1) = objBaseProfile Set objBase = objDoc.Models.AddFiniteExtrudedProtrusion(NumberOfProfiles:=1, _ ProfileArray:=objBaseProfArray, ProfilePlaneSide:=igLeft, ExtrusionDistance:=0.05) objBaseProfile.Visible = False If (objBase.ExtrudedProtrusions(1).Status <> igFeatureOK) Then MsgBox "AddFiniteExtrudedProtrusion method of models object fails" End If ' *** creating a Regular Hole using the Holedatacollection object ' creating the holedata Set objRegHoleData = objDoc.HoleDataCollection.Add(HoleType:=igRegularHole, _ HoleDiameter:=0.01, BottomAngle:=90) ' creating the profile for the hole and validating it Set objRP = objDoc.RefPlanes.AddParallelByDistance(parentplane:=objDoc.RefPlanes(1), _ Distance:=0.025, normalside:=igRight) Set objRegHoleProfile = objDoc.ProfileSets.Add.Profiles.Add(pRefPlaneDisp:=objRP) Call objRegHoleProfile.Holes2d.Add(xcenter:=0, ycenter:=0) lngStatus = objRegHoleProfile.End(ValidationCriteria:=igProfileClosed) If lngStatus <> 0 Then MsgBox " profile for the hole is not closed" End If ' creating the hole Set objRegHole = objBase.Holes.AddFinite(Profile:=objRegHoleProfile, _ ProfilePlaneSide:=igLeft, FiniteDepth:=0.02, Data:=objRegHoleData) If (objRegHole.Status <> igFeatureOK) Then MsgBox "AddFinite method of the Holes object fails" End If objRegHoleProfile.Visible = False ' Get the Attributesets collection object Set objAttributeSets = objRegHoleData.AttributeSets 'Create an attributeset objAttributeSets.Add "MyAttribSet" 'Check for the presence of Attributeset bAttribSetPresent = objRegHoleData.IsAttributeSetPresent("MyAttribSet") ' USER DISPLAY ' Release objects Set objApp = Nothing Set objDoc = Nothing Set objBaseProfile = Nothing Set objBaseProfArray(1) = Nothing Set objBase = Nothing Set objRegHoleData = Nothing Set objRP = Nothing Set objRegHoleProfile = Nothing Set objRegHole = Nothing Set objAttributeSets = Nothing End Sub Thx. Demokrat. Leider kann ich Euch nicht umarmen sonst würde ich es jedesmal tun. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 12. Jan. 2005 13:11 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Hi Demokrat, wenn hier nicht grade einer SE hat, wird's wohl komplizierter ;-) Zum Code kann ich nämlich garnix sagen, ausser, schalte On Error Resume next nach der If Abfrage mal besser wieder aus:
Code:
On Error Resume Next Set SESearch = GetObject(, "SolidEdge.Application") If Err Then MsgBox "Bitte Solid Edge starten" 'fehlt hier nicht ein Exit Sub ? End If On Error Goto 0
Ausserdem - aber das ist jetzt komplett geraten - Dim objDoc As SolidEdgePart.PartDocument wo weist Du denn objDoc zu, fehlt da nicht ein set objDoc = SESearch.irgendwas??? Unklar auch, von wo aus, also unter welcher Umgebung startest Du denn den Code, etwa SE? Wenn ja, wozu dann der Appli-Tam-Tam?? Und wo ist der Unterschied zwischen: Dim SESearch As SolidEdgeFramework.Application und Set SESearch = GetObject(, "SolidEdge.Application") ????? Gruss Nancy -- ps: aber keine, wirklich keine Ahnung obs annähernd richtig vermutet ist ;-) [Diese Nachricht wurde von startrek am 12. Jan. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 12. Jan. 2005 13:30 <-- editieren / zitieren --> Unities abgeben:         
Hey Nancy, danke erst einmal für dein Hilfe.Starten will ich den Code aus Excel. Ich habe es so hinbekommen,dass er mir die bohrung ausspuckt.ABer bei der Erzeugung der Bohrung ist immer noch ein Fehler. mfG Demokrat [Diese Nachricht wurde von Demokrat2000 am 23. Jun. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 12. Jan. 2005 13:42 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Hallooo;-) bitte mal On Error Resume Next rausnehmen oder wieder auf Goto 0 setzen! Da müsste doch dann mal irgendwo ne vernünftige Fehlermeldung kommen und der Debugger markiert die Zeile gelb! Schau Dir auch mal die On Error Anweisung in der Hilfe an. Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 12. Jan. 2005 14:11 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Nachtrag, was'n dat eigentlich? Set objBase = RevolvedProduce_1 'setze damit die Bohrung auf der aktuellen Körper drauf da fehlt entweder objApp oder objDoc davor, oder? Set objBase = objApp.RevolvedProduce_1 Oder was auch immer der 'Revolver_1' sein mag ..., sicher kein Element von Excel;-) Übrigens, wozu startest Du das Teil überhaupt aus Excel? Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 12. Jan. 2005 14:18 <-- editieren / zitieren --> Unities abgeben:         
Weil ich aus Excel heraus eine Parametrsierung von Teilen vornehme. Deswegen! Ja ich will mit der Zeile Set objBase = objApp.RevolvedProduce_1 RevolvedProduce_1 ist ein Feature und ich möchte objBase, den Wert zuweisen bzw. den Link. MfG Martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 12. Jan. 2005 14:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
|
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 12. Jan. 2005 17:14 <-- editieren / zitieren --> Unities abgeben:         
Hey Nancy Ich denke mal es war ne Antwort. Bitte nichts persönlich nehmen. Sag mal wozu dient eigentlich diese Zeichen in dem nachfolgenden Code. Set objBase = objDoc.Models.AddFiniteExtrudedProtrusion(NumberOfProfiles:=1, _ ProfileArray:=objBaseProfArray, ProfilePlaneSide:=igSymmetric, ExtrusionDistance:=0.05) objBaseProfile.Visible = False := ????? Ich weiß,dass man mit Gleichheitszeichen einen Wert übergibt aber mit was macht man einen Wert mit Doppelpunkt und Gleichheitszeichen?? Gruss aus kassel Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 12. Jan. 2005 18:31 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
hmm, naja, das schreibt man immer so bei erwarteten Parametern innerhalb einer Methode Normalerweise kannst das auch weglassen, musste aber die erwartete Reihenfolge unbedingt! einhalten. Set objBase = objDoc.Models.AddFiniteExtrudedProtrusion(1, objBaseProfArray, igSymmetric, 0.05) Mal als Bsp einer Inputbox: Code:
dim a a = Inputbox(Prompt:="test", Default:="bla") a = Inputbox(Default:="bla", Prompt:="test") 'geht auch vertauscht a = Inputbox("test", , "bla") 'dasselbe mal ohne ":=" a = Inputbox("test", "bla") 'hoppla, hier wird bla zum Titel ;-)
Etwas klarer geworden? Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 13. Jan. 2005 08:39 <-- editieren / zitieren --> Unities abgeben:         
|
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 21. Jan. 2005 14:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich weiß nicht, wo in meinem Programm das Problem ist. Ich habe es einfach nur kopiert aber mhh ja keine Ahnung,warum es nicht funktioniert.Er steigt immer bei dem Punkt Testfile= warum eigentlich?? Private Sub CommandButton1_Click() Dim objApp As SolidEdgeFramework.Application Dim objDoc As SolidEdgePart.PartDocument Dim objBaseProfile As SolidEdgePart.Profile Dim objRevProts As SolidEdgePart.RevolvedProtrusions Dim objBaseProfArray(1 To 2) As SolidEdgePart.Profile Dim objBase As SolidEdgePart.Model Dim objRegHoleData As SolidEdgePart.HoleData Dim objRP As SolidEdgePart.RefPlane Dim objRegHoleProfile As SolidEdgePart.Profile Dim objRegHole As SolidEdgePart.Hole Dim lngHoleType As Long Dim lngStatus As Long Dim name(10) As Variant Dim i As Integer ' Report errors Dim Testfile As SolidEdgeDocument Const PI = 3.14159265358979 ' Create/get the application with specific settings On Error GoTo 0 ' Open a Testcase Testfile = "C:\Part1.par" Set objApp = GetObject(, "SolidEdge.Application") Gruß Martin
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 21. Jan. 2005 15:28 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Martin, Du dimensionierst Testfile as SolidEdgeDocument und übergibst einen String ... entweder dim Testfile as String, dann isses so okay, oder aber Du musst die Ojectvariablen mit set = übergeben, also set Testfile = Getobject ... oder irgendsowas in der Art. Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Ehrenmitglied V.I.P. h.c. IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 21. Jan. 2005 15:29 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
Hallo Demokrat, ohne SOlidEdge zu kennen würde ich folgendes tippen: Zitat:
Code:
Dim Testfile As SolidEdgeDocument Const PI = 3.14159265358979 ' Create/get the application with specific settings On Error GoTo 0' Open a Testcase Testfile = "C:\Part1.par"
Du deklarierst Testfile als SolidEdgeDocument, ich vermute mal das dürfte ein Objektpointer sein (also Object) und versuchst dem anschließend einen String zuzuweisen, das kann auch nicht gut gehen. Die Fehlermeldung die bei dir kommt wäre in jedem Fall hilfreich  Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 21. Jan. 2005 15:33 <-- editieren / zitieren --> Unities abgeben:         
|
Demokrat2000 Mitglied
 
 Beiträge: 145 Registriert: 27.09.2004
|
erstellt am: 02. Feb. 2005 16:14 <-- editieren / zitieren --> Unities abgeben:         
Hallo, heute mal was anderes, ein Problem. Ich habe eine Userform.In dieser Userform ist ein Commandbutton eingepflegt.In diesem Commandbutton erscheint bei Aufruf eine Inputbox, dort übergebe ich eine Variablen wert0 einen String Wert0="b". Mit Hilfe dieser variablen vergleiche ich mehrere Ereignisse.Jetzt wollte ich aber diese Variable auch noch in einem anderen Tabellenbaltt verwenden aber die variable ist leer.ich habe daraufhin versucht, diese Variable als Static zu deklarieren um die Lebensdauer zu erhöhen. Das hat aber nichts gebracht, beim dem Versuch Global wert0 As String zu deklarieren hat mir der Compiler schon die Ohren lang gezogen. Ich weiß über eine MsgBox am Ende der userform,das die Variable Wert0 mit einem String belegt ist. Wo ist denn da nur der Fehler?? MfG Demokrat Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Mitglied Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 02. Feb. 2005 16:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Demokrat2000
|