Jeigu yra būdas padaryti geriau, atrask jį. T. A. Edison

Sveiki, Svečias
Prisijungimo vardas: Slaptažodis: Prisiminti mane

TEMA: VBA pagalba G-kodui gauti

VBA pagalba G-kodui gauti prieš 6 m. 2 mėn. #25

  • bankeris
  • bankeris avataras
  • Neprisijungęs
  • Moderatorius
  • C#, VB.NET, VBA, MS Access, VSTO
  • Žinutės: 70
  • Gauta padėka 8
  • Reputacija: 8
Parašiau ir pats nebesuprantu kas prie ko jau :)), čia dar galima sutrumpinti, bet jau pats žiūrėkis. Dabar pradėsiu nuo tam tikrų pastabų.

Visu pirma sukūriau Sub ijungiam(), tam kad kai debuginant sustabdant kodą vėliau galima būtų įjungti excel'io įvykius.
Visu antra atskyriau nuo įvykio Worksheet_Change visos programos veikimą, nes tada pastovei pakoregavus programą reikia ant excelio paspausti ant reikiamos celes F2 + Enter. Paprasčiau kai pakoreguoji VBA ir paleidi Sub Programa()

Nežinau kiek tau moka A_Arvis už tavo darbą, bet pas tave man atrodo problema, kad tu bandai įdėti kodą ir paleidi jį, jeigu nesuveikia nebežinai kodėl. VBA naudok F8 mygtuką ir Break žymeklius, kad galėtum debug'inti kodą ir matyti kas darosi su kiekvienu kintamuoju ir excelio ląstelėmis. Jeigu nesupratai ką parašiau duok žinoti, detaliau parodysiu.
Option Explicit
 
Sub ijungiam()
Application.EnableEvents = True
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("B3,C3,C4, D3, D4")) Is Nothing Then 'pridetos naujos lasteles
        programa
    End If
End Sub
 
Sub programa()
    On Error GoTo Klaida
    Application.EnableEvents = False
    Dim rngA As Range
    Dim rngB As Range
    Dim XValue As Double
    Dim YMax As Double
    Dim YStep As Double
    Dim Y As Double
    Dim ZMax As Double
    Dim ZStep As Double
    Dim z As Double
    Dim blnX As Boolean
    Dim i As Integer
    Dim h As Integer
    Set rngA = Range("A1")
    Set rngB = Range("A5:C5")
    XValue = Range("B3").Value
    YMax = Range("C3").Value
    YStep = Range("C4").Value
    Y = 0
    ZMax = Range("D3").Value
    ZStep = Range("D4").Value
    z = 0
    blnX = True
    h = 4
    i = 4
    ' trinami ankstesni duomenys
    If rngA.Offset(5, 0).Value <> "" Then
        Range(rngB, rngB.End(xlDown)).Clear
    Else
        rngB.Clear
    End If
    ' skaiciavimas
    Dim darom As Boolean
    Dim jung As Boolean
    darom = True
    jung = True
    Do Until Y >= (YMax + YStep) And jung = False
        If ZStep > ZMax And darom Then
            rngA.Offset(i, 0).Value = "Z" & Round(ZStep, 3)
            ZStep = ZStep + ZStep
            i = i + 1
            darom = False
            Y = 0
        ElseIf ZStep < ZMax And darom Then
            rngA.Offset(i, 0).Value = "Z" & Round(ZMax, 3)
            ZStep = ZMax
            i = i + 1
            darom = False
            jung = False
            Y = 0
        ElseIf ZStep = ZMax And darom Then
            Exit Sub 'darbas baigtas
        End If
        If Y < YMax Then
            rngA.Offset(i, 0).Value = "Y" & Round(Y, 3)
        Else
            rngA.Offset(i, 0).Value = "Y" & Round(YMax, 3)
            Y = 0
            i = i + 1
            If blnX = True Then
                rngA.Offset(i, 0).Value = "X" & Round(XValue, 3)
            Else
                rngA.Offset(i, 0).Value = "X0"
            End If
            blnX = Not blnX
            darom = True
        End If
 
        i = i + 1
        If blnX = True Then
            rngA.Offset(i, 0).Value = "X" & Round(XValue, 3)
        Else
            rngA.Offset(i, 0).Value = "X0"
        End If
        blnX = Not blnX
        i = i + 1
        If (Y >= (YMax + YStep)) Then
            darom = True
            Y = 0
            rngA.Offset(i, 0).Value = "X0"
            i = i + 1
        Else
            Y = Y + YStep
        End If
    Loop
    Application.EnableEvents = True
    Exit Sub
Klaida:
Application.EnableEvents = True
End Sub
Nepamirškite teisingiems atsakymams paspausti "Padėkos"

