Page 1 of 1

สอบถามเรื่องการเขียนสูตร เมื่อดึงข้อมูลข้ามไฟล์คับ

Posted: Wed Dec 07, 2022 3:22 am
by bananaband
คือผมเขียน VBA เพื่อเปิดไฟล์ excel อื่นขึ้นมา แล้วvlookupชีทงานปัจจุบันกับไฟล์ excel ที่เปิด code ดังนี้คับ

Code: Select all

Sub Apr()
    Dim CrntWorkBook As Workbook
    Dim SourceBook As Workbook
    Dim SourceRange As Range
    Dim Destination As Range

    Set CrntWorkBook = ActiveWorkbook
    
     With Application.FileDialog(msoFileDialogOpen)
        .Title = "File "
        .InitialFileName = ThisWorkbook.Path & " \ "
        .Filters.Clear
        .Filters.Add "Excel Files", "*.xl*;*.xm*"
        .AllowMultiSelect = False
        .Show
         
        If .SelectedItems.Count > 0 Then
                Workbooks.Open .SelectedItems(1)
                Set SourceBook = ActiveWorkbook
                
    Sheets("IFCN Sale Amount").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields( _
        "[Raw Data 3 Y].[Month].[Month]").VisibleItemsList = Array("")
    ActiveSheet.PivotTables("PivotTable1").PivotFields( _
        "[Raw Data 3 Y].[Month].[Month]").VisibleItemsList = Array( _
        "[Raw Data 3 Y].[Month].&[04]")
    CrntWorkBook.Activate
    ActiveWindow.SmallScroll Down:=-38
    Range("P6").Select
    ActiveCell.FormulaR1C1 = _
        "=IFERROR(VLOOKUP([@Area],'[1_ReportSOS.xlsx]FOM'!C2:C3,2,0),0)"
    Range("P6").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=38
    Range("P6:P70").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("P6:P70").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    
        
             SourceBook.Close False
            End If
        End With
End Sub
อธิบายคร่าวๆว่า
- เมื่อเปิด macro ขึ้น Excel จะมี Dialog ถามว่าจะเปิดไฟล์excel ไฟล์ไหน
- เมื่อเปิดแล้วจะทำการ Vlookup ชีทงานปัจจุบันกับตารางใน ไฟล์excelที่เปิดด้วยmacro

ทีนี้ตรงบรรทัด "=IFERROR(VLOOKUP([@Area],'[1_ReportSOS.xlsx]FOM'!C2:C3,2,0),0)"
ตรง [1_ReportSOS.xlsx] :ซึ่งเป็นชื่อไฟล์ ผมจะเปลี่ยนตรงนี้ให้เป็นชื่อที่ตรงกับ ชื่อไฟล์excelที่ผมเปิดยังไงอ่ะคับ เช่น ถ้าเปิดไฟล์ชื่อ FFF.xls ก็ให้สูตรเป็น FFF.xls ด้วย

รบกวนทีนะคับ

Re: สอบถามเรื่องการเขียนสูตร เมื่อดึงข้อมูลข้ามไฟล์คับ

Posted: Wed Dec 07, 2022 5:58 am
by snasui
bananaband wrote: Wed Dec 07, 2022 3:22 am ตรง [1_ReportSOS.xlsx] :ซึ่งเป็นชื่อไฟล์ ผมจะเปลี่ยนตรงนี้ให้เป็นชื่อที่ตรงกับ ชื่อไฟล์excelที่ผมเปิดยังไงอ่ะคับ
bananaband wrote: Wed Dec 07, 2022 3:22 am รบกวนทีนะคับ
:D คำว่า "อ่ะคับ", "นะคับ" ผิดกฎการใช้บอร์ดข้อ 1 ด้านบน :roll: กรุณาระมัดระวังด้วยครับ

ชื่อไฟล์ที่ถามมานั้นมีการกำหนดให้กับตัวแปรแล้วคือ
bananaband wrote: Wed Dec 07, 2022 3:22 am Set SourceBook = ActiveWorkbook
จึงสามารถนำตัวแปรนั้นมาใช้ได้เลย Code จะเป็นเช่น
"=IFERROR(VLOOKUP([@Area]," & "'[" & SourceBook.Name & "]" & "FOM'!C2:C3,2,0),0)"

ในโอกาสถัดไปกรุณาแนบไฟล์ตัวอย่างซึ่งมี Code นี้เรียบร้อยแล้วมาด้วย จะสะดวกในการตอบของเพื่อนสมาชิกมากกว่าการวางมาเฉพาะ Code นอกจากนี้การวางมาเฉพาะ Code อาจจะไม่มีผู้ตอบครับ

Re: สอบถามเรื่องการเขียนสูตร เมื่อดึงข้อมูลข้ามไฟล์คับ

Posted: Wed Dec 07, 2022 2:09 pm
by bananaband
1. ขอโทษครับ พอดีพิมพ์จนติดเลยลืมดูคำว่าครับ
2. ขอโทษครับ ผมพึ่งสมัครมาใช้เว็บบอร์ดนี้เพราะพึ่งหัดการใช้ VBA ครับ เลยไม่ค่อยรู้เรื่องว่าควรถามยังไงครับ
3. ขอบคุณสำหรับคำตอบนะครับ จะลองทำไปปรับใช้ดูครับ ผมมักจะงงเรื่อง " หรือ ' เสมอเลยครับ