Page 5 of 6

Re: การแปลงข้อมูล

Posted: Sat Sep 17, 2011 7:56 am
by snasui
:D เป็นระบบ Security ของ Windows ที่จะไม่ให้เขียนทับไฟล์ในโฟลเดอร์ Program Files เพื่อความปลอดภัยของเครื่องผู้ใช้ ควรแยกไฟล์ออกมาไว้นอกโฟลเดอร์ Program Files จะดีกว่าครับ

Re: การแปลงข้อมูล

Posted: Sun Sep 18, 2011 10:21 pm
by Bafnet
สวัสดดีครับอาจารย์
ตอนนี้ได้ได้แยกไฟล์มาตั้งนอกโปรแกรมไฟล์ตามคำแนะนำแล้วครับ
และแก้ Code ที่อ้างถึงตำแหน่งโดยใช้ Find ที่อาจารย์สอน กำลังตรวจทีละหน้า
พอมาตรวจดู หน้าแรกๆที่เริ่มทำก็ขำครับ code ช่วงแรกๆดูมึนๆประเภทแบบสั่งแล้วสั่งอีก
คำสั่งเดียว มี On ERROR Resum Next ตั้ง 5-6 ตัว
แต่พออยู่กับอาจารย์นานเข้า อืม...ชักดูดีๆ :mrgreen:
อาจารย์วันนี้มีเรื่องเรียนถามหน่อยนะครับ
เป็นเรื่องแปลงข้อมูลครับแต่เป็นเรื่องของตัวเลข

1000 ต้องการให้แสดงเป็น 1,000.00
1587.667 ให้แสดงเป็น 1,587.66
แบบว่าต้องการจุดทศนิยมแบบไม่ปัด
ผมกำหนดรูปแบบว่าเป็นจุดทศนิยม แบบ 3 ตำแหน่ง
แต่พอเจอคำสั่ง Comma มันก็กลายเป็นสอง 1,587.67
เป็นสองก็ถูกต้องครับ แต่อย่าปัด

ขอบคุณครับ

Re: การแปลงข้อมูล

Posted: Sun Sep 18, 2011 10:52 pm
by snasui
:D การจัดการกับทศนิยมแบบไม่ปัดสำหรับฟังก์ชันใน Worksheet สามารถใช้ Rounddown(A1,2) หรือ Trunc(A1,2) เป็นการทศนิยมทิ้งไปให้เหลือเพียง 2 ตำแหน่ง

กรณีใช้ VBA สามารถใช้คำสั่ง Rounddown ได้เช่นกันครับ เช่น

Code: Select all

Application.Rounddown(Range("A1"),2))
:mrgreen:

Re: การแปลงข้อมูล

Posted: Mon Sep 19, 2011 7:27 pm
by Bafnet
สวัสดีครับอาจารย์
ขออนุญาติใช้กระทู้เดิมในการเก็บรายละเอียดชิ้นงานนี้นะครับ
ขอบคุณมากครับสำหรับเรื่องทศนิยม
มีเรื่องเรียนถามครับ พอดีมีคนบอกว่าถ้าจะใช้แสดงเครื่องหมายถูก ให้พิมพ์ตัว P
และเลือกรูปแบบฟอร์นเป็น Wingdings 2

Code: Select all

If Sheet26.Range("O22").Value = Sheet26.Range("E22").Value Then
frmDrop.Label137.Caption = "P"
frmDrop.Label137.Font = "Wingdings 2"
frmDrop.Label137.ForeColor = &HC000& 'ค่าสีผมลอกจากหน้าPropertyสีเขียว
Else
frmDrop.Label137.Caption = "X"
frmDrop.Label137.Font = "Tahoma"
frmDrop.Label137.ForeColor = &HFF& 'ค่าสีผมลอกจากหน้าPropertyสีแดง
End If
ผมลองรันดู P มา สีมา แต่รูปแบบฟอร์นไม่มา ผมเขียนคำสั่งผิดแน่ๆ
รบกวนอาจารย์ปรับหน่อยครับ
:tt:

Re: การแปลงข้อมูล

Posted: Mon Sep 19, 2011 9:50 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

