Page 1 of 1

run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 4:53 pm
by March201711
เกิดปัญหาเวลา run marco แล้วเกิด sheet ที่เป็น วัน-เดือน-ปี ค่ะ แต่file ที่ชื่อว่า Source_otherได้ข้อมูลจากแหล่งอื่น บางวันคนที่ตั้งชื่อ sheet ใหม่ จะตั้ง "18-02-2020" (ไม่มีเคาะวรรค) บางวันก็ตั้งเป็น "19-02-2020 " (มีเคาะวรรคเพิ่มเข้ามา) อย่างนี้ต้องปรับใน code อย่างไร

ติด debug ตรงนี้ค่ะ

Code: Select all

Sheets(Format(Right(Range("A1").Value, 10), "dd-mm-yyyy")).Select 

Re: run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 7:50 pm
by snasui
:D เปลี่ยนชื่อชีตให้เป็นชื่อที่ต้องการเสียก่อน ตัวอย่างตาม Code ด้านล่างครับ

Code: Select all

'Other code
    Windows("Source_other.xlsx").Activate
    ActiveSheet.Name = Format(Right(Range("A1").Value, 10), "dd-mm-yyyy")
    Sheets(Format(Right(Range("A1").Value, 10), "dd-mm-yyyy")).Select
    'Or
    'Activesheet.Select
    Range("B3:C9").Select
'Other code

Re: run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 8:34 pm
by March201711
ถ้าวันนี้ทำของวันที่ 20/2/20

ถ้าสมมุติคนที่ส่งไฟล์มา เค้าตั้งชื่อsheet วันที่ไว้ล่วงหน้า เช่น 21-02-2020 และมีชื่อsheetวันก่อนๆหน้านั้น
หรือถ้าเค้า save sheetของวันก่อน เช่น 17-02-2020 ซึ่งไม่ตรงวันปัจจุบันที่หน้า file Main_sum cell A1 อย่างนี้ต้องปรับแก้อย่างไรค่ะ

Re: run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 8:59 pm
by snasui
:D ถ้ามีชีตก่อนหน้าก็ต้อง Loop ไปทุกชีตแก้ให้ตรงกับวันที่ใน A1 ถ้าไม่มีวันที่ก็ไม่ต้องแก้ชีตนั้น ๆ ถ้าข้อมูลไม่ถูกต้องก็ถือเป็นความรับผิดชอบของผู้ที่ส่งข้อมูลมา จะต้องรับไปแก้ไข ไม่แก้ไขครั้งนี้ก็ต้องแก้ไขในครั้งถัดไป เช่นนี้เป็นต้นครับ

การทำงานจะต้องมีลำดับขั้นตอนที่ตกลงกันล่วงหน้าเอาไว้ก่อนว่าต้องทำเช่นนั้น เช่นนี้ ไม่ควรพยายามหาทางแก้ด้วย Code ไปทุกเรื่อง เพราะมันมีโอกาสที่จะเป็นไปได้มากมาย เอาไว้เขียน VBA ให้คล่องเสียก่อนจะทำให้พิศดารแค่ไหนก็ได้ครับ

Re: run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 9:48 pm
by March201711
บอกไปบ้างแล้ว เค้าไม่ยอมทำน่ะค่ะ ต้องมานั่งแก้debug เองทุกครั้งไป

Re: run marco แล้วติดdebug วันที่

Posted: Thu Feb 20, 2020 9:58 pm
by snasui
:D ก็ต้องคุยในระดับที่สูงขึ้นไปหรือไม่ก็แก้ไขเองไปเรื่อย ๆ ครับ

Re: run marco แล้วติดdebug วันที่

Posted: Fri Feb 21, 2020 8:17 am
by March201711
ถ้าเลือกวันที่ของ file Main_sum = sheet source_other ต้องเขียนอย่างไรค่ะ

Re: run marco แล้วติดdebug วันที่

Posted: Fri Feb 21, 2020 5:15 pm
by logic
March201711 wrote: Fri Feb 21, 2020 8:17 am ถ้าเลือกวันที่ของ file Main_sum = sheet source_other ต้องเขียนอย่างไรค่ะ
คือยังไงนะครับ จะเขียนอะไรแบบไหน ช่วยเล่าขั้นตอนแบบ 1,2,3 มาหน่อย อ่านแล้วงงครับ 😑

