:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#1

Post 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
Last edited by snasui on Sat May 19, 2012 8:51 am, edited 1 time in total.
Reason: ปรับ Code VBA ให้แสดงเป็น Code
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#2

Post by akekorn »

ทำไมผมลงรูปไม่ได้ครับ งง
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#3

Post by akekorn »

ถ้าอย่างนั้นผมขออนุญาติอธิบายครับ

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

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

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

รบกวนด้วยครับ
ขอบพระคุณล่วงหน้าครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#4

Post by snasui »

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

สำหรับภาพที่แนบได้จะต้องมีขนาดไม่เกิน 800*600 และควรแนบไฟล์ตัวอย่างเพื่อจะได้ช่วยทดสอบครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#5

Post by akekorn »

ไฟด์แนบครับ
You do not have the required permissions to view the files attached to this post.
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#6

Post by akekorn »

คืออยากให้module 2 run เพราะดูโค๊ดแล้วเปลี่ยนตัวแปรจะได้ไม่ต้องเขียนยืดยาวครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#7

Post by snasui »

:shock: ช่วยอธิบายสิ่งที่ต้องการจะทำมาโดยสังเขปด้วยครับว่า งานที่จะให้ Module2 ทำนั้นมีขั้นตอนเป็นอย่างไร และติดในขั้นตอนไหน เท่าที่เห็นเป็นการนำค่าในเซลล์ IS1 มาใช้กับ ActiveCell เมื่อ IS1 เป็นค่าว่างก็เลยจบขั้นตอนการทำงาน
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#8

Post by akekorn »

ครับคือผมจะทำ pivot table โดยแบ่งตามกลุ่ม ที่เซล IH และ II จะเป็นตัวบอกว่าจะจัดกลุ่มตามอะไรครับ และทำจนกว่าจะหมดแถวคือจำนวน pivot ที่จะทำ หากผมเขียนโปรแกรมโดยอ้างชื่อละ row ก็ทำได้แต่ต้องเขียนแบบเดียวกันถึง29 ครั้งและมองว่าเราสามารถแทนค่าตัวแปรเข้าไปได้ จึงได้hightlight ส่วนที่ต้องการเปลี่ยนโดยจะใส่ตัวแปรเข้าไปแต่คงใส่ยังไม่ถูกโปรแกรมเลย error ครับ จึงอยากรบกวนคุณคนควนว่าผมจะใส่อย่างไรดีครับ ผมได้ attach file ใหม่ให้ครับเพราะอันเดิมเปลี่ยนคอลัมภ์รบกวนใช้ไฟด์ใหม่ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#9

Post 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
Last edited by snasui on Sun May 20, 2012 8:43 am, edited 1 time in total.
Reason: Update ตัวแปร i เป็น j
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#10

Post by akekorn »

ขอบคุณครับคุณคนควนแต่ผมอยากทราบหากจะใส่ตัวแปร แทนข้อความ ทีผมได้ขีดเส้นใต้จะทำอย่างไรครับ

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


ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#11

Post by snasui »

:D ไม่ทราบว่าต้องการ Loop โดยคำค่าใดมาใส่ มีความสัมพันธ์กับค่าใดในเซลล์หรือข้อมูลใดหรือไม่ ช่วยทำตัวอย่างข้อมูลเล็ก ๆ มาเพื่อประกอบความเข้าใจ สะดวกต่อการช่วยทดสอบด้วยครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#12

Post by akekorn »

ครับผมก็ทำตามแบบ loop เดิมด้านบนครับ แค่อยากได้ตัวแปรตามที่สงสัย ครับขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#13

Post by snasui »

:D ถ้า Loop เหมือนด้านบนก็ดูวิธีการใส่ตัวแปร j ให้กับการตั้งชื่อ PivotTable ซึ่งจะใช้ลักษณะเดียวกันครับ แต่ถ้าเป็น Field ที่ไม่มีอยู่จริงจะ Error ครับ :mrgreen:
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#14

Post 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 อย่างไรครับจะ รันผ่านครับ รบกวนคุณคนควนช่วยอนุเคราะห์ด้วยครับ
ขอบคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#15

Post by snasui »

:D ช่วยปรับ Code ให้เป็น Code ด้วยครับ จะได้สะดวกในการอ่าน ดูวิธีการตาม Link นี้ครับ :arrow: viewtopic.php?f=6&t=1187 และช่วยส่งไฟล์ที่ Update และมี Code นี้แล้วมาให้ด้วยครับ จะได้ช่วยทดสอบได้
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#16

Post 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
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#17

Post by snasui »

:shock: ไม่ทราบว่าได้อ่านความเห็นด้านล่างนี้หรือไม่ครับ :?:
snasui wrote: ช่วยปรับ Code ให้เป็น Code ด้วยครับ จะได้สะดวกในการอ่าน ดูวิธีการตาม Link นี้ครับ viewtopic.php?f=6&t=1187 และช่วยส่งไฟล์ที่ Update และมี Code นี้แล้วมาให้ด้วยครับ จะได้ช่วยทดสอบได้
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#18

Post by akekorn »

อ่านแล้วครับแต่ผม attach file ไม่ได้ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31178
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#19

Post by snasui »

:lol: กรณีแนบไฟล์ที่มีขนาดไม่เกิน 300kb ไม่ได้ช่วยแจ้งด้วยครับว่ามีการฟ้องอย่างใดหรือไม่ ที่ผมบอกไม่ใช่เฉพาะแนบไฟล์ครับ แต่แจ้งให้โพสต์ Code ให้แสดงเป็น Code ตาม Link ที่ให้ไปเพื่อสะดวกต่อการอ่านและ Copy ไปทดสอบครับ
akekorn
Bronze
Bronze
Posts: 416
Joined: Wed Mar 09, 2011 5:19 pm

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

#20

Post by akekorn »

ผมได้แนบไฟด์มาให้แล้วครับรบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.
Post Reply