If Sheet26.Range("O22").Value = Sheet26.Range("E22").Value Then
frmDrop.Label137.Font = "Wingdings 2"
frmDrop.Label137.Caption = "P"
frmDrop.Label137.ForeColor = &HC000& 'ค่าสีผมลอกจากหน้าPropertyสีเขียว
Else
frmDrop.Label137.Font = "Tahoma"
frmDrop.Label137.Caption = "X"
frmDrop.Label137.ForeColor = &HFF& 'ค่าสีผมลอกจากหน้าPropertyสีแดง
End If

Re: การแปลงข้อมูล

Posted: Mon Sep 19, 2011 10:14 pm
by Bafnet
ขอบคุณครับ
:lol: แหมลำดับความสำคัญผิดไป
ยิ่งนานวันยิ่งสงสัย เอ...อาจารย์ไปร่ำเรียน Excel จากไหน
ความรู้ความเข้าใจถึงมากมายเหลือเกิน หรือไม่ก็งานของอาจารย์
ต้องเกี่ยวข้องกับ Excel เป็นแน่
ขอบคุณครับ
เกือบลืมครับ
ขอบคุณอาจารย์มากๆครับที่สอนให้ผมรู้จักประกาศตัวแปร
Dim..... :lol:

Re: การแปลงข้อมูล

Posted: Mon Sep 19, 2011 10:24 pm
by snasui
:lol: ก่อนหน้านี้ก็ใช้งาน Excel แทบทั้งวัน แต่ปัจจุบันไม่ได้เป็นเช่นนั้นแล้วครับ

ผมตอบปัญหาเกี่ยวกับ Excel ทั้งในประเทศและต่างประเทศมานานเป็นสิบปีแล้วครับ แต่หลัง ๆ ตอบในประเทศเป็นหลัก ความรู้ก็ได้จาก Help ของโปรแกรม การทดสอบ ทดลองเยอะ ๆ ครับ

ตัวอย่างการตอบคำถามในเวบต่างประเทศ
:arrow: ExcelForum
:arrow: MrExcel

Re: การแปลงข้อมูล

Posted: Thu Sep 22, 2011 10:25 pm
by Bafnet
สวัสดีครับอาจารย์
ขอบคุณครับสำหรับแหล่งความรู้ดีๆ ผมจะพยายามเรียนรู้ครับ
การเรียนรู้ไม่มีวันจบสิ้น
ผมหวังอย่างยิ่งว่าอาจารย์คงยังอยู่
มีปัญหาครับ
เกิด Bug
ที่ r=r+1
ขณะที่ r=32768
ผมเข้าใจว่าน่าจะเป็นเพราะ Dim r AS Interger ผมอ่านจากหนังสือ
แก้ไขอย่างไรดีครับ
ผมว่าจะเปลี่ยนเป็น Long ไหมครับไม่กล้าเปลี่ยนขอถามอาจารย์ก่อน
ตอนนี้ข้อมูลวิ่งอยู่ที่ สี่-ห้าหมื่นบรรทัดครับ
:oops:

Re: การแปลงข้อมูล

Posted: Thu Sep 22, 2011 10:44 pm
by Bafnet
อาจารย์ครับ
ถ้า Find As Interger แล้วเปลี่ยนเป็น AS Long
จะมีผลกับที่บางคำสั่ง r สูงสุดเป็นแค่หลักสิบ หรือร้อย
หรือไม่มีผล เพราะการกำหนดว่า As Long
เป็นแค่การกำหนดจำนวนค่าของข้อมูลว่าสูงสุดรับได้เท่าไร
ดังนั้นจึงไม่มีปัญหากับค่าต่ำสุด
ถ้าจะมีก็คือค่าที่เกินค่าสูงสุดที่รับได้
เอ..เข้าใจถุกรึป่าว :lol:

Re: การแปลงข้อมูล

