Page 2 of 2
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 11:36 am
by lnongkungl
puriwutpokin wrote:lnongkungl wrote:ขอบคุณครับ puriwutpokin ได้แล้วครับ
แต่มีข้อสงสัยอีกอย่างครับ
คือผมเขียนโค๊ดไว้แบบนี้ครับ
Code: Select all
Private Sub Worksheet_open()
Range("formtime") = Now()
End Sub
แต่ทำไมเมื่อปิดแล้วเปิดใหม่ formtime ไม่อัพเดทเวลาเป็นปัจจุบันครับ ต้องไปกด run ถึงจะอัพเดท ทั้งๆที่ ผมเขียนไว้ใน sheet เลย
ปรับเป็น
ก็เหมือนเดิมครับ โปรแกรมไม่อัพเดท auto ตอนเปิดไฟล์ครับ คือต้องไปกด run ถึงจะอัพเดท
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 11:57 am
by logic
ใส่ code ไว้ตามภาพแนบดูแล้วทดลองปิดเปิดใหม่ครับ

Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 12:00 pm
by puriwutpokin
lnongkungl wrote:puriwutpokin wrote:lnongkungl wrote:ขอบคุณครับ puriwutpokin ได้แล้วครับ
แต่มีข้อสงสัยอีกอย่างครับ
คือผมเขียนโค๊ดไว้แบบนี้ครับ
Code: Select all
Private Sub Worksheet_open()
Range("formtime") = Now()
End Sub
แต่ทำไมเมื่อปิดแล้วเปิดใหม่ formtime ไม่อัพเดทเวลาเป็นปัจจุบันครับ ต้องไปกด run ถึงจะอัพเดท ทั้งๆที่ ผมเขียนไว้ใน sheet เลย
ปรับเป็น
ก็เหมือนเดิมครับ โปรแกรมไม่อัพเดท auto ตอนเปิดไฟล์ครับ คือต้องไปกด run ถึงจะอัพเดท
ปรับเป็น
Code: Select all
Private Sub Workbook_Open()
Sheets("รับเข้า").Range("a1") = Now()
End Sub
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 1:16 pm
by lnongkungl
ได้แล้วครับ ขอบคุณทั้งสองท่านครับ
puriwutpokin
logic
แล้วจากโค๊ดนี้
Code: Select all
Public Sub Save()
Dim source As Range
Dim Lr As Integer
Dim mySheet As String
Application.ScreenUpdating = False
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
Workbooks.Open "C:\Users\it-support.cmk\Desktop\testmarcro\สรุปยอดรับ.xlsx"
source.Copy
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
mySheet = Format(.Range("a1").Value, "mmm")
End With
Windows("สรุปยอดรับ.xlsx").Activate
Worksheets(mySheet).Activate
Lr = Range("b" & Rows.Count).End(xlUp).Row + 1
Range("b" & Lr).PasteSpecial xlPasteValues
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
Range("b" & Lr).Offset(0, -1).Resize(LL, 1).Value = .Range("a1").Value
End With
End With
Application.CutCopyMode = False
Workbooks("รับเข้า.xlsm").Activate
Application.ScreenUpdating = True
End Sub
รบกวนอธิบาย บรรทัดนี้ให้ทีครับ
Code: Select all
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
ผมไม่ทราบครับ สงสัยว่า
1.ตัวแปร LL ไม่ต้องประกาศก็ได้หรอครับ กำหนดขึ้นได้มาเลย
2.ทำไมต้อง Resize(LL,4) ด้วยครับ
ไขข้อข้องใจให้ทีครับ ขอบคุณครับ
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 1:41 pm
by puriwutpokin
lnongkungl wrote:ได้แล้วครับ ขอบคุณทั้งสองท่านครับ
puriwutpokin
logic
แล้วจากโค๊ดนี้
Code: Select all
Public Sub Save()
Dim source As Range
Dim Lr As Integer
Dim mySheet As String
Application.ScreenUpdating = False
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
Workbooks.Open "C:\Users\it-support.cmk\Desktop\testmarcro\สรุปยอดรับ.xlsx"
source.Copy
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
mySheet = Format(.Range("a1").Value, "mmm")
End With
Windows("สรุปยอดรับ.xlsx").Activate
Worksheets(mySheet).Activate
Lr = Range("b" & Rows.Count).End(xlUp).Row + 1
Range("b" & Lr).PasteSpecial xlPasteValues
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
Range("b" & Lr).Offset(0, -1).Resize(LL, 1).Value = .Range("a1").Value
End With
End With
Application.CutCopyMode = False
Workbooks("รับเข้า.xlsm").Activate
Application.ScreenUpdating = True
End Sub
รบกวนอธิบาย บรรทัดนี้ให้ทีครับ
Code: Select all
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
ผมไม่ทราบครับ สงสัยว่า
1.ตัวแปร LL ไม่ต้องประกาศก็ได้หรอครับ กำหนดขึ้นได้มาเลย
2.ทำไมต้อง Resize(LL,4) ด้วยครับ
ไขข้อข้องใจให้ทีครับ ขอบคุณครับ
เท่าที่ทราบนะครับ ถ้าค่านั้นมีค่าเดียว ไม่จำเป็นต้องประกาศตัวแปร ก็ได้ เช่น For i = 1 TO 10 , i ก็ไม่จำเป็นต้องประกาศครับ แต่ถ้าไม่อยากให้มีการเข้าใจผิดในการหาค่าตัวแปร ควรประกาศเป็น Dim LL As Long ตามนี้ครับ
ส่วน Resize ไว้สำหรับยืดช่วงที่ต้องการครับ ในที่นี้ ยืดจาก LL ไป 4 คอลัมน์ครับ
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 4:48 pm
by lnongkungl
puriwutpokin wrote:lnongkungl wrote:ได้แล้วครับ ขอบคุณทั้งสองท่านครับ
puriwutpokin
logic
แล้วจากโค๊ดนี้
Code: Select all
Public Sub Save()
Dim source As Range
Dim Lr As Integer
Dim mySheet As String
Application.ScreenUpdating = False
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
Workbooks.Open "C:\Users\it-support.cmk\Desktop\testmarcro\สรุปยอดรับ.xlsx"
source.Copy
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
mySheet = Format(.Range("a1").Value, "mmm")
End With
Windows("สรุปยอดรับ.xlsx").Activate
Worksheets(mySheet).Activate
Lr = Range("b" & Rows.Count).End(xlUp).Row + 1
Range("b" & Lr).PasteSpecial xlPasteValues
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
Range("b" & Lr).Offset(0, -1).Resize(LL, 1).Value = .Range("a1").Value
End With
End With
Application.CutCopyMode = False
Workbooks("รับเข้า.xlsm").Activate
Application.ScreenUpdating = True
End Sub
รบกวนอธิบาย บรรทัดนี้ให้ทีครับ
Code: Select all
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
ผมไม่ทราบครับ สงสัยว่า
1.ตัวแปร LL ไม่ต้องประกาศก็ได้หรอครับ กำหนดขึ้นได้มาเลย
2.ทำไมต้อง Resize(LL,4) ด้วยครับ
ไขข้อข้องใจให้ทีครับ ขอบคุณครับ
เท่าที่ทราบนะครับ ถ้าค่านั้นมีค่าเดียว ไม่จำเป็นต้องประกาศตัวแปร ก็ได้ เช่น For i = 1 TO 10 , i ก็ไม่จำเป็นต้องประกาศครับ แต่ถ้าไม่อยากให้มีการเข้าใจผิดในการหาค่าตัวแปร ควรประกาศเป็น Dim LL As Long ตามนี้ครับ
ส่วน Resize ไว้สำหรับยืดช่วงที่ต้องการครับ ในที่นี้ ยืดจาก LL ไป 4 คอลัมน์ครับ
อ๋อ เข้าใจละครับ เพราะผมไม่เคยใช้ Resize เลยเข้าใจว่าเป็นเรื่องของขนาด
งั้นก็ความหมายเดียวกับ code นี้หรือปล่าวครับ ถ้าผมเข้าใจไม่ผิดนะ
Code: Select all
Set co = .Range("a3:a41", .Range("d" & .Rows.Count).End(xlUp))
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Tue Nov 21, 2017 6:14 pm
by puriwutpokin
lnongkungl wrote:puriwutpokin wrote:lnongkungl wrote:ได้แล้วครับ ขอบคุณทั้งสองท่านครับ
puriwutpokin
logic
แล้วจากโค๊ดนี้
Code: Select all
Public Sub Save()
Dim source As Range
Dim Lr As Integer
Dim mySheet As String
Application.ScreenUpdating = False
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
Workbooks.Open "C:\Users\it-support.cmk\Desktop\testmarcro\สรุปยอดรับ.xlsx"
source.Copy
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
mySheet = Format(.Range("a1").Value, "mmm")
End With
Windows("สรุปยอดรับ.xlsx").Activate
Worksheets(mySheet).Activate
Lr = Range("b" & Rows.Count).End(xlUp).Row + 1
Range("b" & Lr).PasteSpecial xlPasteValues
With Workbooks("รับเข้า.xlsm").Sheets("รับเข้า")
Range("b" & Lr).Offset(0, -1).Resize(LL, 1).Value = .Range("a1").Value
End With
End With
Application.CutCopyMode = False
Workbooks("รับเข้า.xlsm").Activate
Application.ScreenUpdating = True
End Sub
รบกวนอธิบาย บรรทัดนี้ให้ทีครับ
Code: Select all
LL = Application.CountIf(.Range("a3:a41"), "<>")
Set source = .Range("a3", .Range("a" & .Rows.Count).End(xlUp)).Resize(LL, 4)
ผมไม่ทราบครับ สงสัยว่า
1.ตัวแปร LL ไม่ต้องประกาศก็ได้หรอครับ กำหนดขึ้นได้มาเลย
2.ทำไมต้อง Resize(LL,4) ด้วยครับ
ไขข้อข้องใจให้ทีครับ ขอบคุณครับ
เท่าที่ทราบนะครับ ถ้าค่านั้นมีค่าเดียว ไม่จำเป็นต้องประกาศตัวแปร ก็ได้ เช่น For i = 1 TO 10 , i ก็ไม่จำเป็นต้องประกาศครับ แต่ถ้าไม่อยากให้มีการเข้าใจผิดในการหาค่าตัวแปร ควรประกาศเป็น Dim LL As Long ตามนี้ครับ
ส่วน Resize ไว้สำหรับยืดช่วงที่ต้องการครับ ในที่นี้ ยืดจาก LL ไป 4 คอลัมน์ครับ
อ๋อ เข้าใจละครับ เพราะผมไม่เคยใช้ Resize เลยเข้าใจว่าเป็นเรื่องของขนาด
งั้นก็ความหมายเดียวกับ code นี้หรือปล่าวครับ ถ้าผมเข้าใจไม่ผิดนะ
Code: Select all
Set co = .Range("a3:a41", .Range("d" & .Rows.Count).End(xlUp))
คล้ายๆครับ ลองtest ดูเลยว่าผลลัพธ์เป็นอย่างไรครับ เป็นการศึกษาครับ
Re: รบกวนสอบถาม vba ปุ่ม save แล้วส่งข้อมูลข้ามไฟล์ครับ
Posted: Wed Nov 22, 2017 8:44 am
by lnongkungl
puriwutpokin wrote:lnongkungl wrote:puriwutpokin wrote:
เท่าที่ทราบนะครับ ถ้าค่านั้นมีค่าเดียว ไม่จำเป็นต้องประกาศตัวแปร ก็ได้ เช่น For i = 1 TO 10 , i ก็ไม่จำเป็นต้องประกาศครับ แต่ถ้าไม่อยากให้มีการเข้าใจผิดในการหาค่าตัวแปร ควรประกาศเป็น Dim LL As Long ตามนี้ครับ
ส่วน Resize ไว้สำหรับยืดช่วงที่ต้องการครับ ในที่นี้ ยืดจาก LL ไป 4 คอลัมน์ครับ
อ๋อ เข้าใจละครับ เพราะผมไม่เคยใช้ Resize เลยเข้าใจว่าเป็นเรื่องของขนาด
งั้นก็ความหมายเดียวกับ code นี้หรือปล่าวครับ ถ้าผมเข้าใจไม่ผิดนะ
Code: Select all
Set co = .Range("a3:a41", .Range("d" & .Rows.Count).End(xlUp))
คล้ายๆครับ ลองtest ดูเลยว่าผลลัพธ์เป็นอย่างไรครับ เป็นการศึกษาครับ
ครับ ยังไงก็ขอบคุณมากครับ