Page 1 of 1

Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Fri Apr 24, 2020 10:16 pm
by March201711
คือ Save file เป็น ไฟล์ใหม่ที่เป็น .xlsm ที่ยังใช้ run marco ได้ เหมือนไฟล์เดิม และทำการ breaklink ข้อมูลทั้งหมดทุกไฟล์ (จริงๆมีทั้งหมด 20 ไฟล์ แต่ยกมาบางตัวอย่างแค่ 3-4 ไฟล์ค่ะ) พอ run save เป็นไฟล์ใหม่ที่เป็น marco แล้ว ไฟล์ใหม่ที่ได้ พอกดปุ่ม A_1, B_1, C_1 แล้ว ทำไม run marco ไม่เหมือนไฟล์เดิมคะ ขอบคุณค่ะ

Code: Select all

Sub ExportFile_update()				
								
    Dim wb As Workbook				
    Dim lks As Variant				
    Dim i As Integer				
    				
    Sheets(Array("check", "AAA", "BBB", "CCC")).Select				
				
   Sheets(Array("check", "AAA", "BBB", "CCC")).Copy				
				
    				
    Set wb = ActiveWorkbook				
    lks = wb.LinkSources(Type:=xlExcelLinks)				
    				
    With wb				
        .SaveAs Filename:="D:\MyCom\TestRun.xlsm", _				
        Password:="", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False				
        For i = LBound(lks) To UBound(lks)				
            .BreakLink Name:=lks(i), Type:=xlExcelLinks				
        Next i				
    End With				
   				
    Range("M5").Select				
    ActiveWindow.Application.WindowState = xlNormal				
    				
    ActiveWorkbook.Save				
    				
    Windows("Info_Main.xlsm").Activate				
    Sheets("check").Select				
    Range("G1").Select				
				   				
End Sub  

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sat Apr 25, 2020 8:27 am
by snasui
:D ที่ Run Macro ไม่ได้เพราะว่าไฟล์ใหม่ไม่ได้มี Module ของคำสั่งต่าง ๆ ติดไปด้วยครับ

การจะให้คำสั่ง VBA ติดไปด้วยให้เลือก Save As จากไฟล์ต้นฉบับไปใช้จึงจะได้ Code VBA ไปด้วย

การคัดลอกเฉพาะ Sheet ที่ต้องการไปใช้จะไม่มี Code ติดไปด้วยแต่อย่างใดครับ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sat Apr 25, 2020 11:21 am
by March201711
ก็เบือกSave จากต้นฉบับแล้วนะคะ แต่ทำไมไม่ตามต้นฉบับมาด้วยคะ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sat Apr 25, 2020 12:03 pm
by snasui
:D Code ที่เขียนมาไม่เรียกว่าเลือก Save As จากต้นฉบับครับ

ถ้าเลือก Save As จากต้นฉบับ ไม่จำเป็นต้องคัดลอกชีตมาใช้ ไม่จำเป็นต้อง Set ให้ wb = ActiveWorkbook

เมื่อคัดลอกชีตมาใช้มันจะเปิดไฟล์ใหม่ ดังนั้น ActiveWorkbook คือไฟล์ใหม่ที่ไม่มี Code ครับ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 8:29 am
by March201711
ถ้าเลือก Save As จากต้นฉบับ ไม่จำเป็นต้องคัดลอกชีตมาใช้ ไม่จำเป็นต้อง Set ให้ wb = ActiveWorkbook
เอาออกแล้วค่ะ แต่ขึ้น debug น่ะค่ะ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 8:48 am
by snasui
:D การเอาออกแบบนั้นใช้การไม่ได้ครับ

Record Macro ใหม่ Backup ไฟล์เดิมไว้ก่อนครับ

สิ่งที่ต้องทำด้วย Macro คือ
  1. Remove links
  2. Save as เป็นไฟล์ใหม่
