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 เพื่อแสดงค่าออกมาเป็นชื่อชีท
ประมาณนี้ครับ

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 เพื่อแสดงค่าออกมาเป็นชื่อชีท
ประมาณนี้ครับ
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 ได้ถูกต้องผมเลยไม่เข้าใจ

ที่ลบการประกาศตัวแปรแล้วยัง Run ได้เพราะ
ไม่ได้กำหนดว่าจำเป็นต้องประกาศตัวแปรครับ หากมีการกำหนดว่าจำเป็นต้องประกาศตัวแปร ตรงด้านบนสุดของ Code จะเขียนว่า
Option Explicit ข้อความนี้จะเป็นตัวชี้ว่าหากไม่ประกาศตัวแปรจะไม่สามารถ Run ได้ครับ
Re: VBA add sheet + rename
Posted: Mon Feb 18, 2019 8:41 pm
by Supachok
ขอบคุณทุกท่านสำหรับคำแนะนำ
คงต้องจำๆไปก่อน จะเข้าใจมากขึ้น