QUẢNG CÁO ĐẦU TRANG

Collapse

Thông báo

Collapse
No announcement yet.

Cac cao thu VBA chi gium cho!!!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Cac cao thu VBA chi gium cho!!!

    Các cao thủ VBA chỉ giùm cho em biết trong AutoCad làm sao để mình gán được số chữ số sau dấu phẩy, ví dụ như để text cao độ có 2 chữ số sau dấu phẩy như thế này (20.09)
    Mong được các bác chỉ giáo

  • #2
    Ðề: Cac cao thu VBA chi gium cho!!!

    Bạn có thể dùng hàm Format của VBA
    Ví dụ:
    Dim CaoDo as Double
    Dim KetQua as String
    CaoDo=2.13567
    KetQua=Format(CaoDo,"0.00")

    Chúc bạn thành công
    Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
    Email : cncc.jsc@gmail.com

    Ghi chú


    • #3
      Ðề: Cac cao thu VBA chi gium cho!!!

      Thanks very much.
      Hôm trước em cũng nghĩ tới hàm format này rồi nhưng chưa thử vì nghĩ rằng nó là của VB for Excel. Hì, cũng tại căn bản trình độ VBA của em còn còi lắm. Một lần nữa cảm ơn bác PMXD rất nhiều.

      Ghi chú


      • #4
        Ðề: Cac cao thu VBA chi gium cho!!!

        À mà tiện đây cho em hỏi có cách nào lấy được vị trí (position) của dấu phẩy (ví dụ vị trí của dấu phẩy trong text 20.09) ra không. Em đang làm bình đồ cao độ mà ông sếp muốn in ra cao độ dạng 20.09 trong đó dấu . trùng đúng với vị trí điểm point mà em đang bó tay

        Ghi chú


        • #5
          Ðề: Cac cao thu VBA chi gium cho!!!

          Bạn dùng hàm TextWidth("20.") để ra vị trí của dấu chấm.

          Ghi chú


          • #6
            Ðề: Cac cao thu VBA chi gium cho!!!

            Anh ơi em thử tìm trong help rồi nhưng sao không thấy có cái gì là textwidth cả. Thôi thì anh đã giúp rồi thì giúp cho trót, anh chỉ hộ em cái code move text từ một vị trí cho trước ((0,0,0) chẳng hạn) đến vị trí dấu phẩy như em đã nói trên. Thank you anh trước nha.

            Ghi chú


            • #7
              Ðề: Cac cao thu VBA chi gium cho!!!

              Trời đất ạ, theo em hiểu thì x với . có gì khác nhau đâu (về cú pháp ý mà). Em mà được trả lời thì câu của bác cũng OK còn gì nữa. Mà bác nói cũng đang tập tành VBA phải không ạ, thế thì mời bác ghé qua http://www.ketcau.com/forum/showthre...5934#post35934 để tìm hiểu về việc tái mở lớp VBA nha. Quickly.

              Ghi chú


              • #8
                Ðề: Cac cao thu VBA chi gium cho!!!

                Bạn có thể dùng hàm dưới đây để xác định vị trí của dấu phẩy "." hoặc bất kỳ ký tự nào bạn muốn
                '====================================================
                Function TimViTriDauPhay(Chuoi As String, Optional Kytu = ".") As Long
                Dim i As Long
                For i = 1 To Len(Chuoi)
                If Mid(Chuoi, i, 1) = Kytu Then
                TimViTriDauPhay = i
                Exit For
                End If
                Next i
                End Function
                Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
                Email : cncc.jsc@gmail.com

                Ghi chú


                • #9
                  Ðề: Cac cao thu VBA chi gium cho!!!

                  Sao không dùng hàm InStr(), dùng vòng lặp làm gì cho nó chậm chương trình ra.

                  Ghi chú


                  • #10
                    Ðề: Cac cao thu VBA chi gium cho!!!

                    Nguyên văn bởi eStructor
                    Sao không dùng hàm InStr(), dùng vòng lặp làm gì cho nó chậm chương trình ra.
                    Đó cũng là một cách hay, và nó sẽ hay hơn nếu bạn làm một ví dụ cho mọi người.
                    Cám ơn đã góp ý
                    Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
                    Email : cncc.jsc@gmail.com

                    Ghi chú


                    • #11
                      Ðề: Cac cao thu VBA chi gium cho!!!

                      Đoạn mã của bạn có thể được viết theo cách của Microsoft như saU:

                      Vitridauphay=InStr(1, Chuoi, ",")

                      Để chương trình chạy nhanh nên cố gắng tối đa dùng hàm built-in và giảm tối thiểu việc dùng vòng lặp.

                      Ghi chú


                      • #12
                        Ðề: Cac cao thu VBA chi gium cho!!!

                        Tôi xin góp ý về chương trình:
                        Trước hết, các bác phải biết cách trình bày để dễ theo dõi và gỡ rối. Tôi xin sửa lại như sau:

                        -------------------
                        'Chuong trinh lam tron dim len 5 hoac 0
                        'Neu dim lam tron bang khong se lay gia tri thuc cua dim khong co sau phan
                        Public Sub TextDim4()
                        Dim Dim1 As AcadDimension
                        Dim KT As String
                        Dim i As Integer
                        Dim Vse As AcadSelectionSet
                        Dim VFilterData(0) As Variant, VFilterType(0) As Integer
                        '========================================
                        On Error GoTo Ketthuc

                        For i = 0 To ThisDrawing.SelectionSets.Count - 1
                        ThisDrawing.SelectionSets(i).Delete
                        Next i

                        Set Vse = ThisDrawing.SelectionSets.Add("Dimension")
                        VFilterType(0) = 0: VFilterData(0) = "Dimension"
                        Vse.SelectOnScreen VFilterType, VFilterData

                        For i = 0 To Vse.Count - 1
                        Set Dim1 = Vse(i)
                        KT = 5 * Round(Dim1.Measurement / 5, 0)
                        If KT = 0 Then
                        KT = Round(Dim1.Measurement, 0)
                        End If
                        Dim1.TextOverride = KT
                        Dim1.Highlight (False)
                        Next i

                        Ketthuc:
                        End Sub
                        ------------------------

                        Có phải dễ nhìn hơn không?

                        Còn về làm tròn số, bạn dùng thử 2 hàm:

                        Int Function, Fix Function Example
                        This example illustrates how the Int and Fix functions return integer portions of numbers. In the case of a negative number argument, the Int function returns the first negative integer less than or equal to the number; the Fix function returns the first negative integer greater than or equal to the number.

                        Dim MyNumber
                        MyNumber = Int(99.8) ' Returns 99.
                        MyNumber = Fix(99.2) ' Returns 99.

                        MyNumber = Int(-99.8) ' Returns -100.
                        MyNumber = Fix(-99.8) ' Returns -99.

                        MyNumber = Int(-99.2) ' Returns -100.
                        MyNumber = Fix(-99.2) ' Returns -99.

                        Ghi chú


                        • #13
                          Ðề: Cac cao thu VBA chi gium cho!!!

                          Xin lỗi các bác, tôi có trình bày lại đoạn mã chương trình theo kiểu chia thành các block, nhưng khi gửi lên bị mất hết các khoảng trắng đầu dòng, nên chả khác giè trước.

                          Ghi chú


                          • #14
                            Ðề: Cac cao thu VBA chi gium cho!!!

                            Nguyên văn bởi ThangCoi
                            Đây là chương trình đầu tay của em các bác cho ý kiến nhé !
                            -------------------
                            'Chuong trinh lam tron dim len 5 hoac 0
                            'Neu dim lam tron bang khong se lay gia tri thuc cua dim khong co sau phan
                            Public Sub TextDim4()
                            Dim Dim1 As AcadDimension
                            Dim KT As String
                            Dim i As Integer
                            Dim Vse As AcadSelectionSet
                            Dim VFilterData(0) As Variant, VFilterType(0) As Integer
                            '============================================================
                            On Error GoTo Ketthuc
                            For i = 0 To ThisDrawing.SelectionSets.Count - 1
                            ThisDrawing.SelectionSets(i).Delete
                            Next i
                            Set Vse = ThisDrawing.SelectionSets.Add("Dimension")
                            VFilterType(0) = 0: VFilterData(0) = "Dimension"
                            Vse.SelectOnScreen VFilterType, VFilterData
                            For i = 0 To Vse.Count - 1
                            Set Dim1 = Vse(i)
                            KT = 5 * Round(Dim1.Measurement / 5, 0)
                            If KT = 0 Then
                            KT = Round(Dim1.Measurement, 0)
                            End If
                            Dim1.TextOverride = KT
                            Dim1.Highlight (False)
                            Next i
                            Ketthuc:
                            End Sub
                            ------------------------
                            Viết thế này thì quá là OK rồi
                            Chỉ có điều, tôi hay có thói quen giải phóng biến kiểu Object trước khi thoát khỏi Sub hay function.


                            Sub
                            ......................
                            Set Dim1 =Nothing
                            Set Vse=Nothing
                            End sub

                            Mà có môt điều khá bất ngờ vì cách đăt tên biến Vse của bạn, vì đây cũng là cách tôi hay đặt tên cho biến này (Vse= Việt Anh SelectionSet, VLine=VietAnh AcadLine, VDim= Việt Anh Dimmention......).Thật thí vị
                            Công ty Cổ phần kỹ thuật công trình- Thương mại C.N.C.C
                            Email : cncc.jsc@gmail.com

                            Ghi chú


                            • #15
                              Ðề: Cac cao thu VBA chi gium cho!!!

                              Các anh cho em hỏi với, hồi trước em có biết dùng VB6 qua qua rồi. Bây giờ với VBA for Cad em cũng xem và có thể lập đc một số form đơn giản. Nhưng làm thế nào để chạy đc form đó trong Cad nhỉ, như là đánh lệnh nào đó để nó hiện ra đc không? Ví dụ em chạy 1 form khi ấn vào nút OK nó sẽ hiện ra dòng chữ Hello you thì thế nào nhỉ!

                              Ghi chú

                              Working...
                              X