Page 1 of 2

ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 1:57 pm
by akekorn
สวัสดีครับคุณคนควนและเพื่อนสมาชิก

วันนี้มีมารบกวนอีกเรื่องครับคือผมต้องใช้โค๊ดข้างล่างนี้แต่เปลี่ยนชีทเปลี่ยนหัวคอลัมภ์ไปเรื่อยๆ เลยอยากรบกวนสอบถามว่าหากต้องเปลี่ยนตัวแปร ตามรูปที่hightlight สีแดงไว้เพื่อใส่ตัวแปรเปลี่ยนไปเรือยๆ ครับผมต้องใส่อย่างไรครับ

Code: Select all

sub test()
On Error Resume Next
Dim i As Integer

Application.ScreenUpdating = False
    Sheets("data").Select
Range("a1").Select
Do While Not IsEmpty(ActiveCell.Value)
 i = i + 1
 ActiveCell.Offset(1, 0).Select
Loop

    Range("A1").Select

ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="data!R1C1:R" + CStr(i) + "C71").CreatePivotTable TableDestination:="", TableName:="PivotTable1"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("PivotTable1").SmallGrid = False
    ActiveSheet.PivotTables("PivotTable1").AddFields RowFields:=Array("mt_r", _
        "gl_group"), ColumnFields:=Array("sector", "sectoren"), PageFields:= _
        "mapping_no"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("mt_t")
        .Orientation = xlDataField
        .NumberFormat = "#,##0.00"
    End With
    ActiveSheet.PivotTables("PivotTable1").PivotFields("mapping_no").CurrentPage = _
        "BAU Expense"
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("B2").Select

end sub

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 2:04 pm
by akekorn
ทำไมผมลงรูปไม่ได้ครับ งง

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 2:09 pm
by akekorn
ถ้าอย่างนั้นผมขออนุญาติอธิบายครับ

คือค่าที่ต้องการเปลี่ยนคือ
TableName:="PivotTable1" ผมจะแทนค่าเป็นสมมติมีตัวแปร A = "Pivottable2"

ActiveSheet.PivotTables("PivotTable1") ต้องการเปลี่ยนเหมือนกัน

AddFields RowFields:=Array("mt_r" ต้องการใสตัวแปรแทน "mt_r"
PivotFields("mt_t") ต้องการใสตัวแปรแทน "mt_t"

รบกวนด้วยครับ
ขอบพระคุณล่วงหน้าครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 2:11 pm
by snasui
:D ช่วยแสดง Code VBA ให้เป็น Code เพื่อให้ง่ายต่อการอ่านและการ Copy ไปทดสอบ ตามกระทู้นี้ครับ viewtopic.php?f=3&t=1187

สำหรับภาพที่แนบได้จะต้องมีขนาดไม่เกิน 800*600 และควรแนบไฟล์ตัวอย่างเพื่อจะได้ช่วยทดสอบครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 2:32 pm
by akekorn
ไฟด์แนบครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 2:36 pm
by akekorn
คืออยากให้module 2 run เพราะดูโค๊ดแล้วเปลี่ยนตัวแปรจะได้ไม่ต้องเขียนยืดยาวครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 3:42 pm
by snasui
:shock: ช่วยอธิบายสิ่งที่ต้องการจะทำมาโดยสังเขปด้วยครับว่า งานที่จะให้ Module2 ทำนั้นมีขั้นตอนเป็นอย่างไร และติดในขั้นตอนไหน เท่าที่เห็นเป็นการนำค่าในเซลล์ IS1 มาใช้กับ ActiveCell เมื่อ IS1 เป็นค่าว่างก็เลยจบขั้นตอนการทำงาน

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 4:05 pm
by akekorn
ครับคือผมจะทำ pivot table โดยแบ่งตามกลุ่ม ที่เซล IH และ II จะเป็นตัวบอกว่าจะจัดกลุ่มตามอะไรครับ และทำจนกว่าจะหมดแถวคือจำนวน pivot ที่จะทำ หากผมเขียนโปรแกรมโดยอ้างชื่อละ row ก็ทำได้แต่ต้องเขียนแบบเดียวกันถึง29 ครั้งและมองว่าเราสามารถแทนค่าตัวแปรเข้าไปได้ จึงได้hightlight ส่วนที่ต้องการเปลี่ยนโดยจะใส่ตัวแปรเข้าไปแต่คงใส่ยังไม่ถูกโปรแกรมเลย error ครับ จึงอยากรบกวนคุณคนควนว่าผมจะใส่อย่างไรดีครับ ผมได้ attach file ใหม่ให้ครับเพราะอันเดิมเปลี่ยนคอลัมภ์รบกวนใช้ไฟด์ใหม่ครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 4:40 pm
by snasui
:D ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ ผมไม่ได้ทดสอบว่ามันแสดงผลถูกต้องหรือไม่ เนื่องจากไม่ทราบว่าต้องการให้แสดง PivotTable ที่เซลล์ใด แต่เขียน Code ตัวอย่างสำหรับการ Loop มาให้ดูเป็นตัวอย่างว่า ถ้าจะให้ชื่อ PivotTable เปลี่ยนไปตามจำนวนค่าในคอลัมน์ A นั้นจะมีการเพิ่ม Loop เข้าไปอย่างไร

Code: Select all

On Error Resume Next
Dim i As Integer
Dim j As Integer

Application.ScreenUpdating = False
Sheets("data").Select
Range("a1").Select
Do While Not IsEmpty(ActiveCell.Value)
 i = i + 1
 ActiveCell.Offset(1, 0).Select
Loop

For j = 1 To i
    Range("A1").Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="data!R1C1:R" + CStr(i) + "C71") _
    .CreatePivotTable TableDestination:="", TableName:="PivotTable" & j
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("PivotTable" & j).SmallGrid = False
    ActiveSheet.PivotTables("PivotTable" & j).AddFields RowFields:=Array("mt_r", _
        "gl_group"), ColumnFields:=Array("sector", "sectoren"), PageFields:= _
        "mapping_no"
    With ActiveSheet.PivotTables("PivotTable" & j).PivotFields("mt_t")
        .Orientation = xlDataField
        .NumberFormat = "#,##0.00"
    End With
    ActiveSheet.PivotTables("PivotTable" & j).PivotFields("mapping_no").CurrentPage = _
        "BAU Expense"
    Cells.Select
    Cells.EntireColumn.AutoFit
Next j

Range("B2").Select

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 5:57 pm
by akekorn
ขอบคุณครับคุณคนควนแต่ผมอยากทราบหากจะใส่ตัวแปร แทนข้อความ ทีผมได้ขีดเส้นใต้จะทำอย่างไรครับ

AddFields RowFields:=Array("mt_r"
With ActiveSheet.PivotTables("PivotTable" & i).PivotFields("mt_t")


ขอบคุณครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 6:03 pm
by snasui
:D ไม่ทราบว่าต้องการ Loop โดยคำค่าใดมาใส่ มีความสัมพันธ์กับค่าใดในเซลล์หรือข้อมูลใดหรือไม่ ช่วยทำตัวอย่างข้อมูลเล็ก ๆ มาเพื่อประกอบความเข้าใจ สะดวกต่อการช่วยทดสอบด้วยครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 6:08 pm
by akekorn
ครับผมก็ทำตามแบบ loop เดิมด้านบนครับ แค่อยากได้ตัวแปรตามที่สงสัย ครับขอบคุณครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Fri May 18, 2012 6:11 pm
by snasui
:D ถ้า Loop เหมือนด้านบนก็ดูวิธีการใส่ตัวแปร j ให้กับการตั้งชื่อ PivotTable ซึ่งจะใช้ลักษณะเดียวกันครับ แต่ถ้าเป็น Field ที่ไม่มีอยู่จริงจะ Error ครับ :mrgreen:

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Mon May 21, 2012 10:16 am
by akekorn
คุณคนควนครับต้องขอโทษด้วยที่รบกวนอีกแต่ผมไม่เข้าใจตรงที่บอกว่าถ้าเป็น Field ที่ไม่มีอยู่จริงจะ Error ครับ
เพราะค่าfield ที่ผมใส่ในตัวอย่างที่ให้ในเซล IS1 และ IT1 คือ
ขออนุญาติอธิบายครับ คือผมต้องการทำpivot table โดย field ที่ต้องการเปลี่ยนไปคือ2 field ตามที่ผมใส่ค่าไว้ในเซล IS1 และ IT1 และจะเปลี่ยนไปเรื่อยๆจนครบทุกชีท
โดยจะเห็นจากในรูปที่ทำ povot แล้ว สิ่งที่ต้องการเปลี่ยนคือ ชื่อ pivotable และ ชื่อfield ที่ได้hight light สีเหลืองและสีแดงไว้ตามภาพ ครับ ข้อมูลก็เป็นตามไฟด์แนบ เพราะผมมองแล้วว่าโค๊ดหลักยังเป็นแบบเดิม คือ
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="data!R1C1:R" + CStr(i) + "C71").CreatePivotTable TableDestination:="", TableName:="PivotTable1"
ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable1").SmallGrid = False
ActiveSheet.PivotTables("PivotTable1").AddFields RowFields:=Array("mt_r", _
"gl_group"), ColumnFields:=Array("sector", "sectoren"), PageFields:= _
"mapping_no"
With ActiveSheet.PivotTables("PivotTable1").PivotFields("mt_t")
.Orientation = xlDataField
.NumberFormat = "#,##0.00"
End With
ActiveSheet.PivotTables("PivotTable1").PivotFields("mapping_no").CurrentPage = _
"BAU Expense"
Cells.Select
Cells.EntireColumn.AutoFit
Range("B2").Select

แต่ต้องการเปลี่ยนค่าตัวแปร อย่างในโค๊ดตัวอย่างคือ
TableName:="PivotTable1"
.AddFields RowFields:=Array("mt_r"
.PivotFields("mt_t")

สามตัวนี้ครับ ผมลองใส่ค่าตัวแปร string ลงไปแล้วแต่ก็ error ตามอีกภาพ ผมจึงอยากทราบว่าจะใส่ค่าตัวแปรที่เป็น string อย่างไรครับจะ รันผ่านครับ รบกวนคุณคนควนช่วยอนุเคราะห์ด้วยครับ
ขอบคุณครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Mon May 21, 2012 8:10 pm
by snasui
:D ช่วยปรับ Code ให้เป็น Code ด้วยครับ จะได้สะดวกในการอ่าน ดูวิธีการตาม Link นี้ครับ :arrow: viewtopic.php?f=6&t=1187 และช่วยส่งไฟล์ที่ Update และมี Code นี้แล้วมาให้ด้วยครับ จะได้ช่วยทดสอบได้

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Wed May 23, 2012 10:18 am
by akekorn
โค๊ดครับ

Sub ake()
Dim i, ii As Integer
Dim a, b, c, d, e As String
Application.ScreenUpdating = False
Sheets("data").Select
Range("is1").Select
ActiveCell.Value = Range("is1").Value
Do While Not IsEmpty(ActiveCell.Value)
i = i + 1
a = ActiveCell.Value
b = Mid(a, 1, Len(a) - 1) & "r"
c = CStr(i)
d = "PivotTable" + c
Sheets("DATA").Select
Range("a1").Select
'ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="data!R1C1:R" + CStr(i) + "C71").CreatePivotTable TableDestination:="", TableName:=d
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:="data!R1C1:R" + CStr(i) + "C71") _
.CreatePivotTable TableDestination:="", TableName:="PivotTable1"

ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
ActiveSheet.Cells(3, 1).Select
ActiveSheet.PivotTables("PivotTable" + ii).SmallGrid = False
ActiveSheet.PivotTables("PivotTable" + ii).AddFields RowFields:=Array(a, _
"gl_group"), ColumnFields:=Array("sector", "sectoren"), PageFields:= _
"mapping_no"
With ActiveSheet.PivotTables("PivotTable" + ii).PivotFields(b)
.Orientation = xlDataField
.NumberFormat = "#,##0.00"
End With
ActiveSheet.PivotTables("PivotTable" + ii).PivotFields("mapping_no").CurrentPage = _
"BAU Expense"
Cells.Select
Cells.EntireColumn.AutoFit
Range("B2").Select


ActiveCell.Offset(1, 0).Select
Loop



End Sub

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Wed May 23, 2012 12:08 pm
by snasui
:shock: ไม่ทราบว่าได้อ่านความเห็นด้านล่างนี้หรือไม่ครับ :?:
snasui wrote: ช่วยปรับ Code ให้เป็น Code ด้วยครับ จะได้สะดวกในการอ่าน ดูวิธีการตาม Link นี้ครับ viewtopic.php?f=6&t=1187 และช่วยส่งไฟล์ที่ Update และมี Code นี้แล้วมาให้ด้วยครับ จะได้ช่วยทดสอบได้

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Thu May 24, 2012 5:37 pm
by akekorn
อ่านแล้วครับแต่ผม attach file ไม่ได้ครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Thu May 24, 2012 8:41 pm
by snasui
:lol: กรณีแนบไฟล์ที่มีขนาดไม่เกิน 300kb ไม่ได้ช่วยแจ้งด้วยครับว่ามีการฟ้องอย่างใดหรือไม่ ที่ผมบอกไม่ใช่เฉพาะแนบไฟล์ครับ แต่แจ้งให้โพสต์ Code ให้แสดงเป็น Code ตาม Link ที่ให้ไปเพื่อสะดวกต่อการอ่านและ Copy ไปทดสอบครับ

Re: ต้องการแทนค่าตัวแปรใน โค๊ด

Posted: Mon May 28, 2012 10:13 pm
by akekorn
ผมได้แนบไฟด์มาให้แล้วครับรบกวนด้วยครับ