Posted: Thu Sep 22, 2011 11:09 pm
by snasui
Bafnet wrote:มีปัญหาครับ
เกิด Bug
ที่ r=r+1
ขณะที่ r=32768
ผมเข้าใจว่าน่าจะเป็นเพราะ Dim r AS Interger ผมอ่านจากหนังสือ
แก้ไขอย่างไรดีครับ
แก้ไขด้วยการเปลี่ยนเป็น Long อย่างที่คุณ Bufnet คิดไว้ได้เลยครับ เนื่องจาก Long จะอยู่ในช่วง -2,147,483,648 ถึง 2,147,483,647 ส่วน Integer อยู่ในช่วง -32,768 to 32,767 ซึ่งไม่พอใช้งานครับ
Bafnet wrote:อาจารย์ครับ
ถ้า Dim r As Interger แล้วเปลี่ยนเป็น AS Long
จะมีผลกับที่บางคำสั่ง r สูงสุดเป็นแค่หลักสิบ หรือร้อย
หรือไม่มีผล เพราะการกำหนดว่า As Long
เป็นแค่การกำหนดจำนวนค่าของข้อมูลว่าสูงสุดรับได้เท่าไร
ดังนั้นจึงไม่มีปัญหากับค่าต่ำสุด
ถ้าจะมีก็คือค่าที่เกินค่าสูงสุดที่รับได้
เอ..เข้าใจถุกรึป่าว
เข้าใจถูกแล้วครับ ค่าต่ำสุดก็จะขยายไปมากกว่าเดิม จึงไม่น่าจะมีผลกระทบจากการเปลี่ยนเป็น Integer เป็น Long ครับ

Re: การแปลงข้อมูล

Posted: Thu Sep 22, 2011 11:17 pm
by Bafnet
ขอบคุณครับ
นั่งคอยอยู่ด้วยความกังวลว่าอาจารย์จะอยู่รึป่าว
งั้นลุยเลยนะครับ
แก้ๆ :lol:

Re: การแปลงข้อมูล

Posted: Tue Sep 27, 2011 8:41 pm
by Bafnet
สวัสดีครับอาจารย์
เกิดเรื่องครับ
อยู่ๆก็รันโค๊ดไม่ได้ครับ
Code ที่สั่งรัน อยู่ใน frmbranch
แต่มันดันไป DeBug ที่คำสั่งที่อยู่ในfrmMain ซึ่งfrmmain ผมไม่ได้ใช้
ได้หน้าจอ Debug ดังนี้ครับ งงไปหมดแล้วครับ
pang.jpg

Re: การแปลงข้อมูล

Posted: Tue Sep 27, 2011 8:52 pm
by Bafnet
สวัสดีครับ
อาจารย์ครับ
ไม่ว่าจะเลือกสั่งรัน frmตัวไหนก็ Debug ลักษณะดังกล่าวหมดครับ
:roll: จะร้องแล้วแก่ก็ร้องกันครางนี้ล่ะ

Re: การแปลงข้อมูล

Posted: Tue Sep 27, 2011 8:55 pm
by snasui
:D ตรวจสอบว่าในฟอร์มต่าง ๆ ใช้ชื่อ Procedure ซ้ำกันหรือไม่ครับ และลองดูว่า Event MouseMove ใช้กับ Object ที่ชื่อว่า bSend หรือไม่

ช่วย Resize ภาพ หรือ Capture ภาพให้มีสัดส่วนเล็กกว่านี้อีกหน่อยครับ เนื่องจากบางเวลาผมใช้จอเล็ก ทำให้มองไม่สะดวกครับ :tt: :mrgreen:

Re: การแปลงข้อมูล

Posted: Wed Sep 28, 2011 8:29 am
by Bafnet
สวัสดีครับ
จนด้วยเกล้าครับ..ลบทุกอย่างที่สร้างเพิ่มทิ้งก็ยังไม่ได้
อยากส่งไฟล์ให้อาจารย์ดูแต่ก็ใหญ่ 10167 KB
ถ้าจะให้อาจารย์ teamViewver เข้ามาดูให้
จะผิดกฏการทำงานของอาจารย์หรือเปล่าครับ
อาจารย์ครับ การที่วันก่อนผมไปสั่งเปลี่ยน Interger เป็น long
แต่รู้สึกว่าถ้าจำไม่ผิดวันนั้นสั่งเปลี่ยนทั้งโปรเจค
มันอาจไปส่งผลหรือเปล่า

วันนี้ผมจะเข้าไปตัวจังหวัดไปเอาไฟล์สำเนาที่ผมให้เพื่อนไปทดลองใช้งาน

Re: การแปลงข้อมูล

Posted: Wed Sep 28, 2011 10:49 am
by snasui
:D ช่วงกลางวันคงไม่สะดวกในการ Remote Desktop ครับ

