EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)Code: Select all
Private Sub CommandButton2_Click()
[color=#BF0000]Sheets("Table record").Select
Range("AJ6").AddComment
Range("AJ6").Comment.Visible = False
Range("AJ6").Comment.Text Text:="'ER stroke form'!R[20]c[-45]"
Sheets("ER stroke form").Select[/color]
End Sub
ไม่แน่ใจว่าเข้าใจคำถามถูกหรือเปล่านะคะsnasui wrote: ดูจากค่าใดในชีต ER stroke form และ Table record เพื่อที่จะได้นำ Comment ไปวางให้ตรงบรรทัดตามที่ต้องการครับ
ขอบคุณนะคะที่ช่วยอธิบายlogic wrote:อาจารย์หมายถึงว่าเอาไปวางบรรทัดไหน ปลายทางมีตั้งหลายบรรทัด หรือว่าให้วางทุกบรรทัดครับ
Code: Select all
Dim rsTemp As Range, arrComment() As Variant, rs As Range
Dim rtAll As Range, rtCol As Range, i As Integer, j As Integer
With Sheets("ER stroke form")
Set rsTemp = .Range("m26:m35")
i = 0
For Each rs In rsTemp
If rs.Value <> "" Then
ReDim Preserve arrComment(i)
arrComment(i) = rs.Value
i = i + 1
End If
Next rs
End With
With Sheets("Table record")
Set rtAll = .Range("ah6:ba12")
For i = 1 To rtAll.Rows.Count
j = 0
Set rtCol = rtAll.Rows(i)
For Each r In rtCol.Cells
If r.EntireColumn.Hidden = False Then
If r.Comment Is Nothing Then
r.AddComment
r.Comment.Text Text:=arrComment(j)
Else
r.Comment.Text Text:=arrComment(j)
End If
j = j + 1
End If
Next r
Next i
End With
ขอบคุณนะคะอาจารย์ Code ที่อาจารย์ให้มาสามารถนำไปใช้ใส่เป็น Comment ได้เลยค่ะsnasui wrote: ตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Dim rsTemp As Range, arrComment() As Variant, rs As Range Dim rtAll As Range, rtCol As Range, i As Integer, j As Integer With Sheets("ER stroke form") Set rsTemp = .Range("m26:m35") i = 0 For Each rs In rsTemp If rs.Value <> "" Then ReDim Preserve arrComment(i) arrComment(i) = rs.Value i = i + 1 End If Next rs End With With Sheets("Table record") Set rtAll = .Range("ah6:ba12") For i = 1 To rtAll.Rows.Count j = 0 Set rtCol = rtAll.Rows(i) For Each r In rtCol.Cells If r.EntireColumn.Hidden = False Then If r.Comment Is Nothing Then r.AddComment r.Comment.Text Text:=arrComment(j) Else r.Comment.Text Text:=arrComment(j) End If j = j + 1 End If Next r Next i End With
Code: Select all
Dim rsTemp As Range, arrComment() As Variant, rs As Range
Dim rtAll As Range, rtCol As Range, i As Integer, j As Integer
With Sheets("ER stroke form")
Set rsTemp = .Range("m26,m27,m28,m29,m30,m31,m32,m33,m34,m35")
i = 0
For Each rs In rsTemp
If rs.Value <> "" Then
ReDim Preserve arrComment(i)
arrComment(i) = rs.Value
i = i + 1
End If
Next rs
End With
With Sheets("Table record")
Set rtAll = .Range("ag6:ag101,ah6:ah101,aj6:aj101,am6:am101,ap6:ap101,as6:as101,au6:au101,ax6:ax101,ba6:ba101")
For i = 1 To rtAll.Rows.Count
j = 0
Set rtCol = rtAll.Rows(i)
For Each r In rtCol.Cells
If r.EntireColumn.Hidden = False Then
If r.Comment Is Nothing Then
r.AddComment
r.Comment.Text Text:=arrComment(j)
Else
r.Comment.Text Text:=arrComment(j)
End If
j = j + 1
End If
Next r
Next i
End With
สมมติว่า Sub AddComments ตอบปัญหานี้ได้natcharrr wrote: ต้องการนำข้อความที่ remark ในช่วง m25:m36 ไปวางอีกชีต (Table record) ในคอลัมน์ที่ต้องการคือ AG,AH,AJ,AM,AP,AS,AU,AX,BA
วางตั้งแต่บรรทัดที่ 6 ถัดไปเรื่อยๆ จนถึง บรรทัดที่ 101 โดยผ่านปุ่มคำสั่ง Save ค่ะ
Code: Select all
Public Sub AddComments()
Dim arrCols, r As Integer
r = Columns("a:a").Find([HN]).Row
arrCols = Array("AG", "AH", "AJ", "AM", "AP", "AS", "AU", "AX", "BA")
For Each arr In arrCols
n = n + 1
arr = arr & r
With Range(arr)
CommentText = [remark].Resize(1, 1).Offset(n - 1, 0).Value
.AddComment
.Comment.Visible = False
.Comment.Text CommentText
End With
Next
End Sub
Code: Select all
Dim rsTemp As Range, arrComment() As Variant
Dim rtAll As Range, rs As Range, i As Integer, j As Integer
With Sheets("ER stroke form")
Set rsTemp = .Range("m26:m35")
i = 0
For Each rs In rsTemp
If rs.Value <> "" Then
ReDim Preserve arrComment(i)
arrComment(i) = rs.Value
i = i + 1
End If
Next rs
End With
With Sheets("Table record")
Set rtAll = .Range("AG5,AH5,AJ5,AM5,AP5,AS5,AU5,AX5,BA5")
For i = 0 To .Range("ag5", .Range("ag5").End(xlDown)).Rows.Count - 1
j = 0
For Each r In rtAll
If r.Offset(i, 0).Comment Is Nothing Then
r.Offset(i, 0).AddComment
r.Offset(i, 0).Comment.Text Text:=arrComment(j)
Else
r.Offset(i, 0).Comment.Text Text:=arrComment(j)
End If
j = j + 1
Next r
Next i
End With
ZEROV wrote:หลังจากดูโค้ดของอาจารย์คนควนทำให้ผมกลับไปทบทวนความต้องการของผู้ถาม(กระบวนการทำงาน) ดังนี้
1.ป้อนข้อมูลลงในแบบฟอร์ม"ER stroke form" สำหรับ HN เดียว(อาจจะซำ้ในการบันทึกครั้งหลังๆ)
2.ส่งข้อมูลไปเก็บเป็น Recordในชีท Table record ยกเว้น Remark ที่ต้องการเก็บเป็น Comment(ไม่ใช่ค่าในCell)
โดยข้อมูลจะไปต่อจากแถวสุดท้ายของTable record
จากข้อ 1.และ 2.
Sub AddCommentsจะต้องใช้ก่อน end subr = Columns("a:a").Find([HN]).RowCode: Select all
Private Sub CommandButton2_Click() .................... .................... .................... Run "sheet2.addcomments" End Sub
แก้เป็น
r=range("a" & rows.count).end(xlup).row
ผมใช้ Worksheet Code Name ไม่ใช่ Worksheet Name ต้องระวังในการนำไปใช้ที่อื่นnatcharrr wrote:ขอบคุณอาจารย์คนควนและคุณ ZEROV มากๆนะคะ
ได้ตามที่ต้องการเลยค่ะ
แต่มีติดปัญหาเวลาเอาโค้ดไปใช้กับอีกไฟล์ ซึ่ง Duplicated กันมา ทำไมถึงนำไปใช้ไม่ได้เหรอคะ (มัน Error ค่ะ)
ทั้งๆที่ ชื่อชีตก็เหมือนกัน Range name ก็เหมือนกันหมด
ขอรบกวนอีกครั้งด้วยนะคะ
ขอบคุณค่ะ