Page 1 of 1
ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 10:19 am
by titus
ควรใช้สูตร ไหนดีครับ
ผมต้องการใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
แต่ชื่อ มันไม่เรียงเป็นตัวเลข
ให้เอาข้อมูลมารวมที่ชีท Report
Code: Select all
Sub Report()
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Sheets("307").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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets("307").Select
Range(myaddress).Select
Loop
End Sub
ขอบคุณครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 11:25 am
by titus
ลองแทนค่าชื่อ ชีทแล้ว ติดอยู่ที่ จุด Sheets(i).select
กำหนดค่าของ T7 เท่ากับ ชื่อของ sheet
แก้ตรงไหนดีครับ
Code: Select all
Sub Report2()
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
Do While Not IsEmpty(ActiveCell.Value)
ActiveCell.Value = i
Sheets(i).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(i).Select
Range(myaddress).Select
Loop
Loop
End Sub
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 11:45 am
by logic
เท่าที่พบนะครับ
ActiveCell.Value = i แต่ไม่มีการกำหนดค่า i ก่อน มันเลย Error ครับ
ปกติต้องกำหนดค่า i ก่อนใช้งาน ประมาณด้านล่างครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 11:49 am
by titus
logic wrote:เท่าที่พบนะครับ
ActiveCell.Value = i แต่ไม่มีการกำหนดค่า i ก่อน มันเลย Error ครับ
ปกติต้องกำหนดค่า i ก่อนใช้งาน ประมาณด้านล่างครับ
คือ ผมให้ Cell T7-T9 เป็นชื่อของ ชีท
แล้วก็เอาค่า T7 มาแท่นค่า i ครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 11:56 am
by logic
ถ้าแบบนั้น ใช้ For Loop ได้เลยครับ
Code: Select all
dim r as range
for r in range("t7:t9")
Sheets(r.value).select
next r
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 1:03 pm
by titus
อ่อ ครับ ได้เเล้ว ครับ
i = ActiveCell.Value
แก้เป็นตัวนี้แทน ActiveCell.Value = i
แต่ขอถามหน่อย ครับ
i = ActiveCell.Value กับ ActiveCell.Value = i
มันต่างกัน ตรงไหนครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 1:29 pm
by logic
ตัวไหนอยู่ซ้ายเครื่องหมาย = แสดงว่าให้ตัวนั้นมีค่าท่ากับค่าด้านขวาเครื่องหมาย = ครับ
titus wrote:i = ActiveCell.Value
หมายถึง ให้ i มีค่าเท่ากับเซลล์ปัจจุบัน
สว่น
titus wrote:ActiveCell.Value = i
หมายถึง ให้เซลล์ปัจจุบันมีค่าเท่ากับ i
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 1:48 pm
by titus
logic wrote:ถ้าแบบนั้น ใช้ For Loop ได้เลยครับ
Code: Select all
dim r as range
for r in range("t7:t9")
Sheets(r.value).select
next r
ลองปรับ ไปใช้ แล้ว error ครับ ใช้ไม่ได้ เลย เอา
For each มาใช้ แต่ก็ติดครับ
Code: Select all
Sub Report1()
Dim rng As Range, cell As Range
Dim i As String
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Set rng = Range("T7:T9")
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
For Each cell In rng
Sheets(cell.Value).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(i).Select
Next cell
Range(myaddress).Select
Loop
End Sub
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 4:31 pm
by logic
โค้ดติดบรรทัดไหนหรือครับ
แนบไฟล์ล่าสุดมาด้วยก็ดี เพื่อสะดวกกับการตอบครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 4:43 pm
by titus
logic wrote:โค้ดติดบรรทัดไหนหรือครับ
แนบไฟล์ล่าสุดมาด้วยก็ดี เพื่อสะดวกกับการตอบครับ
ติดตรง next cell ครับ
ตอนนี้ลองแก้อีกแบบ
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
Range("T7").Select
For Each i In Range("T7").End(xlDown)
Sheets(i.Value).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(cell.Value).Select
Range(myaddress).Select
Next i
Loop
End Sub
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 4:58 pm
by logic
ลองดูครับ
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
'Range("T7").Select
Set cell = Range("T7:T9")
For Each i In cell
Sheets(CStr(i.Value)).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(CStr(i.Value)).Select
Range(myaddress).Select
Loop
Next i
End Sub
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Fri Jan 05, 2018 5:01 pm
by titus
logic wrote:ลองดูครับ
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
'Range("T7").Select
Set cell = Range("T7:T9")
For Each i In cell
Sheets(CStr(i.Value)).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(CStr(i.Value)).Select
Range(myaddress).Select
Loop
Next i
End Sub
ขอบคุณครับตรงตามที่ต้องการเลยครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Sat Jan 06, 2018 9:38 am
by titus
titus wrote:logic wrote:ลองดูครับ
Code: Select all
Sub Report1()
Dim cell As Range
Dim i As Range
Dim name1, size1, lacq1, type1, sheet, scrap, full1, loca, lock1 As String
Sheets("Report").Select
Range("A8:D375,G8:G375,J8:J375,N8:P375").Select
Range("P8").Activate
Selection.ClearContents
'Range("T7").Select
Set cell = Range("T7:T9")
For Each i In cell
Sheets(CStr(i.Value)).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(0, 1).Select
loca = ActiveCell.Value
ActiveCell.Offset(0, 2).Select
lock1 = ActiveCell.Value
ActiveCell.Offset(300, 0).Select
ActiveCell.Offset(0, -3).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("Report").Select
Range("B375").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, 12).Value = loca
ActiveCell.Offset(0, 13).Value = lock1
ActiveCell.Offset(0, 14).Value = type1
Sheets(CStr(i.Value)).Select
Range(myaddress).Select
Loop
Next i
End Sub
ขอบคุณครับตรงตามที่ต้องการเลยครับ
สอบถามเพิ่มเติมหน่อย ครับ ตรง CStr คือ อะไร ครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Sat Jan 06, 2018 10:01 am
by snasui

เป็นคำสั่งที่ใช้เปลี่ยนค่าตัวแปรให้เป็น String ครับ
Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx
Posted: Sat Jan 06, 2018 10:36 am
by titus
snasui wrote:
เป็นคำสั่งที่ใช้เปลี่ยนค่าตัวแปรให้เป็น String ครับ
ขอบคุณครับอาจาร์ย