:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#15

by DhitiBank » Mon Jan 27, 2014 6:14 pm

อ๋อ ถ้าอย่างนั้น Form control ก็เหมาะกับคนเพิ่งหัดใหม่ๆ อย่างผมมากกว่าสินะครับ

ขอบคุณอาจารย์มากครับ

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#14

by snasui » Mon Jan 27, 2014 6:07 pm

:D แล้วแต่ความประสงค์ครับ

สำหรับ ActiveX Control มี Propeties ให้จัดการหลากหลาย เหมือนการใช้ Control ใน UserForm เมื่อ Double Click จะเข้าหน้าจอให้เขียน Code และ Code นั้นจะอยู่ในชีทที่ Control วางอยู่

ส่วน Form Control เมื่อวาดเสร็จและปล่อยเมาส์จะเข้าหน้าจอให้ Record Macro หรือ เขียน VBA มี Properties ให้กำหนดได้น้อยกว่า มีสภาพความเข้ากันได้กับ Worksheet ได้มากกว่า เลือกกำหนดว่าให้ Run Macro ใดในภายหลังได้

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#13

by DhitiBank » Mon Jan 27, 2014 5:57 pm

ขอบคุณมากครับอาจารย์

ActiveX control เอาไว้ใช้กรณีไหนหรือครับอาจารย์

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#12

by snasui » Mon Jan 27, 2014 5:38 pm

:D วาด Form control แล้ว Assign Macro เข้าไปใหม่ครับ สำหรับที่ใช้อยู่นั้นเรียกว่า ActiveX control

สำหรับการใส่ Password ดูตัวอย่างที่นี่ครับ viewtopic.php?f=3&t=2385#p15592

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#11

by DhitiBank » Mon Jan 27, 2014 12:55 pm

ขอบคุณมากๆ ครับ อาจารย์ จะลองดูครับ

------------edit------------

อาจารย์ครับ ผมมี 2 เรื่องครับ

1 คือ ผมลบโค้ด vba ในชีท 1Collect ออกหมดแล้ว แล้วคัดลอกโค้ดของอาจารย์ไปวางไว้ใน Module1
พอผมลองกดที่ปุ่มในชีท 1Collect แล้ว นิ่งเลยครับ

ขอถามแบบโง่ๆ ว่าผมต้องอ้างอิง Module ให้กับปุ่มอย่างไรครับ :oops:

2 ถ้าผมตั้งรหัสล็อกชีทเป็น 111
ตรงคำสั่ง Unprotect และ คำสั่ง Protect ผมจะต้องปรับโค้ดอย่างไรครับ

ขอบพระคุณมากครับ

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#10

by snasui » Mon Jan 27, 2014 12:50 pm

:D ลองปรับ Code เป็นตามด้านล่าง โดยวาง Code ใน Module ปกติครับ

Code: Select all

Private Sub Send_Data_Click()
    Dim rngData As Range
    Dim intChoose As Integer
    Dim iCount As Integer
    
    iCount = Application.CountIf(Sheets("1Collect").Range("a3:a1000"), "?*")
    Set rngData = Sheets("1Collect").Range("A3:M" & iCount)
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    intChoose = MsgBox("ทำการส่งข้อมูลไปที่แผ่นงาน Final", vbOKCancel + vbInformation)
    
    If intChoose = 1 Then
        Sheets("Final").Select
        ActiveSheet.Unprotect
        rngData.Copy
        ActiveSheet.Range("A1048576").Select
        Selection.End(xlUp).Offset(1, 0).Select
        Selection.PasteSpecial xlPasteValues
        ActiveSheet.Range("B2").Select
        ActiveSheet.Protect AllowFiltering:=True
        Sheets("1Collect").Select
        ActiveSheet.Range("P1").Select
    End If
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox "ส่งข้อมูลเรียบร้อย"
 
End Sub

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#9

by DhitiBank » Sun Jan 26, 2014 11:19 pm

อาจารย์ครับ รบกวนหน่อยครับ

Code: Select all

Private Sub Send_Data_Click()
    Dim rngData As Range
    Dim intChoose As Integer
    Set rngData = Sheets("1Collect").Range("A3:M200")
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    intChoose = MsgBox("ทำการส่งข้อมูลไปที่แผ่นงาน Final", vbOKCancel + vbInformation)
    
    If intChoose = 1 Then
        rngData.Select
        Selection.Copy
        Sheets("Final").Select
            ActiveSheet.Unprotect
            ActiveSheet.Range("A1048576").Select
            Selection.End(xlUp).Offset(1, 0).Select
            Selection.PasteSpecial xlPasteValues
            ActiveSheet.Range("B2").Select
            ActiveSheet.Protect AllowFiltering:=True
        Sheets("1Collect").Select
            ActiveSheet.Range("P1").Select
    End If
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    MsgBox "ส่งข้อมูลเรียบร้อย"
 
End Sub
ผมพยายามเขียนโค้ดคัดลอกข้อมูลจากชีท "1Collect" ไปไว้ที่ชีท "Final" พบปัญหาคือ

