Page 2 of 4

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 10:47 pm
by sakajohn
snasui wrote::D เนื่องจากกำหนด Book2.xlsm ให้เป็น Shared File การทำงานจึงช้าลงครับ
มีวิธีแก้ไหมครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 11:01 pm
by snasui
:lol: ถ้าต้องแชร์ ไม่มีวิธีแก้ครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 11:07 pm
by sakajohn
อาจารย์ครับ ถ้าเราเขียน code ว่าถ้า sheet M01 มีข้อมูลเพิ่มเข้ามา ให้ทำการ copyแถวที่เพิ่มมาใหม่ และไปวางไว้ที่ Book 2 โดยให้ข้อมูลต่อกันไปเรื่อยๆ แบบนี้จะติดปัญหาอะไรไหมครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 11:12 pm
by snasui
:D เมื่อมีข้อมูลมากขึ้นเรื่อย ๆ เป็นหลักพัน หลักหมื่นก็จะติดปัญหาเช่นเดิมครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 11:32 pm
by sakajohn
ถ้าอย่างนั้นก็คงต้องกลับไปทำแบบสูตรเดิม คือ

Code: Select all

Workbook("Book1").Worksheets("Sheet2").Range("C1:C10").Value = Workbook("Book2").Worksheets("Sheet1").Range("A1:A10").Value
แต่ถ้า Book 2 อยู่อีกเครื่องในวง Lan เราต้องเพิ่มcodeอย่างไรครับ รบกวนชี้แนะด้วยครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Tue Nov 22, 2016 11:56 pm
by snasui
:D ไม่ว่า Book2 จะอยู่ที่ใดก็ตาม การทำงานแบบข้ามไฟล์จะต้องเปิดไฟล์ขึ้นมาทำงานพร้อมกัน อันนี้เป็นแบบง่าย ยกเว้นมีความสามารถเขียน SQL ได้จึงสามารบันทึกข้อมูลลงในไฟล์ที่ปิดอยู่ได้ หากจะทำเช่นนั้น Code ที่เขียนมานี้ไม่สามารถใช้ได้เพราะเป็นการเขียนคนละแบบ แตกต่างกันอย่างสิ้นเชิง ต้องศึกษาอีกพอควร ต้องเขียนมาเอง ติดแล้วค่อยถามกันครับ

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

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Wed Nov 23, 2016 12:05 am
by sakajohn
snasui wrote: :D ไม่ว่า Book2 จะอยู่ที่ใดก็ตาม การทำงานแบบข้ามไฟล์จะต้องเปิดไฟล์ขึ้นมาทำงานพร้อมกัน อันนี้เป็นแบบง่าย ยกเว้นมีความสามารถเขียน SQL ได้จึงสามารบันทึกข้อมูลลงในไฟล์ที่ปิดอยู่ได้ หากจะทำเช่นนั้น Code ที่เขียนมานี้ไม่สามารถใช้ได้เพราะเป็นการเขียนคนละแบบ แตกต่างกันอย่างสิ้นเชิง ต้องศึกษาอีกพอควร ต้องเขียนมาเอง ติดแล้วค่อยถามกันครับ

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

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Wed Nov 23, 2016 5:59 pm
by snasui
:D ตัวอย่างการเปิดไฟล์ขึ้นมาทำงาน เมื่อเสร็จแล้วค่อยปิดไปตามด้านล่างครับ

Code: Select all

Dim boookpath As String, bookname As String, tBook As Workbook
bookpath = "C:\Downloads\"
bookname = "Book1.xlsx"
Set tBook = Workbooks.Open Filename:=parh & bookname
Workbooks("Book1").Worksheets("Sheet2").Range("C1:C10").Value = _
    Workbooks("Book2").Worksheets("Sheet1").Range("A1:A10").Value
