Page 1 of 1

VBA add sheet + rename

Posted: Mon Feb 18, 2019 11:13 am
by Supachok
โจทย์คือ เพิ่มชีสและ rename ตาม Sheets(1) columns Bไปเรื่อยๆ
ช่วยดู code ที่ครับ

Code: Select all

Sub xx()
Dim x As Integer
Sheets.Add , after:=Sheets(1)
For x = 2 To Sheets.Count
Sheets(1).Activate
Cells(x, 1).Value = Sheets(x).Name
Sheets(x).Name = Cells(x, 2).Value
Sheets.Add , after:=Sheets(x)
Sheets(1).Activate

Next x

End Sub

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 1:44 pm
by puriwutpokin
ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
End Sub

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 2:26 pm
by Supachok
Code ที่ปรับแล้ว

Code: Select all

Sub xx()

Dim ws As Worksheet

For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
    Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
    
        If Sheets(1).Range("B" & x).Value = "" Then
        MsgBox "found empty cells"
        Sheets(1).Range("B" & x).Value = "found empty cells" & x
        End If

    ws.Name = Sheets(1).Range("B" & x).Value
    Sheets(1).Activate

Next x
    
    
End Sub

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 2:27 pm
by Supachok
puriwutpokin wrote: Mon Feb 18, 2019 1:44 pm ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
End Sub
ผมรบกวนขอ Code ลบ sheet ทั้งหมด ยกเว้น sheets(1)
ช่วยแนะนำที่ครับ

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 3:01 pm
by puriwutpokin
ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
        ws.Delete
        End If
        Next ws
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
    Application.DisplayAlerts = True
End Sub

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 4:01 pm
by Supachok
puriwutpokin wrote: Mon Feb 18, 2019 3:01 pm ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
        ws.Delete
        End If
        Next ws
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
    Application.DisplayAlerts = True
End Sub

Code ใช้ได้ต้องการครับ

แต่ไม่เข้าใจ code ตัวแปร
For Each ws In Worksheets = nothing
If ws.Name <> "Sheet1" Then = ชื่อsheet

สงสัยว่า VBA รู้ได้อย่างไรว่า ws.Name หมายถึงชื่อ sheet


'Dim ws As Worksheet
'Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
ws.delete
'End If
'Next ws

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 4:20 pm
by puriwutpokin
Supachok wrote: Mon Feb 18, 2019 4:01 pm
puriwutpokin wrote: Mon Feb 18, 2019 3:01 pm ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
        ws.Delete
        End If
        Next ws
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
    Application.DisplayAlerts = True
End Sub

Code ใช้ได้ต้องการครับ

แต่ไม่เข้าใจ code ตัวแปร
For Each ws In Worksheets = nothing
If ws.Name <> "Sheet1" Then = ชื่อsheet

สงสัยว่า VBA รู้ได้อย่างไรว่า ws.Name หมายถึงชื่อ sheet


'Dim ws As Worksheet
'Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
ws.delete
'End If
'Next ws
ตรงประกาศตัวแปร Dim ws As Worksheet ว่า ws คือตัวแปรที่ เป็นชีท
ซึ่ง ให้ For Each "ws" คือตัวแปรตัวชีท ชีทหนึ่งๆ ในชีททั้งหมด ซึ่ง xxx.Name เป็น Property เพื่อแสดงค่าออกมาเป็นชื่อชีท
ประมาณนี้ครับ :D

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 4:26 pm
by Supachok
puriwutpokin wrote: Mon Feb 18, 2019 4:20 pm
Supachok wrote: Mon Feb 18, 2019 4:01 pm
puriwutpokin wrote: Mon Feb 18, 2019 3:01 pm ปรับเป็น

Code: Select all

Sub xx()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
        ws.Delete
        End If
        Next ws
For x = 2 To Range("b" & Rows.Count).End(xlUp).Row
       Set ws = Sheets.Add(After:=Sheets(Sheets.Count))
       ws.Name = Sheets(1).Range("B" & x).Value
    Next x
    Application.DisplayAlerts = True
End Sub

Code ใช้ได้ต้องการครับ

แต่ไม่เข้าใจ code ตัวแปร
For Each ws In Worksheets = nothing
If ws.Name <> "Sheet1" Then = ชื่อsheet

สงสัยว่า VBA รู้ได้อย่างไรว่า ws.Name หมายถึงชื่อ sheet


'Dim ws As Worksheet
'Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then
ws.delete
'End If
'Next ws
ตรงประกาศตัวแปร Dim ws As Worksheet ว่า ws คือตัวแปรที่ เป็นชีท
ซึ่ง ให้ For Each "ws" คือตัวแปรตัวชีท ชีทหนึ่งๆ ในชีททั้งหมด ซึ่ง xxx.Name เป็น Property เพื่อแสดงค่าออกมาเป็นชื่อชีท
ประมาณนี้ครับ :D

Dim ws As Worksheet ว่า ws คือตัวแปรที่ เป็นชีท / Dim ประกาศลบออก
code มันยัง run ได้ถูกต้องผมเลยไม่เข้าใจ

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 7:37 pm
by snasui
Supachok wrote: Mon Feb 18, 2019 4:26 pm Dim ประกาศลบออก
code มันยัง run ได้ถูกต้องผมเลยไม่เข้าใจ
:D ที่ลบการประกาศตัวแปรแล้วยัง Run ได้เพราะไม่ได้กำหนดว่าจำเป็นต้องประกาศตัวแปรครับ หากมีการกำหนดว่าจำเป็นต้องประกาศตัวแปร ตรงด้านบนสุดของ Code จะเขียนว่า Option Explicit ข้อความนี้จะเป็นตัวชี้ว่าหากไม่ประกาศตัวแปรจะไม่สามารถ Run ได้ครับ

Re: VBA add sheet + rename

Posted: Mon Feb 18, 2019 8:41 pm
by Supachok
ขอบคุณทุกท่านสำหรับคำแนะนำ
คงต้องจำๆไปก่อน จะเข้าใจมากขึ้น