Invalid input

Status
Niet open voor verdere reacties.

demasuredries

Gebruiker
Lid geworden
21 okt 2014
Berichten
18
Hallo,

Ik ben bezig met het maken van een programma voor het uittekenen van kasten. Hierbij heb ik heel veel verschillende dynamic blocks gemaakt. Het ik mij tot nu toe gelukt om alle verschillende dynamic blocks in te laden via het Vba.Programma.

De volgende stap is dus om de parameters van mijn blocks invoegen in Vba. Deze heb ik geprobeerd met onderstaande code. Bij het testen van het programma krijg ik een error "invalid input". Het gaat over volgende regel: 'oDblkProp.Value = "txtHoogte" 'Hoogte van de kast.

Weet iemand hoe ik dit kan oplossen?

Code:
Dim objBlok1 As AcadBlockReference
Dim strPath As String
Dim oprops As Variant
Dim oDblkProp As AcadDynamicBlockReferenceProperty
Dim i As Integer

dblInvoegpunt(0) = 0: dblInvoegpunt(1) = 0: dblInvoegpunt(2) = 0
Set objBlok1 = ThisDrawing.ModelSpace.InsertBlock(dblInvoegpunt, "C:\Autocad\Definitieve blocks\1.Onderkast\1.Vooraanzichten\Niet Beplakt\Vooraanzicht.NB.Doorlopende Stijlen.dwg", 1#, 1#, 1#, 0#)

If objBlok1.IsDynamicBlock Then
oprops = objBlok1.GetDynamicBlockProperties
For i = 0 To UBound(oprops)
    Set oDblkProp = oprops(i)
        If oDblkProp.PropertyName = "Hoogte" Then
    oDblkProp.Value = "txtHoogte" 'Hoogte van de kast
    
         Exit For
     End If
    Next
End If
 
Laatst bewerkt door een moderator:
Is dit wel correct:
oDblkProp.Value = "txtHoogte"

Daar geef je de tekst txtHoogte door in plaats van de waarde in een textbox met de naam txtHoogte. Het zou dan dit moeten zijn:
oDblkProp.Value = txtHoogte.Text
 
Ik heb wat u zei terug ingevoegd en het geeft heel de zelfde foutmelding als ik in het begin al zei. Ik snap niet waarom deze voorkomt?

mijn txthoogte is : public txtHoogte as double
Zou het daaraan liggen?
 
Ok, maar waar vandaan krijgt die variabele dan zijn waarde?
 
In Autocad heeft de parameter een waarde van 1200
In vba heb ik de code :

Public txtHoogte as double
txtHoogte = frmKast.txtHoogte.Value
 
Dan is frmKast.txtHoogte.Value dus een tekst waarde en moet wellicht worden geconverteerd naar een Double. Probeer dat eens:
txtHoogte = Cdbl(Val(frmKast.txtHoogte.Value))

Eventueel zonder de Val functie.
 
Ik heb wat u doorgestuurd hebt ingevoegd in het programma maar ik krijg steeds de zelfde foutmelding :(

txtHoogte = CDbl(Val(frmKast.txtHoogte.Value))

Dim objBlok1 As AcadBlockReference
Dim strPath As String
Dim oprops As Variant
Dim oDblkProp As AcadDynamicBlockReferenceProperty
Dim i As Integer

dblInvoegpunt(0) = 0: dblInvoegpunt(1) = 0: dblInvoegpunt(2) = 0
Set objBlok1 = ThisDrawing.ModelSpace.InsertBlock(dblInvoegpunt, "C:\Autocad\Definitieve blocks\1.Onderkast\1.Vooraanzichten\Niet Beplakt\Vooraanzicht.NB.Doorlopende Stijlen.dwg", 1#, 1#, 1#, 0#)

If objBlok1.IsDynamicBlock Then
oprops = objBlok1.GetDynamicBlockProperties
For i = 0 To UBound(oprops)
Set oDblkProp = oprops(i)
If oDblkProp.PropertyName = "Hoogte" Then
oDblkProp.Value = txtHoogte

Exit For
End If
Next
End If
 
Dan wordt het lastig helaas want ik kan je code hier niet testen. Vanwege je melding dat het gaat om de regel met oDblkProp.Value zul je toch eens moeten kijken wat de waarde van txtHoogte is en wat oDblkProp voor een type waarde wil hebben.
 
Testen van programma

als ik een waarde geef in mijn txthoogte= 1800 dan krijg ik in mijn programmatie een waarde van txtHoogte = 1800
Mijn oDblkProp heeft dan de standaardwaarde van 1200

Maar ik heb op het forum van Autodesk deze vraag ook gesteld en kreeg het volgende antwoord:
you can't through VBA simply
the online reference for "PropertyName" property of "AcadDynamicBlockReferenceProperty" object says "Property names are guaranteed to be unique among all properties on a given block reference"
which is the reason it's a read-only property: VBA won't let you set a name that could violate this uniqueness requirement

don't know whether lisp could help you, but I'd guess would not
http://forums.autodesk.com/t5/visua...alid-input/m-p/5352815/highlight/false#M97892

Dus ik weet niet of dit nog mogelijk is nu?
 
Hier heb ik 2 printscreens van de waardes bij het testen
Dan kan je zelf zien hoe het in elkaar zit


Invalid input.jpgInvalid input 2.jpg
 
Ik heb een oplossing gevonden :
Public txtHoogte = as double
txtHoogte = frmKast.txtHoogte.Value
Dim HoogteKast As Double

Dim objBlok1 As AcadBlockReference
Dim strPath As String
Dim oprops As Variant
Dim oDblkProp As AcadDynamicBlockReferenceProperty
Dim i As Integer

dblInvoegpunt(0) = 0: dblInvoegpunt(1) = 0: dblInvoegpunt(2) = 0
Set objBlok1 = ThisDrawing.ModelSpace.InsertBlock(dblInvoegpunt, "C:\Autocad\Definitieve blocks\1.Onderkast\1.Vooraanzichten\Niet Beplakt\Vooraanzicht.NB.Doorlopende Stijlen.dwg", 1#, 1#, 1#, 0#)

If objBlok1.IsDynamicBlock Then
oprops = objBlok1.GetDynamicBlockProperties
For i = 0 To UBound(oprops)
Set oDblkProp = oprops(i)
If oDblkProp.PropertyName = "Hoogte" Then
oDblkProp.Value = HoogteKast
Exit For
End If
Next
End If

Het werk zonder error

Ik wil jou bedanken voor alle tips en hulp
:D danku !
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan