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 ก่อนใช้งาน ประมาณด้านล่างครับ

Code: Select all

i = "Sheet1"
Sheets(i).Select

Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx

Posted: Fri Jan 05, 2018 11:49 am
by titus
logic wrote:เท่าที่พบนะครับ :)

ActiveCell.Value = i แต่ไม่มีการกำหนดค่า i ก่อน มันเลย Error ครับ

ปกติต้องกำหนดค่า i ก่อนใช้งาน ประมาณด้านล่างครับ

Code: Select all

i = "Sheet1"
Sheets(i).Select
คือ ผมให้ 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
:D เป็นคำสั่งที่ใช้เปลี่ยนค่าตัวแปรให้เป็น String ครับ

Re: ใช้สูตร VBA ทำรายงาน ตั้งแต่ชีท x-xx

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