I could change the world, if only they would give me the source code....
Paskutinis taisymas: prieš 6 m. 2 mėn. nuo bankeris.
Administratorius uždraudė viešą pranešimų rašymą.
Jums padėkojo šie nariai: A_Arvis

VBA pagalba G-kodui gauti prieš 6 m. 2 mėn. #26

  • A_Arvis
  • A_Arvis avataras
  • Neprisijungęs
  • Dalyvis
  • Žinutės: 20
  • Gauta padėka 1
  • Reputacija: 0
Kodo dar nežiūrėjau, gal vėliau, bet dėkui iš anksto. Skubu atsakyti ir dėkui už pastabėles. Worksheet_Change sename excelio forume pamokė, buvau bėdų patyręs ir niekur beveik nenaudodavau, esu pasikeitęs i Sub kodas() kitame faile, šis tam, kad nesimaišytu apie ką šnekam, o kodus dažnai tikrinu uždėdamas kodo eilutėje iš kairės taškiuką ir paskui maigau Step Info mygtuką, o apie F8 nežinojau. Niekas nieko man nemoka, tai asmeniškai pasigamintos staklės kur labai dažnai tenka naudoti paprastus figūrų apdirbimus, grežiojimus ir tokius skaičiavimus dažnai naudoju parašydamas keletą formulių ir tiesiog copy paste. Darytis brėžinius ir gauti kodą trunka kelis kartus ilgiau, o su VBA pranoksta visus lūkesčius. Eina ir pačiai programai Mach3 VBA kodus rašyt, bet nuo naujų softų jau galva plyšta.
Administratorius uždraudė viešą pranešimų rašymą.

VBA pagalba G-kodui gauti prieš 6 m. 1 mėn. #27

  • dgrett
  • dgrett avataras
  • Neprisijungęs
  • Naujokas
  • Žinutės: 5
  • Gauta padėka 1
  • Reputacija: 1
A_Arvis parašė:
Sveiki, vėl svaigstu su kodo pratęsimu ir darau tai iš minimalių žinių, o rezultatai kaip loterijoje. Aiškus esamas kodas jau buvo panaudotas paviršio išlygimui, bet be copy paste neapsėjo.
Atsiranda ZMax is D3 ir ZStep is D4.
ZStep turi būti I-oji G-kodo reikšmė, paskui visas esamas kodas, Sekanti Z reikšmė turi atsirasti prasisukant visam ankstesniam kodui ir taip kol Z pasieks ZMax
Na, apie minimalias zinias tu cia uzlenkei :lol: ...........Sitiek metu...
Paskutinis taisymas: prieš 6 m. 1 mėn. nuo dgrett. Priežastis: klaida
Administratorius uždraudė viešą pranešimų rašymą.
Jums padėkojo šie nariai: A_Arvis

VBA pagalba G-kodui gauti prieš 6 m. 1 mėn. #28

  • A_Arvis
  • A_Arvis avataras
  • Neprisijungęs
  • Dalyvis
  • Žinutės: 20
  • Gauta padėka 1
  • Reputacija: 0
Sveikas gyvas dgrett, tave atsiminęs tikrai ne syki buvau, o žinios tai tikrai tik paviršutinės, linijas braižyti ir sheet-us select-inti :)
Administratorius uždraudė viešą pranešimų rašymą.

VBA pagalba G-kodui gauti prieš 6 m. 1 mėn. #29

  • dgrett
  • dgrett avataras
  • Neprisijungęs
  • Naujokas
  • Žinutės: 5
  • Gauta padėka 1
  • Reputacija: 1
Turim CNC fabrike , tik ni velnio neveikia ir veikianciu nesu mates:(. Nori vadai, kad sutaisyciau :evil:
Mano problema su kitom senom staklem, reikia irasyti stakliu atminti i PC .dat faila ir atgal. Bet cia ne excel. lt kelt klausima reikia...
Paskutinis taisymas: prieš 6 m. 1 mėn. nuo dgrett. Priežastis: papildymas
Administratorius uždraudė viešą pranešimų rašymą.

VBA pagalba G-kodui gauti prieš 6 m. 1 mėn. #30

  • A_Arvis
  • A_Arvis avataras
  • Neprisijungęs
  • Dalyvis
  • Žinutės: 20
  • Gauta padėka 1
  • Reputacija: 0
Gal ką ir patarčiau, bet bent jau namioka koki duok, juos buvo veikiančios kada nors? kokie gabaritiniai matmenys, kas vyksta įjungus, koks staklių pavadinimas (jei pirktinės).
Administratorius uždraudė viešą pranešimų rašymą.
Moderatoriai: bankeris
Puslapio sukūrimo laikas: 0.280 sekundžių