1 ทุกๆ ครั้งที่กดปุ่มรันคำสั่งครั้งที่ 2 จะเกิด error ขึ้นที่บรรทัด

Code: Select all

Selection.PasteSpecial xlPasteValues

2 ข้อมูลที่ส่งไปมีบางแถวที่เป็นค่าว่าง (เนื่องจากใส่สูตรว่าถ้าไม่มีข้อมูล ให้แสดงค่า "" แทน) เวลาคัดลอกไป แถวที่ว่างก็ไปด้วย ข้อมูลเลยไม่เรียงต่อกัน

ผมต้องปรับโค้ดอย่างไรครับ

ขอบพระคุณครับ
Attachments
Test.xlsm
(165.53 KiB) Downloaded 28 times

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#8

by DhitiBank » Sat Jan 25, 2014 2:37 pm

ขอบคุณมากๆ ครับอาจารย์ ^^

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#7

by snasui » Sat Jan 25, 2014 2:14 pm

:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

...
Application.Calculation = xlCalculationManual
If stgChoose = 1 Then
     rngCount.ClearContents
     rngCstCode.ClearContents
End If
Application.Calculation = xlCalculationAutomatic
...

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#6

by DhitiBank » Sat Jan 25, 2014 2:03 pm

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

Code: Select all

Private Sub ClearData_Click()
    Dim stgChoose As Integer
    Dim rngCount As Range
    Dim rngCstCode As Range
    Set rngCount = Sheets("record").Range("A2:EJ2")
    Set rngCstCode = Sheets("record").Range("A4:EJ800")
    
    stgChoose = MsgBox("คุณแน่ใจหรือว่าจะลบข้อมูลในชีท Record", vbOKCancel + 64)
    
    If stgChoose = 1 Then
        rngCount.ClearContents
        rngCstCode.ClearContents
    End If
    MsgBox "ล้างข้อมูลในชีท 'Record' เรียบร้อยแล้ว"
End Sub
ขอบคุณครับ
Attachments
TEST.xlsm
(174.45 KiB) Downloaded 17 times

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#5

by DhitiBank » Wed Jan 22, 2014 12:46 am

:o อ้อ ขอบคุณมากครับอาจารย์ มองเห็นทางไปต่อเสียที :thup:

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#4

by snasui » Tue Jan 21, 2014 5:37 pm

:D ให้คัดลอก Code ไปวางที่ Module1 แล้วลบ Code ที่ชีท Cal ทิ้งไปครับ

การที่เกิด Error เนื่องจากเป็นการกระทำข้ามชีทโดย Code ไม่ได้วางอยู่ใน Module

ปกติการอ้าง Range หรือ Cells ในไฟล์เดียวกัน ควรจะอ้าง Parent มันด้วยเพื่อป้องกัน Code แสดง Error ที่ไม่พึงประสงค์ เช่น

เดิม Range("I2:O2") เราควรเขียนเป็น Sheets("Sheet1").Range("I2:O2") ครับ

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#3

by DhitiBank » Tue Jan 21, 2014 3:59 pm

ขอบคุณครับอาจารย์

ผมลองกด F8 ดูแล้ว Run จนถึงบรรทัด

Code: Select all

Range("A2").Select
ผ่านไปได้ด้วยดีครับ แต่พอจะ Run บรรทัด

Code: Select all

Selection.PasteSpecial Paste:=xlPasteValues
excel ฟ้องว่า

Run-time error '1004'
Application-defined or object-defined error

ข้อความแบบนี้หมายถึงอะไรครับอาจารย์

Re: VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#2

by snasui » Tue Jan 21, 2014 3:39 pm

:D ผมทดลองตาม Code ที่แนบมาไม่ติดปัญหาใด ลองกดแป้น F8 เพื่อ Run ทีละ Step แล้วแจ้งมาว่าติดที่บรรทัดใดครับ

VBA ครับ การคัดลอกข้อมูลไปวางไว้ในตำแหน่งที่ต้องการ

#1

by DhitiBank » Tue Jan 21, 2014 1:29 pm

สวัสดีครับอาจารย์และเพื่อนๆ

ผมติดปัญหาการเขียนโค้ด VBA คือจากไฟล์แนบ ชีท Cal สิ่งที่ต้องการคือเมื่อกดปุ่ม SKU1 แล้ว โปรแกรมจะคัดลอกข้อมูลในชีท Cal คอลัมน์ B - H ตั้งแต่แถวที่ 2 ลงไปทุกค่า เอาไปวางไว้ในชีท Record คอลัมน์ A - G ตั้งแต่แถวที่ 2 ลงไป

ลองเขียนโค้ดมาดังนี้ครับ

Code: Select all

Private Sub CommandButton1_Click()

    Range("B2:H2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    
    Sheets("Record").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues
    Sheets("Cal").Select
    Application.CutCopyMode = False
End Sub
แต่หลังจากสั่งรัน โปรแกรมฟ้องว่า Run-time error 1004
ผมต้องปรับโค้ดอย่างไรครับ (มือใหม่หัดเขียน VBAครับ)

ขอบคุณครับ
Attachments
ST06 SKU rev02.xlsm
(51.12 KiB) Downloaded 29 times

Top