Topic Những câu hỏi về code, xin giải thích các code... đã quá dài nên mình đóng nó lại và mở topic khác
Tất cả những bài viết liên quan đến việc nhờ giải thích, xử lý và gỡ rối code VBA, các bạn vui lòng đăng tại đây!
Cảm ơn
Thưa thầy cho em hỏi về vòng for:
e có 5 sheet tên lần lượt là CD-L1 -:- CD-L5, giờ em lần lượt đánh công thức cộng từ ô O8 sheet2 + 1 với ô O8 của sheet CD-L1; sheet tiếp theo công 1 từ sheet CD-L1 >>> i = 5. code của em sai ko chạy được mong thầy giải thích hướng dẫn em
--------------------------------------
Sub DanhsoSheets()
Dim i As Long, ShName As String
On Error Resume Next
For i = 1 To 5
ShName = "CD-L" & i
With Sheets(ShName)
.Select
.Range("O8") = Sheets("CD-L1").Range("O8") + 1
End With
Next i
End Sub
Với đoạn Code trên thì mỗi lần chạy thì nó lại lấy ô O8 của Sheets("CD-L1") công thêm 1 đơn vị. Khi mình bấm 2 lần thì O8 của Sheets("CD-L1") bằng 2 và các Sheet tiếp theo làn lượt là 3,4 ... do vậy dẫn đến tên O8 và tên Sheet khác nhau do Code chạy từ 2 lần trở lên
Nếu tên Ô và tên Sheet giống nhau " Sheets("CD-L1"); O8 =1 .: ............" công thêm 1 ) thì bạn thử cái này thử
HTML:
Sub DanhsoSheets1()
Dim i As Long, ShName As String, Str As String
On Error Resume Next
Str = "CD-L"
For Each Sh In Worksheets
If Sh.Name Like Str & "*" Then
With Sh
.Select
.Range("O8") = Replace(Sh.Name, Str, "", 1)
End With
End If
Next Sh
End Sub
Public Sub GPE()
Dim Arr(), i As Integer, vArr()
Arr = Range("b2:m" & Range("m65000").End(xlUp).Row).Value
ReDim vArr(1 To UBound(Arr), 1 To 1)
For i = 1 To UBound(Arr)
vArr(i, 1) = Application.Evaluate(Arr(i, 1) & "/" & Arr(i, 12) & "*" & Arr(i, 2)) 'chia 8: 8 day so co dinh trong code luôn'
Next i
Range("d2").Resize(UBound(Arr)) = vArr
End Sub
chao e muốn thêm code này vArr(i, 1) = Application.Evaluate(Arr(i, 1) & "/" & Arr(i, 12) & "*" & Arr(i, 2))/8 số 8 tô màu đó là cố định trong code luôn.
câu @: e mun xai code hàm if cho e xin code hàm if với.
Sub DanhsoSheets()
Dim i As Long, ShName As String
On Error Resume Next
For i = 1 To 5
ShName = "CD-L" & i
With Sheets(ShName)
.Select
.Range("O8") = Sheets("CD-L1").Range("O8") + 1
End With
Next i
End Sub
Với đoạn Code trên thì mỗi lần chạy thì nó lại lấy ô O8 của Sheets("CD-L1") công thêm 1 đơn vị. Khi mình bấm 2 lần thì O8 của Sheets("CD-L1") bằng 2 và các Sheet tiếp theo làn lượt là 3,4 ... do vậy dẫn đến tên O8 và tên Sheet khác nhau do Code chạy từ 2 lần trở lên
Nếu tên Ô và tên Sheet giống nhau " Sheets("CD-L1"); O8 =1 .: ............" công thêm 1 ) thì bạn thử cái này thử
HTML:
Sub DanhsoSheets1()
Dim i As Long, ShName As String, Str As String
On Error Resume Next
Str = "CD-L"
For Each Sh In Worksheets
If Sh.Name Like Str & "*" Then
With Sh
.Select
.Range("O8") = Replace(Sh.Name, Str, "", 1)
End With
End If
Next Sh
End Sub
Với Sub này e sửa thành từ sheets thứ 2 trở đi bắt đầu cộng số. Nếu cho For chạy từ i đến max nghĩa có có thể 10 sheets hoặc nhiều hơn thì sửa như nào ạ. DanhsoSheets1 nhiều biến hay hàm em chưa hiểu lắm vì em đang tập tọe từng bước.
Sub DanhsoSheets()
Dim i As Long
Dim ShName As String
For i = 1 To 5
ShName = "CD-L" & i + 1
With Sheets(ShName)
.Select
.Range("O8") = Sheets("CD-L1").Range("O8") + i
End With
Next i
End Sub
Với Sub này e sửa thành từ sheets thứ 2 trở đi bắt đầu cộng số. Nếu cho For chạy từ i đến max nghĩa có có thể 10 sheets hoặc nhiều hơn thì sửa như nào ạ. DanhsoSheets1 nhiều biến hay hàm em chưa hiểu lắm vì em đang tập tọe từng bước.
Với vùng range trong bảng tính thì cấu trúc em hiểu rồi Nhưng đối với số sheets thì e nghĩ mãi chưa ra. a đưa ví dụ luôn với code trên DanhSoSheet () dùm em ạ
Em vừa chỉnh code chạy được rồi nhưng em nhìn nó chưa được như ý, em cảm thấy hơi cổ:
Sub DanhsoSheets3()
Dim i As Long, Nmax As Long
Dim ShName As String
On Error GoTo Thoat
For i = 2 To 1986
ShName = "CD-L" & i
With Sheets(ShName)
.Select
.Range("O8") = Sheets("CD-L1").Range("O8") + i - 1
End With
Next i
Thoat: MsgBox ("Thành Công")
End Sub
Bình thường mình chỉ thấy là End (xlUp) hoặc End(xlDown) hoặc End(xlToRight) hoặc End.(xlToLeft) chứ em thấy trong 1 số CODE có đoạn này..............End(3))..................
Số 3 này có phải ý nghĩa là xlUp hay không?
Hay là từ ô đang lựa chọn sẽ được di chuyển lên 3 dòng và qua trái 3 dòng ?????
Vậy không biết có các số 1, 2, 4 nữa không và nghĩa là gì ạ?
Nhờ các thầy và các bạn giải thích hộ mình với, em xin cảm ơn!
Bình thường mình chỉ thấy là End (xlUp) hoặc End(xlDown) hoặc End(xlToRight) hoặc End.(xlToLeft) chứ em thấy trong 1 số CODE có đoạn này..............End(3))..................
Số 3 này có phải ý nghĩa là xlUp hay không?
Hay là từ ô đang lựa chọn sẽ được di chuyển lên 3 dòng và qua trái 3 dòng ?????
Vậy không biết có các số 1, 2, 4 nữa không và nghĩa là gì ạ?
Nhờ các thầy và các bạn giải thích hộ mình với, em xin cảm ơn!
Bình thường mình chỉ thấy là End (xlUp) hoặc End(xlDown) hoặc End(xlToRight) hoặc End.(xlToLeft) chứ em thấy trong 1 số CODE có đoạn này..............End(3))..................
Số 3 này có phải ý nghĩa là xlUp hay không?
Hay là từ ô đang lựa chọn sẽ được di chuyển lên 3 dòng và qua trái 3 dòng ?????
Vậy không biết có các số 1, 2, 4 nữa không và nghĩa là gì ạ?
Nhờ các thầy và các bạn giải thích hộ mình với, em xin cảm ơn!
(Ôi đối với mình thực thực là lớn đấy) nhưng mà toàn công sức của diễn đàn và đặc biệt là sự nhiệt tình của Bác PacificPr cả thôi. Thực sự cảm ơn các bạn nhiều lắm, mình không phải dân IT nhưng mà cũng đang cố gắng hiểu để có thể hoàn thiện dự án nhỏ của mình sớm nhất.
Sao đến phần định dạng kẻ khung mình làm lúc thì được, lúc thì lại báo lỗi "unable to set the linestyle property of the border class"
Mình làm CODE như thế này bị báo lỗi tại sheet 1, còn các sheet khác thì sử dụng bình thường, Các bạn chỉ mình với lý do với
Mã:
Sub Dinh_Dang()
Dim ir As Integer
Dim ic As Integer
ir = 6 ' Dòng đầu tiên chứa dữ liệu cần định dạng
ic = Range("C65536").End(xlUp).Row ' Dòng cuối cùng chứa dữ liệu cần định dạng
Range("A" & ir, "L" & ic).Select
Selection.HorizontalAlignment = xlCenter 'canh giữa cho đều theo cột
Selection.Borders(xlInsideVertical).LineStyle = xlContinuous ' Kẻ dòng đứng
Selection.Borders(xlInsideHorizontal).LineStyle = xlDot ' Kẻ dòng ngang
Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous ' Kẻ khung trái
Selection.Borders(xlEdgeTop).LineStyle = xlContinuous ' Kẻ khung trên
Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous ' Kẻ khung dưới
Selection.Borders(xlEdgeRight).LineStyle = xlContinuous ' Kẻ khung phải
End Sub
Thưa thầy!
Cho em hỏi : Vùng bôi mầu xanh của em đang tìm được là J8 giờ em muốn cộng 1 thành J9 (bôi đỏ) thì phải làm như nào, mong thầy giúp đỡ em. Em xin chân thành cảm ơn!
Nmax = Application.Max(Rng)
NameSh = ActiveSheet.Name: DK = False
If NameSh = "CDL-K95" Then CelLink = "O8"
If NameSh = "DTL-K95" Then CelLink = "J8"
For i = LBound(arr) To UBound(arr)
If arr(i) = NameSh Then
DK = True: Exit For
End If
Next i
If DK = True Then
Sheets(NameSh).Range(CelLink).Copy
Sheets(NameSh).Range(CelLink + 1).PasteSpecial Paste:=xlPasteFormats
For i = 1 To Nmax
Thưa thầy!
Cho em hỏi : Vùng bôi mầu xanh của em đang tìm được là J8 giờ em muốn cộng 1 thành J9 (bôi đỏ) thì phải làm như nào, mong thầy giúp đỡ em. Em xin chân thành cảm ơn!
Mình viết trên máy chạy ok nhưng khi gởi cho người khác dùng thì bị báo như vầy, có 2 file giống nhau nhưng chỉ có 1 file bị, các câu như chr , mid là báo, bỏ đi thì chạy bình thường, trong khi 1 file khác cũng dùng lệnh đó thì không thấy báo gì. thanks !
Mình viết trên máy chạy ok nhưng khi gởi cho người khác dùng thì bị báo như vầy, có 2 file giống nhau nhưng chỉ có 1 file bị, các câu như chr , mid là báo, bỏ đi thì chạy bình thường, trong khi 1 file khác cũng dùng lệnh đó thì không thấy báo gì. thanks !
Nhờ chỉnh hộ code với ah:
1. Code file tạo addin:
Public Sub Xuat()
Dim i As Long
For i = 2 To 16
With ActiveWorkbook
Sheet2.Cells(i, 1).Formula = "='Sheet1'!B" & i
Sheet3.Cells(i, 1).Formula = "='Sheet1'!a" & i
End With
Next
End Sub
=======> code này mình tạo thành addin.xla (chỉ giữ lại sheet1).
2. Sau đó mình imort vào excel: Từ file excel thứ 2 mình dùng code sau gọi sub thì báo lỗi (chắc sai địa chỉ kiểu active mà mình ko biết xử lý sao):
Sub Button1_Click()
Application.Run ("'addin.xla'!xuat")
End Sub
Nhờ hướng dẫn (sửa code với ah). Thanks mọi người.
Nhờ chỉnh hộ code với ah:
1. Code file tạo addin:
Public Sub Xuat()
Dim i As Long
For i = 2 To 16
With ActiveWorkbook
Sheet2.Cells(i, 1).Formula = "='Sheet1'!B" & i
Sheet3.Cells(i, 1).Formula = "='Sheet1'!a" & i
End With
Next
End Sub
=======> code này mình tạo thành addin.xla (chỉ giữ lại sheet1).
2. Sau đó mình imort vào excel: Từ file excel thứ 2 mình dùng code sau gọi sub thì báo lỗi (chắc sai địa chỉ kiểu active mà mình ko biết xử lý sao):
Sub Button1_Click()
Application.Run ("'addin.xla'!xuat")
End Sub
Nhờ hướng dẫn (sửa code với ah). Thanks mọi người.