สำหรับเรื่องการเปลี่ยนตัวแปรจาก Integer เป็น Long ไม่น่าจะมีผล และถ้าจะฟ้องควร Out of Memory อะไรแบบนั้นครับ :)

Re: การแปลงข้อมูล

Posted: Wed Sep 28, 2011 10:25 pm
by Bafnet
สวัสดีครับอาจารย์
รายงานความคืบหน้าครับ
ได้ไปเอาไฟล์งานที่ให้พนักงานทดลองใช้
ซึ่งไม่ได้เขียนคำสั่งใดๆเพิ่มเติม นอกจากการแก้ Interger เป็น Long
ปรากฎว่า Debug ลักษณะดังกล่าวครับ
และไฟล์ที่ไม่ได้แก้ Interger เป็น Long ไม่มีอาการดังกล่าว :roll:
ก็ไม่เป็นไรครับ เดี๋ยวทำใหม่ความพยายามอยู่ที่ไหนความสำเร็จน่าจะอยู่ที่นั้น
อืม...อาจารย์ครับมีสักสองประเด็น
1.การประกาศตัวแปรไว้แต่ไม่ได้ใช้มีผลกับคำสั่งนั้นรึเปล่าครับ เช่นบอกว่า Dim X As interger
แต่ในคำสั่งนั้นไม่มีคำสั่งใดๆที่ใช้ x เพราะบางทีคำสั่งที่คล้ายๆกันผมก็ลอกไปวาง แล้วเปลี่ยนคำสั่งแต่
ส่วนที่ประกาศตัวแปรบางทีก็ลืมลบ
2.อาจารย์พอจะแนะนำแหล่งความรู้เรื่อง barcode ได้ไหมครับ
ตอนนี้ผมมีฟอร์นบาร์โค๊ด ซึ่งนำไปทดสอบแล้ว ใช้ได้ครับ
แต่อยากรู้วิธีเขียน เช่นชุดข้อมูล+Enter ,ชุดข้อมูล+F7
ประมาณว่ายิงแล้วได้ข้อมูลตามที่ระบุพร้อม Enter :mrgreen:

เรื่องสุดท้ายครับ อาจารย์ครับงานชิ้นนี้ได้ถูกคัดเลือกส่งเข้าประกวด
งานนวัตกรรมประเภทโปรแกรมช่วยงานสาขา ของธกส.ประจำปี2554
ต้องขอขอบคุณอาจารย์อีกครั้งที่ทำให้มาถึงจุดนี้
ขออนุญาตนำ Link snasui.Com ใส่ในโปรแกรมนะครับ
ขอบพระคุณอย่างสูงครับ

Re: การแปลงข้อมูล

Posted: Wed Sep 28, 2011 10:43 pm
by snasui
Bafnet wrote:รายงานความคืบหน้าครับ
ได้ไปเอาไฟล์งานที่ให้พนักงานทดลองใช้
ซึ่งไม่ได้เขียนคำสั่งใดๆเพิ่มเติม นอกจากการแก้ Interger เป็น Long
ปรากฎว่า Debug ลักษณะดังกล่าวครับ
และไฟล์ที่ไม่ได้แก้ Interger เป็น Long ไม่มีอาการดังกล่าว :roll:
นับเป็นเรื่องแปลกครับ สิ่งที่ฟ้องไม่ตรงกับสิ่งที่โปรแกรมกำลังเป็น :lol:
Bafnet wrote:1.การประกาศตัวแปรไว้แต่ไม่ได้ใช้มีผลกับคำสั่งนั้นรึเปล่าครับ เช่นบอกว่า Dim X As interger
แต่ในคำสั่งนั้นไม่มีคำสั่งใดๆที่ใช้ x เพราะบางทีคำสั่งที่คล้ายๆกันผมก็ลอกไปวาง แล้วเปลี่ยนคำสั่งแต่
ส่วนที่ประกาศตัวแปรบางทีก็ลืมลบ
ไม่มีปัญหาครับ แต่ถ้าใช้โดยไม่ประกาศก่อนตัวแปรนั้นจะเป็น Variant โดยอัตโนมัติ
Bafnet wrote:2.อาจารย์พอจะแนะนำแหล่งความรู้เรื่อง barcode ได้ไหมครับ
ตอนนี้ผมมีฟอร์นบาร์โค๊ด ซึ่งนำไปทดสอบแล้ว ใช้ได้ครับ
แต่อยากรู้วิธีเขียน เช่นชุดข้อมูล+Enter ,ชุดข้อมูล+F7
ประมาณว่ายิงแล้วได้ข้อมูลตามที่ระบุพร้อม Enter :mrgreen:
สำหรับเรื่อง VBA และ Barcode ลองศึกษาตามนี้ดูครับ :arrow: VBA and Barcode
Bafnet wrote:ขออนุญาตนำ Link snasui.Com ใส่ในโปรแกรมนะครับ
ยินดีครับ

