Page 1 of 1

สอบถามการนับ sheets ของ VBA

Posted: Wed Jan 03, 2018 2:00 pm
by titus
สอบถามการนับ 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 ไปแล้ว

Re: สอบถามการนับ sheets ของ VBA

Posted: Wed Jan 03, 2018 2:22 pm
by lnongkungl
ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ

Re: สอบถามการนับ sheets ของ VBA

Posted: Wed Jan 03, 2018 2:30 pm
by titus
lnongkungl wrote:ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ

แล้วถ้าเราแทนค่า ชื่อในตัวแปรไปเเล้ว จริงๆ น่าจะไปเลือกชีทตามชื่อตัวแปรที่เราแทนค่าไป

ถ้าชื่อชีทเป็นอักษร ไม่งงแย่เลยหรอครับ

Re: สอบถามการนับ sheets ของ VBA

Posted: Wed Jan 03, 2018 4:46 pm
by eyepop99
titus wrote:
lnongkungl wrote:ที่หน้า VBAProject จะมีเลข sheet อยู่ครับ ผมก็เคยพลาดหลายทีละ สลับ sheet ไปมาๆ แล้วเขียน code ใส่หน้า sheet ผิด
ปัจจุบัน ก็ดูตรงนี้ เอาครับ

แล้วถ้าเราแทนค่า ชื่อในตัวแปรไปเเล้ว จริงๆ น่าจะไปเลือกชีทตามชื่อตัวแปรที่เราแทนค่าไป

ถ้าชื่อชีทเป็นอักษร ไม่งงแย่เลยหรอครับ
โดยปกติแล้วการตั้งชื่อชีต จะตั้งชื่อเป็นชื่อที่มีนัยยะสำคัญ เพื่อป้องการ การงงชื่อชีต
แต่ถ้าเป็นจำนวนมากและลูป ดูชื่อชีตได้จาก VBAproject(จะอยู่หน้าชื่อชีต ตามคอมเมนท์ที่ 2 ) ครับ

Re: สอบถามการนับ sheets ของ VBA

Posted: Wed Jan 03, 2018 5:21 pm
by titus
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

Re: สอบถามการนับ sheets ของ VBA

Posted: Thu Jan 04, 2018 9:20 am
by logic
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