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 เลย
ปรับเป็น

Code: Select all

Range("a1") = Now()
ก็เหมือนเดิมครับ โปรแกรมไม่อัพเดท 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 เลย
ปรับเป็น

Code: Select all

Range("a1") = Now()
ก็เหมือนเดิมครับ โปรแกรมไม่อัพเดท 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 ดูเลยว่าผลลัพธ์​เป็นอย่างไรครับ​ เป็นการศึกษา​ครับ

ครับ ยังไงก็ขอบคุณมากครับ