Re: การแปลงข้อมูล

Posted: Sat Oct 01, 2011 7:40 pm
by Bafnet
สวัสดีครับ
ขอบคุณครับสำหรับแหล่งความรู้เรื่องบาร์โค๊ด
ชอบใจๆๆ :lol: มีเรื่องให้ตื่นตาตื่นใจมากมาย
ทั้งDigital Clock
แต่เรื่องบาร์barcode ผมติดตรงไม่ทราบว่า
จะไปโหลด Encoder.bas ที่ไหน
หาอยู่2วันยังไม่พบแหล่ง
อาจารย์ครับวันนี้มีเรื่องรบกวนอาจารย์ปรับให้หน่อยครับ

Code: Select all

Private Sub CommandButton28_Click()
Dim ri As Range
If frmPro.ComboBox12.Value = "" Then
Exit Sub
End If
On Error Resume Next
Sheet21.Visible = xlSheetVisible
Sheet21.Activate
With Worksheets("Credit")
Set ri = .Range(.Range("BU1"), .Range("BZ65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.EntireColumn.AutoFit
With Selection
   .Borders(xlEdgeLeft).LineStyle = xlContinuous
   .Borders(xlEdgeTop).LineStyle = xlContinuous
   .Borders(xlEdgeBottom).LineStyle = xlContinuous
   .Borders(xlEdgeRight).LineStyle = xlContinuous
   .Borders(xlInsideHorizontal).LineStyle = xlContinuous
   .Borders(xlInsideVertical).LineStyle = xlContinuous
End With
frmPro.Hide
ri.PrintPreview
frmPro.Show
Sheet21.Activate
Columns("BU:BZ").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    Selection.Borders(xlEdgeLeft).LineStyle = xlNone
    Selection.Borders(xlEdgeTop).LineStyle = xlNone
    Selection.Borders(xlEdgeBottom).LineStyle = xlNone
    Selection.Borders(xlEdgeRight).LineStyle = xlNone
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Sheet21.Visible = xlSheetHidden
End Sub
คือที่Rang BU:BZ เป็นข้อมูลหาจำนวนงวดชำระหนี้
ซึ่งมีข้อมูลไม่แน่นอน
แต่ผมอยากให้ข้อมูลที่ต่อจากบรรทัดที่มีข้อมูล(เน้นที่BU:BZ นะครับ เนื่องจากที่ตำแหน่งเซลอื่นๆมีข้อมูลอื่นอยู่ด้วย)
เป็นผลรวมของแต่ละ Range
เช่นสมมติข้อมูลสุดท้ายที่ BU100
ก็อยากให้ที่ Range("BU101").formular ="=SUM(BU:BU)"
Range("BV101").formular ="=SUM(BV:BV)"
Range("BW101").formular ="=SUM(BW:BW)"
แนะนำหน่อยนะครับ

Re: การแปลงข้อมูล

Posted: Sat Oct 01, 2011 9:05 pm
by snasui
:P ลองดู Code ด้านล่างว่าใช่ที่ต้องการหรือเปล่าครับ

Code: Select all

Sub SumLastCellToStartCell()
Dim r As Range
Set r = Range("BU" & Rows.Count).End(xlUp).Offset(1, 0)
 r = "=sum(R1C:R[-1]C)"
 r.Offset(0, 1) = "=sum(R1C:R[-1]C)"
 r.Offset(0, 2) = "=sum(R1C:R[-1]C)"
 r.Offset(0, 3) = "=sum(R1C:R[-1]C)"
 r.Offset(0, 4) = "=sum(R1C:R[-1]C)"
 r.Offset(0, 5) = "=sum(R1C:R[-1]C)"
End Sub