Re: run marco แล้วติดdebug วันที่

Posted: Fri Feb 21, 2020 8:22 pm
by March201711
ถ้าวันนี้ทำของวันที่ 20/2/20 ซึ่งตรงกับ cell A1 ที่ file "Main_sum"
แล้วไฟล์ที่ชื่อ "Source_other" save ไว้ที่ sheet "17-02-2020" อยากให้ click run แล้วให้ marco เลือก sheet "20_02-2020" เลยค่ะ

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 7:53 am
by snasui
:D ทำได้ด้วยการ Loop ไปเช็คเซลล์ A1 ของทุกชีตครับ

ตัวอย่าง

Code: Select all

Dim strd As String
strd = Application.Text(Date, "dd\_mm-yyyy")
For Each sh In Worksheets
    If VBA.Right(sh.Range("a1").Value, 10) = strd Then sh.Select
Next sh

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 7:37 pm
by March201711
ปรับแล้วได้ยอดเป็นของวันที่ 21-02-2020
อยากให้ดึงของวันที่ 20-02-2020ตาม cell a1 ค่ะ

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 7:48 pm
by snasui
:D โปรแกรมจะทราบได้อย่างไรว่าเรากำลังต้องการดึงข้อมูลของวันไหน มีเกณฑ์ใดให้พิจารณาครับ :?:

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 7:52 pm
by March201711
ดูได้จากFile : Main_sum ที่ cell A1 คะ

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 8:10 pm
by snasui
:D ที่จริงปัญหานี้ไม่ได้มีความยุ่งยาก แต่คุณ March201711 อธิบายสิ่งที่ต้องการมาไม่ชัดเจนครับ

ตัวอย่างการอธิบายสำหรับปัญหานี้คือ

ให้ค้นหาชีตในไฟล์ Sorece_other.xlsx ที่มีชื่อตรงกับค่าวันที่ใน A1 ของชีต Main ของไฟล์ Main_sum.xlsm

การค้นหาลักษณะนี้จะต้องใช้ VBA เพราะต้อง Loop ไม่สามารถทำด้วย Macro เหมือนที่บันทึกมาถามกันได้ การใช้งาน VBA จำเป็นต้องศึกษาเพิ่มเติม ต้องฝึกฝนอีกมาก ควรเริ่มต้นจากการทำตามหนังสือเพราะว่าได้ลำดับสิ่งที่ควรทราบเอาไว้ให้เรียบร้อยแล้ว

การใช้ Macro จะทำงานนี้ได้เมื่อชื่อชีตมีการคีย์มาอย่างถูกต้อง ไม่ใช่วรรคหน้า หลัง วรรคกลาง ซึ่งผมก็ได้บอกไปแล้วในโพสต์ก่อน ๆ ว่าให้ดำเนินการอย่างไร ในครั้งถัดไป ถ้าต้อง Loop ลักษณะนี้อีก ผมจะให้เขียนมาเองก่อน เพราะเป็นสิ่งจำเป็นที่จะต้องทราบและทำเป็นมาก่อนบ้างครับ

่ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim wb As Workbook
Dim strd As String
Set wb = Workbooks("Source_other.xlsx")
With ThisWorkbook.Worksheets("Main").Range("a1")
    strd = VBA.Replace(VBA.Right(.Value, 10), "/", "-")
End With
For Each sh In wb.Worksheets
    If VBA.Left(sh.Name, 10) = strd Then
        wb.Activate
        sh.Select
        Exit For
    End If
Next sh
Range("B3:C9").Select
Selection.Copy
Windows("Main_sum.xlsm").Activate
Range("B3").Select
ActiveSheet.Paste
Range("F3").Select

Re: run marco แล้วติดdebug วันที่

Posted: Sat Feb 22, 2020 8:56 pm
by March201711
:D ค่ะ ขอบคุณที่อาจารย์แนะนำค่ะ จะไปปรับปรุงในครั้งต่อไปค่ะ