tBook.Close , True
ตัวอย่างนี้ถือว่า Book2 คือตัวโปรแกรม เปิดไฟล์ Book1 มาทำงาน ทำเสร็จแล้วปิดครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 4:02 pm
by sakajohn
อาจารย์ครับ จาก code

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim bookpath As String, bookname As String, tBook As Workbook
bookpath = "D:\Downloads\"
bookname = "Book1.xlsm"
Set tBook = Workbooks.Open Filename:=parh & bookname
Workbooks("Book1").Worksheets("Sheet2").Range("C1:C10").Value = _
    Workbooks("Book2").Worksheets("Sheet1").Range("A1:A10").Value
tBook.Close , True
End Sub
ผม save ไฟล์ Book1 กับ Book2 ไว้ที่ drive D:\Download ตอนที่ทำเครื่องที่บ้านใช้งานได้แต่พอมาทำเครื่องที่ทำงาน ขึ้น error Set tBook = Workbooks.Open Filename:=parh & bookname[C\] แล้วตรงคำว่า [C]parh[C\] ต้องเปลี่ยนเป็น [C]path[C\] ไหมครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 4:05 pm
by sakajohn
อาจารย์ครับ จาก code

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim bookpath As String, bookname As String, tBook As Workbook
bookpath = "D:\Downloads\"
bookname = "Book1.xlsm"
Set tBook = Workbooks.Open Filename:=parh & bookname
Workbooks("Book1").Worksheets("Sheet2").Range("C1:C10").Value = _
    Workbooks("Book2").Worksheets("Sheet1").Range("A1:A10").Value
tBook.Close , True
End Sub
ผม save ไฟล์ Book1 กับ Book2 ไว้ที่ drive D:\Download ตอนที่ทำเครื่องที่บ้านใช้งานได้แต่พอมาทำเครื่องที่ทำงาน ขึ้น error Set tBook = Workbooks.Open Filename:=parh & bookname แล้วตรงคำว่า parh ต้องเปลี่ยนเป็น path ไหมครับ ตัวอย่างคือไฟล์ที่มาทำที่ทำงานครับ คือ ไฟล์ book 1 และ Book 2 จะไว้ที่ ไดรฟ์ D ครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 10:27 pm
by snasui
sakajohn wrote:Set tBook = Workbooks.Open Filename:=parh & bookname แล้วตรงคำว่า parh ต้องเปลี่ยนเป็น path ไหมครับ
:D ประกาศตัวแปรไว้เช่นไรก็ให้นำตัวแปรนั้นมาใช้ครับ

:o ต้องขออภัยสำหรับ Code ด้านบน ผมเขียนตกไปหรือบังเอิญไปลบ ที่ถูกต้องจะเป็นด้านล่างครับ

Set tBook = Workbooks.Open Filename:=bookpath & bookname

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 10:58 pm
by sakajohn

Code: Select all

bookpath = "D:\Downloads\"
bookname = "Book1.xlsm"
Set tBook = Workbooks.Open Filename:=parh & bookname
Workbooks("Book1").Worksheets("Sheet2").Range("C1:C10").Value = _
    Workbooks("Book2").Worksheets("Sheet1").Range("A1:A10").Value
tBook.Close , True
bookpath = "D:\Downloads\" คือ ไฟล์ต้องอยู่ที่ ไดรฟ์ D folder Download
bookname = "Book1.xlsm" คือ ชื่อไฟล์ ที่อยู่ใน ไดรฟ์ D โฟลเดอร์ Download
Set tBook = Workbooks.Open Filename:=bookpath & bookname กำหนดค่า tbook คือเปิดไฟล์ชื่อ Book1.xlsm ซึ่งอยู่ที่ โฟลเดอร์ Download ในไดรฟ์ D จากนั้นถ้าค่าที่ cell C1ถึง C10 ที่ Sheet 2 ของBook 2 มีการเปลี่ยนแปลง ก็ให้ค่า ที่Cell A1ถึง A10 ที่ sheet 1 ของ Book 1 มีค่าเหมือนกัน
tBook.Close , Trueจากนั้นก็ปิด Book1 ผมเข้าใจถูกต้องใช่ไหมครับ
ผมวางcodeไว้ที่ Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) ที่ sheet 2 ของ book 2 ถูกต้องไหมครับ ถ้าใช่ทำไมถึงerror ครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 11:07 pm
by snasui
:o แก้ไข Code ใหม่ตามด้านล่าง สังเกตการนำตัวแปรไปใช้ครับ

Code: Select all

Dim boookpath As String, bookname As String, tBook As Workbook
bookpath = "C:\Downloads\"
bookname = "Book1.xlsx"
Set tBook = Workbooks.Open Filename:=bookpath & bookname
tBook.Worksheets("Sheet2").Range("C1:C10").Value = _
    Workbooks("Book2").Worksheets("Sheet1").Range("A1:A10").Value
tBook.Close , True

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 11:20 pm
by sakajohn
ทำไมแค่เอาcodeไปวาง Set tBook = Workbooks.Open Filename:=bookpath & bookname ก็จะเป็นตัวสีแดงครับ พอคีย์ค่าในเซล C1:C10 ฟ้อง compile error : Syntax error

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 11:22 pm
by snasui
:D กรณี Copy ไปวางแล้วเป็นตัวอักษรสีแดงให้คีย์ลงไปเองแทนการคัดลอกไปวางครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 11:34 pm
by sakajohn
Set tBook = Workbooks.Open Filename:=bookpath & bookname พอพิมพ์ถึงตรงนี้ จะไปไฮไลท์ ตรงคำว่า filename error expected; end of statement ครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Thu Nov 24, 2016 11:43 pm
by sakajohn

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
Dim bookpath As String, bookname As String, tBook As Workbook
bookpath = "C\Downloads\"
bookname = "Book1.xlsx"
Set tbook = workbooks.Open filename:=bookpath & bookname
tBook.Worksheets("Sheet2").Range("C1:C10").Value = _
     Workbooks("book2").Worksheets("sheet1").Range("A1:A10").Value
tBook.Close , True
End Sub
ตอนนี้พิมพ์ด้วยตัวเองทั้งหมด ก็ฟ้อง Syntax Error แล้วขึ้นสีแดงเหมือนเดิมครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Fri Nov 25, 2016 5:27 pm
by sakajohn
ตอนนี้ผมปรับ codeใหม่ครับ ใช่งานได้แต่ยังไม่สมบูรณ์ครับ คือเรายังต้องมาคลิ๊ก cell ใน sheet M01 ของ workbook plannew codeถึงจะทำงานครับ ถ้าเราจะให้มันทำงานเมื่อเราป้อนค่าเข้าไปเลยจะต้องแก้ไขcodeอย่างไรครับ

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Workbooks.Open Filename:="G:\Plan\planning.xlsm"
Workbooks("planning.xlsm").Worksheets("M01").Range("A4:Q4000").Value = Workbooks("plannew.xlsm").Worksheets("M01").Range("A4:Q4000").Value
ActiveWindow.Close True
End Sub

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Fri Nov 25, 2016 6:04 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
Dim bookpath As String, bookname As String, tBook As Workbook
bookpath = "C\Downloads\"
bookname = "Book1.xlsx"
Set tbook = workbooks.Open (filename:=bookpath & bookname) ' Add "(" and ")"
tBook.Worksheets("Sheet2").Range("C1:C10").Value = _
     Workbooks("book2").Worksheets("sheet1").Range("A1:A10").Value
tBook.Close , True
End Sub
Code นี้ทำงานเมื่อมีการแก้ไขเซลล์ใด ๆ ในชีตที่วาง Code ข้างต้นนี้ครับ

Re: Copy Sheet1 ไป Sheet2 แบบข้าม workbook แบบrealtime

Posted: Fri Nov 25, 2016 10:51 pm
by sakajohn
อาจารย์ครับผมลองใส่ code ของอาจารย์แล้วครับbookpath = "C:\Downloads\" เพิ่ม : จากนั้นพอเราแก้ที่ Book 2 sheet 2 cell c1:c10 มันจะเปิด book 1 แล้วก็ขึ้นกล่องโต้ตอบว่าเราจะ Save wookbook 1 ไหม แต่มันไม่มีค่าอยู่ใน cell A1:A10 เลยครับ เป็น sheet เปล่า