ก็จะได้ไฟล์ใหม่มี Code มาพร้อมให้ใช้

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 9:00 am
by March201711
โดยไม่ต้องกำหนด Dim , with...end with, for next เลยหรอคะ มันก็จะbreaklink ไม่หมดถ้ามีfile เดือนใหม่ๆ เข้ามาน่ะค่ะ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 9:03 am
by snasui
:D แบบนั้นไม่เรียกว่า Macro แต่เป็นการเขียน VBA

Dim ต่าง ๆ ต้องเขียนเข้าไปเอง แต่การ Record Macro ได้มาจากการบันทึกหน้าจอของโปรแกรมและจะไม่มี Dim ติดมาด้วย ผมแจ้งให้ Record Macro ได้ Code มาแล้วค่อยปรับใช้ ควรเริ่มการทำงานแบบนี้ก่อนสำหรับมือใหม่ครับ :roll:

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 9:08 am
by March201711
ถ้ามีไฟล์ใหม่ๆเข้ามาต้องมาปรับเองทุกครั้งหรอคะ ถ้าใช้ Dim กำหนดเข้าไปก็ต้องแก้มือเองทุกครั้งเลยสินะคะ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 9:10 am
by snasui
:D กรุณาอ่านโพสต์ #8 อ่านแล้วไม่เข้าใจ ถามมาได้เรื่อย ๆ ครับ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 2:59 pm
by March201711
ทำการ record marcoแล้ว ถ้ามีเดือนใหม่เช่น เดือน 4,5,6.....เพิ่มขึ้นมาทุกๆเดือน ต้องเข้าไปปรีบแก้ code vba เองทุกครั่ง อยากให้ run marco แล้วให้มัน auto breaklink เองทั้งหมด น่ะค่ะ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 3:28 pm
by snasui
:D ที่ Record Macro มานั้นผิดลำดับจากที่ผมแจ้งไปครับ
snasui wrote: Sun Apr 26, 2020 8:48 am :D การเอาออกแบบนั้นใช้การไม่ได้ครับ

Record Macro ใหม่ Backup ไฟล์เดิมไว้ก่อนครับ

สิ่งที่ต้องทำด้วย Macro คือ
  1. Remove links
  2. Save as เป็นไฟล์ใหม่
ก็จะได้ไฟล์ใหม่มี Code มาพร้อมให้ใช้
ตัวอย่างการปรับ Code หลังจากได้ Macro มาแล้วจะเป็นตามด้านล่าง

Code: Select all

Dim lks As Variant, i As Integer
With ThisWorkbook
    lks = .LinkSources(Type:=xlLinkTypeExcelLinks)
    For i = LBound(lks) To UBound(lks)
        .BreakLink Name:=lks(i), Type:=xlExcelLinks
    Next i
End With
ChDir "D:\MyCom"
ActiveWorkbook.SaveAs Filename:="D:\MyCom\Test_run.xlsm", FileFormat:= _
    xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
จะเห็นว่าเหลือ Code ใดที่จำเป็นต้องใช้เพื่อให้เป็นไฟล์ใหม่ที่มี Macro ติดไปด้วย

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

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 4:23 pm
by March201711
สงสัยค่ะ ถ้าสลับขั้นตอนก่อนหลังจะทำให้ code vba เปลี่ยนความหมายไปด้วยหรือคะ คือcode vba มีความหมายซับซ้อนมาก ขอบคุณอาจารย์ที่ปูทางให้ค่ะ :D

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 4:29 pm
by snasui
March201711 wrote: Sun Apr 26, 2020 4:23 pm ถ้าสลับขั้นตอนก่อนหลังจะทำให้ code vba เปลี่ยนความหมายไปด้วย
:D ขึ้นกับลักษณะของงาน แต่โดยปกติการเรียงลำดับ Code ย่อมส่งผลต่อผลลัพธ์เสมอครับ

Re: Breaklink แล้ว Save เป็น Marco แล้วกด run marco ไม่ได้

Posted: Sun Apr 26, 2020 4:31 pm
by March201711
ค่ะ เข้าใจแล้วค่ะ ขอบคุณอาจารย์มากค่ะ :D