EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Private Sub CommandButton6_Click()
If TextBox21.Text <> "" And TextBox22.Text <> "" And TextBox23.Text <> "" And TextBox24.Text <> "" And TextBox31.Text <> "" _
And TextBox32.Text <> "" And TextBox33.Text <> "" And TextBox34.Text <> "" And TextBox35.Text <> "" Then
If MsgBox(" ท่านต้องการ ปรับปรุงข้อมูล ไว้ในฐานข้อมูลนี้ใช่หรือไม่ ? ", vbYesNo + vbQuestion, "การจัดเก็บข้อมูลนี้ มิใช่ เป็นการ Save โปรแกรม") = vbYes Then
Sheets("DataEachUse").Select
Range("C11").Select
Do While True
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 6).Value = TextBox21.Text
ActiveCell.Offset(0, 7).Value = TextBox22.Text
ActiveCell.Offset(0, 8).Value = TextBox23.Text
ActiveCell.Offset(0, 5).Value = DateSerial(Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 9).Value = TextBox31.Text
ActiveCell.Offset(0, 10).Value = TextBox32.Text
ActiveCell.Offset(0, 11).Value = TextBox33.Text
ActiveCell.Offset(0, 12).Value = TextBox34.Text
ActiveCell.Offset(0, 13).Value = TextBox35.Text
Unload Me
MsgBox "ได้ทำการปรับปรุง Record ID " & Sheets("CalPrint").Range("B5") & " นี้เรียบร้อยแล้ว"
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End If
Else
MsgBox " ท่านต้องใส่ข้อมูลให้ครบทุกช่องถ้าไม่มีข้อมูลให้ใช้สัญลักษณ์" & " ( - ) " & "หรือแบบอื่นก็ได้ ", vbExclamation, " โปรแกรมการเบิกจ่ายหลอด T5 "
End If
End Sub
ลองเขียนมาก่อนครับ เขียนแล้วติดตรงไหนก็ค่อยมาดูกันต่อครับyodpao.b wrote:ส่วนการ Update ข้อมูลลงใน Sheet "DataReimbursement" ยังไม่ได้ทำ เนื่องจากติดปัญหาดังนี้
ยกตัวอย่างที่ GP-2554-00080 ซ้ำกันถึง 3 บรรทัด ต้องการ Update ทั้ง 3 บรรทัด
อยากให้อาจาร์ยกรุณาเขียนโคดให้ด้วยครับ
จุดประสงค์คือ ต้องการ อัพเดททั้ง 2 หน้า บรรทัดที่ใช้รหัส GP-2554-00080
ขอบคุณมากครับ
พร้อมกันนี้ได้แนบไฟล์มาด้วยครับ
Code: Select all
Private Sub CommandButton6_Click()
Sheets("DataEachUse").Select
Range("C11").Select
Do While True
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 6).Value = TextBox21.Text
ActiveCell.Offset(0, 7).Value = TextBox22.Text
ActiveCell.Offset(0, 8).Value = TextBox23.Text
ActiveCell.Offset(0, 5).Value = DateSerial(Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 9).Value = TextBox31.Text
ActiveCell.Offset(0, 10).Value = TextBox32.Text
ActiveCell.Offset(0, 11).Value = TextBox33.Text
ActiveCell.Offset(0, 12).Value = TextBox34.Text
ActiveCell.Offset(0, 13).Value = TextBox35.Text
'Unload Me
'MsgBox "ä´é·Ó¡ÒûÃѺ»Ãا Record ID " & Sheets("CalPrint").Range("B5") & " ¹ÕéàÃÕºÃéÍÂáÅéÇ"
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
Sheets("DataReimbursement").Select
Range("C11").Select
Do While True
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 17).Value = TextBox21.Text
ActiveCell.Offset(0, 18).Value = TextBox22.Text
ActiveCell.Offset(0, 6).Value = DateSerial(Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 19).Value = TextBox31.Text
ActiveCell.Offset(0, 20).Value = TextBox32.Text
Unload Me
MsgBox "ä´é·Ó¡ÒûÃѺ»Ãا Record ID " & Sheets("CalPrint").Range("B5") & " ¹ÕéàÃÕºÃéÍÂáÅéÇ"
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Code: Select all
Sheets("CalPrint").Select
Range("B11:X" & Cells(Rows.Count, 2).End(xlUp).Row).Copy Sheets("DataReimbursement").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
Code: Select all
Private Sub CommandButton6_Click()
If TextBox21.Text <> "" And TextBox22.Text <> "" And TextBox23.Text <> "" And TextBox24.Text <> "" And TextBox31.Text <> "" _
And TextBox32.Text <> "" And TextBox33.Text <> "" And TextBox34.Text <> "" And TextBox35.Text <> "" Then
If MsgBox(" ·èÒ¹µéͧ¡Òà »ÃѺ»Ãا¢éÍÁÙÅ äÇéã¹°Ò¹¢éÍÁÙŹÕéãªèËÃ×ÍäÁè ? ", vbYesNo + vbQuestion, "¡ÒèѴà¡çº¢éÍÁÙŹÕé ÁÔãªè à»ç¹¡Òà Save â»Ãá¡ÃÁ") = vbYes Then
Sheets("DataEachUse").Select
Range("C11").Select
Do While True
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 6).Value = TextBox21.Text
ActiveCell.Offset(0, 7).Value = TextBox22.Text
ActiveCell.Offset(0, 8).Value = TextBox23.Text
ActiveCell.Offset(0, 5).Value = DateSerial(Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 9).Value = TextBox31.Text
ActiveCell.Offset(0, 10).Value = TextBox32.Text
ActiveCell.Offset(0, 11).Value = TextBox33.Text
ActiveCell.Offset(0, 12).Value = TextBox34.Text
ActiveCell.Offset(0, 13).Value = TextBox35.Text
Unload Me
Sheets("CalPrint").Select
Range("B11:X" & Cells(Rows.Count, 2).End(xlUp).Row).Copy Sheets("DataReimbursement").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
MsgBox "ä´é·Ó¡ÒûÃѺ»Ãا Record ID " & Sheets("CalPrint").Range("B5") & " ¹ÕéàÃÕºÃéÍÂáÅéÇ"
Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
End If
Else
MsgBox " ·èÒ¹µéͧãÊè¢éÍÁÙÅãËé¤Ãº·Ø¡ªèͧ¶éÒäÁèÁÕ¢éÍÁÙÅãËéãªéÊÑÅѡɳì" & " ( - ) " & "ËÃ×ÍẺÍ×蹡çä´é ", vbExclamation, " â»Ãá¡ÃÁ¡ÒÃàºÔ¡¨èÒÂËÅÍ´ T5 "
End If
End Sub
สามารถใช้ VBA แทนได้ครับเรียนอาจาร์ยครับผมลองทดลองการใช้ INDEX ก็ยังรู้สึกว่าทำงานช้าไม่ทันใจ
แต่ถ้าไม่ใช้สูตรก็จะทำงานเร็วมาก
คำถาม มีวิธีการอะไรบ้างให้ประมวลผลเร็วครับ
กรณีเงื่อนไขเหมือนกัน พื้นที่การทำงานเท่ากัน การใช้ VBA มักจะไม่เร็วกว่าการใช้ฟังก์ชั่นครับbank9597 wrote:สามารถใช้ VBA แทนได้ครับเรียนอาจาร์ยครับผมลองทดลองการใช้ INDEX ก็ยังรู้สึกว่าทำงานช้าไม่ทันใจ
แต่ถ้าไม่ใช้สูตรก็จะทำงานเร็วมาก
คำถาม มีวิธีการอะไรบ้างให้ประมวลผลเร็วครับ
ขอบคุณมากครับกรณีเงื่อนไขเหมือนกัน พื้นที่การทำงานเท่ากัน การใช้ VBA มักจะไม่เร็วกว่าการใช้ฟังก์ชั่นครับ
Code: Select all
Sheets("CalPrint").Select
Range("B11:X" & Cells(Rows.Count, 2).End(xlUp).Row).Copy Sheets("DataReimbursement").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0)
Code: Select all
With Worksheets(2).Range("c11:c" & Cells(Rows.Count, 3).End(xlUp).Row)
Set c = .Find(TextBox10.Text, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 1).Value = "---test----"
c.Offset(0, 2).Value = TextBox22.Text
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Code: Select all
Private Sub CommandButton6_Click()
Sheets("DataEachUse").Select
Range("C11").Select
Do While ActiveCell <> ""
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 6).Value = TextBox21.Text
ActiveCell.Offset(0, 7).Value = TextBox22.Text
ActiveCell.Offset(0, 8).Value = TextBox23.Text
ActiveCell.Offset(0, 5).Value = DateSerial( _
Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 9).Value = TextBox31.Text
ActiveCell.Offset(0, 10).Value = TextBox32.Text
ActiveCell.Offset(0, 11).Value = TextBox33.Text
ActiveCell.Offset(0, 12).Value = TextBox34.Text
ActiveCell.Offset(0, 13).Value = TextBox35.Text
' Unload Me
' MsgBox "ได้ทำการปรับปรุง Record ID " & Sheets("CalPrint").Range("B5") & " นี้เรียบร้อยแล้ว"
' Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
Sheets("DataReimbursement").Select
Range("C11").Select
Do While ActiveCell <> ""
If ActiveCell.Value = TextBox10.Text Then
ActiveCell.Offset(0, 17).Value = TextBox21.Text
ActiveCell.Offset(0, 18).Value = TextBox22.Text
ActiveCell.Offset(0, 6).Value = DateSerial( _
Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
ActiveCell.Offset(0, 19).Value = TextBox31.Text
ActiveCell.Offset(0, 20).Value = TextBox32.Text
' Unload Me
' MsgBox "ได้ทำการปรับปรุง Record ID " & Sheets("CalPrint").Range("B5") & " นี้เรียบร้อยแล้ว"
' Exit Sub
End If
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "ได้ทำการปรับปรุง Record ID " & Sheets("CalPrint").Range("B5") & " นี้เรียบร้อยแล้ว"
Unload Me
End Sub
Code: Select all
MsgBox Space(20) & "Please try again."
Code: Select all
Private Sub CommandButton6_Click()
Sheets("DataReimbursement").Select
With Range("c11:c" & Cells(Rows.Count, 3).End(xlUp).Row)
Set c = .Find(TextBox10.Text, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Offset(0, 17).Value = TextBox21.Text
c.Offset(0, 18).Value = TextBox22.Text
c.Offset(0, 6).Value = DateSerial(Year(CDate(TextBox24)), Month(CDate(TextBox24)), Day(CDate(TextBox24)))
c.Offset(0, 19).Value = TextBox31.Text
c.Offset(0, 20).Value = TextBox32.Text
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Unload Me
End Sub
ผมเขียนอธิบายไว้เรียบร้อยแล้วyodpao.b wrote:กรณีที่มีการเว้นวรรคจำนวนมากเพื่อความสวยงาม สามารถใช้ฟังก์ชั่น Space เข้ามาช่วยแทนการเคาะวรรคจำนวนมาก
คำถาม ฟังก์ชั่น Space คืออะไร กดตรงไหน
ลองอ่านทบทวนอีกครั้งครับsnasui wrote:กรณีที่มีการเว้นวรรคจำนวนมากเพื่อความสวยงาม สามารถใช้ฟังก์ชั่น Space เข้ามาช่วยแทนการเคาะวรรคจำนวนมาก เช่น
โค้ด: เลือกทั้งหมด
MsgBox Space(20) & "Please try again."
เทียบเท่ากับเคาะ Space bar ไป 20 ครั้งก่อนประโยค Please try again.