snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
titus
Member
Posts: 89 Joined: Sun Aug 24, 2014 1:34 pm
#1
Post
by titus » Wed Jan 03, 2018 2:00 pm
สอบถามการนับ sheets ของ VBA
VBA จะนับ sheets ยังไง ครับ
อย่างเช่นภาพ
มีsheet 1-15 และ sheet DATA ,START
Code: Select all
Dim i as integer
Head8_h_1()
Sheets("START").Select
Range("H2").Select
i = ActiveCell.Value
Range("B6:AE21").Select
Selection.Copy
Sheets(i).Select
Range("E121").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("START").Select
End Sub
ถ้าเราเอา 1-15 ไว้ข้างหน้าชีท สามารถรันมาโครได้
แต่ถ้าเราเอา ชีท DATA หรือ START ไว้ข้างหน้าจะ ERROR
ก็เลยงงวิธีนับ ของ VB ครับว่านับยังไงแน่ เพราะ เราเเทนค่า i ไปแล้ว
Attachments
1.png (15.25 KiB) Viewed 163 times
lnongkungl
Member
Posts: 92 Joined: Tue Nov 14, 2017 11:04 am
Excel Ver: 2013
#2
Post
by lnongkungl » Wed Jan 03, 2018 2:22 pm
ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ
Attachments
1.jpg (29.29 KiB) Viewed 158 times
titus
Member
Posts: 89 Joined: Sun Aug 24, 2014 1:34 pm
#3
Post
by titus » Wed Jan 03, 2018 2:30 pm
lnongkungl wrote: ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ
แล้วถ้าเราแทนค่า ชื่อในตัวแปรไปเเล้ว จริงๆ น่าจะไปเลือกชีทตามชื่อตัวแปรที่เราแทนค่าไป
ถ้าชื่อชีทเป็นอักษร ไม่งงแย่เลยหรอครับ
eyepop99
Member
Posts: 127 Joined: Fri Sep 01, 2017 3:19 pm
Excel Ver: 365,2019,2010
#4
Post
by eyepop99 » Wed Jan 03, 2018 4:46 pm
titus wrote: lnongkungl wrote: ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ
แล้วถ้าเราแทนค่า ชื่อในตัวแปรไปเเล้ว จริงๆ น่าจะไปเลือกชีทตามชื่อตัวแปรที่เราแทนค่าไป
ถ้าชื่อชีทเป็นอักษร ไม่งงแย่เลยหรอครับ
โดยปกติแล้วการตั้งชื่อชีต จะตั้งชื่อเป็นชื่อที่มีนัยยะสำคัญ เพื่อป้องการ การงงชื่อชีต
แต่ถ้าเป็นจำนวนมากและลูป ดูชื่อชีตได้จาก VBAproject(จะอยู่หน้าชื่อชีต ตามคอมเมนท์ที่ 2 ) ครับ
titus
Member
Posts: 89 Joined: Sun Aug 24, 2014 1:34 pm
#5
Post
by titus » Wed Jan 03, 2018 5:21 pm
eyepop99 wrote: titus wrote: lnongkungl wrote: ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ
แล้วถ้าเราแทนค่า ชื่อในตัวแปรไปเเล้ว จริงๆ น่าจะไปเลือกชีทตามชื่อตัวแปรที่เราแทนค่าไป
ถ้าชื่อชีทเป็นอักษร ไม่งงแย่เลยหรอครับ
โดยปกติแล้วการตั้งชื่อชีต จะตั้งชื่อเป็นชื่อที่มีนัยยะสำคัญ เพื่อป้องการ การงงชื่อชีต
แต่ถ้าเป็นจำนวนมากและลูป ดูชื่อชีตได้จาก VBAproject(จะอยู่หน้าชื่อชีต ตามคอมเมนท์ที่ 2 ) ครับ
ขอบคุณครับ
ตอนนี้ ผมมี ชีทชื่อที่เป็นตัวเลขและอักษรรวมกัน ประมาณ10กว่าชีท
ผมจะครอบ for i to xx ยังไงดีครับ ผมต้องการเปลี่ยน 211x109 เป็น 104x60x30 หรือ 208x107
Code: Select all
Sub Report()
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1 As String
Sheets(211x109).Select
Range("C1").Select
Do While Not IsEmpty(ActiveCell.Value)
name1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
size1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
lacq1 = ActiveCell.Value
ActiveCell.Offset(0, 1).Select
type1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
sheet = ActiveCell.Value
ActiveCell.Offset(0, -4).Select
scrap = ActiveCell.Value
ActiveCell.Offset(0, -1).Select
full1 = ActiveCell.Value
ActiveCell.Offset(-300, 0).Select
ActiveCell.Offset(0, 11).Select
myaddress = ActiveCell.Address
Sheets("ÃÒ§ҹStock").Select
Range("B376").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = name1
ActiveCell.Offset(0, 1).Value = size1
ActiveCell.Offset(0, 2).Value = lacq1
ActiveCell.Offset(0, 3).Value = full1
ActiveCell.Offset(0, 4).Value = scrap
ActiveCell.Offset(0, 6).Value = sheet
ActiveCell.Offset(0, 14).Value = type1
Sheets(211x109).Select
Range(myaddress).Select
Loop
End Sub
logic
Gold
Posts: 1511 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#6
Post
by logic » Thu Jan 04, 2018 9:20 am
titus wrote: สอบถามการนับ sheets ของ VBA
VBA จะนับ sheets ยังไง ครับ
อย่างเช่นภาพ
มีsheet 1-15 และ sheet DATA ,START
Code: Select all
Dim i as integer
Head8_h_1()
Sheets("START").Select
Range("H2").Select
i = ActiveCell.Value
Range("B6:AE21").Select
Selection.Copy
Sheets(i).Select
Range("E121").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("START").Select
End Sub
ถ้าเราเอา 1-15 ไว้ข้างหน้าชีท สามารถรันมาโครได้
แต่ถ้าเราเอา ชีท DATA หรือ START ไว้ข้างหน้าจะ ERROR
ก็เลยงงวิธีนับ ของ VB ครับว่านับยังไงแน่ เพราะ เราเเทนค่า i ไปแล้ว
ลองดูครับ
นับชีตเฉพาะที่มีชื่อเป็นตัวเลขว่ามีกี่ชีต
Code: Select all
Dim i As Integer, s As Worksheet
For Each s In Worksheets
If IsNumeric(s.Name) Then
i = i + 1
End If
Next s