Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Xin ndu96081631 vui lòng giúp cho lần nửa.
Cũng trong file đó mình muốn tạo 1 Form nhập liệu đơn giản gồm có mã hàng và tên hàng, để tiện khi mặt hàng nào không có trong DS mình có thể gọi Form nhập vào và lưu qua Sheet "Link DS" cho tiện hơn.
Cám ơn ndu96081631.
 
Upvote 0
Xin ndu96081631 vui lòng giúp cho lần nửa.
Cũng trong file đó mình muốn tạo 1 Form nhập liệu đơn giản gồm có mã hàng và tên hàng, để tiện khi mặt hàng nào không có trong DS mình có thể gọi Form nhập vào và lưu qua Sheet "Link DS" cho tiện hơn.
Cám ơn ndu96081631.
Bạn tự thiết kế cái form ấy trước đi, có rồi hãy đưa lên đây để nghiên cứu nhé
(Nói xin lỗi, viết code tôi không ngại, nhưng thiết kế form thì ngại vô cùng)
 
Upvote 0
Gặp lại ndu96081631 và lại làm phiền nửa.
Dùm giúp mình - gợi ý nằm trong File đính kèm. Cam Ơn.
 

File đính kèm

  • SO.rar
    47 KB · Đọc: 31
Upvote 0
Cho em hỏi mấy anh có ai biết làm sao viết đoạn code: khi nào mà em click chuột vào ô B100 thì lập tức cột B hàng 100 sẽ đổi màu sang màu xanh không?
anh chị cố gắng giúp em!
 
Upvote 0
Upvote 0
Em có 2 đoạn code dùng để hiện những sheet bị ẩn. Giả su em co 10 sheets
Mã:
sub unhidesheet()
dim i as byte
for i = 1 to 10
sheet & i .visible = true
' thì bị lỗi
next i
end sub
nhưng e thử từ sheet một ví dụ sheet1.visble = true thì ok
Mã:
Sub UnHideSheet()
Dim sh As Worksheet
   For Each sh In ThisWorkbook.Worksheets
       sh.Visible = True
   Next sh
End Sub
Đoạn code trên thì rất ok, mong anh chị giải thích giúp em đoạn code đầu tiên tai sao bị lỗi
 
Upvote 0
Em có 2 đoạn code dùng để hiện những sheet bị ẩn. Giả su em co 10 sheets
Mã:
sub unhidesheet()
dim i as byte
for i = 1 to 10
sheet & i .visible = true
' thì bị lỗi
next i
end sub
nhưng e thử từ sheet một ví dụ sheet1.visble = true thì ok
Mã:
Sub UnHideSheet()
Dim sh As Worksheet
   For Each sh In ThisWorkbook.Worksheets
       sh.Visible = True
   Next sh
End Sub
Đoạn code trên thì rất ok, mong anh chị giải thích giúp em đoạn code đầu tiên tai sao bị lỗi
Phải vầy chứ
PHP:
Sub Unhidesheet()
  Dim i As Long
  For i = 1 To Sheets.Count
    Sheets(i).Visible = True
  Next i
End Sub
 
Upvote 0
Bạn hãy tự tìm ra kết luận nha

Em có 2 đoạn code dùng để hiện những sheet bị ẩn. Giả su em co 10 sheets
Mã:
sub unhidesheet()
dim i as byte
for i = 1 to 10
sheet & i .visible = true
' thì bị lỗi
next i
end sub
PHP:
Option Explicit
Sub UnHideSheet()
Dim jJ As Byte
For jJ = 1 To 10
   MsgBox Sheets("sheet" & jJ).Name
Next jJ
End Sub
(*) Mà sao bạn ngại xài chữ hoa nhỉ? - Thấy không, mình xài vầy có ai cấm cản gì đâu & trong cũng dễ chịu ấy chứ, nhỉ?
 
Lần chỉnh sửa cuối:
Upvote 0
Cách anh Ndu là tuyệt cú mèo và đúng ý em vì khi đổi tên sheet thì cách đoá vẫn đúng, còn cách anh ChanhTQ thì bị lỗi nếu em đổi tên sheet. Thanks 2 anh nhiều
 
Upvote 0
Các Anh, chị ơi! làm sao để ẩn các dòng trống một cách nhanh nhất
 
Lần chỉnh sửa cuối:
Upvote 0
Các bác giúp em với em khong biết cho gửi câu hỏi ở đâu
em muốn khi em nhập tên đơn vị vào một ô nào đó trong sheet thì tên file sẽ được đổi theo tên ô đó
các bác giúp em với
 
Upvote 0
Các bác giúp em với em khong biết cho gửi câu hỏi ở đâu
em muốn khi em nhập tên đơn vị vào một ô nào đó trong sheet thì tên file sẽ được đổi theo tên ô đó
các bác giúp em với
Tức là đổi tên file cho chính mình
Không đơn giản à nha!
Theo tôi thì thuật toán có thể là:
- SaveAs file thành 1 file mới (theo tên bạn đã gõ tại cell nào đó)
- Xóa file cũ
Đại khái thế này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim OldName As String, NewName As String
  On Error Resume Next
  If Target.Address = "$A$1" Then
    OldName = ThisWorkbook.FullName
    NewName = ThisWorkbook.Path & "\" & Target & ".xls"
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs NewName
    Kill OldName
    Application.DisplayAlerts = True
  End If
End Sub
 
Upvote 0
Tức là đổi tên file cho chính mình
Không đơn giản à nha!
Theo tôi thì thuật toán có thể là:
- SaveAs file thành 1 file mới (theo tên bạn đã gõ tại cell nào đó)
- Xóa file cũ
Đại khái thế này:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim OldName As String, NewName As String
  On Error Resume Next
  If Target.Address = "$A$1" Then
    OldName = ThisWorkbook.FullName
    NewName = ThisWorkbook.Path & "\" & Target & ".xls"
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs NewName
    Kill OldName
    Application.DisplayAlerts = True
  End If
End Sub
Nếu tên File có dấu tiếng việt thì khi đổi tên thành file mới, file cũ không bị xoá

Khi bỏ dòng: On Error Resume Next
Nếu tên File (OldName) có dấu tiếng việt thì câu lệnh Kill OldName báo lỗi
Run-time error '53'
File not found
@ndu96081631: Có cách nào khắc phục lỗi này không?
 
Upvote 0
Nếu tên File có dấu tiếng việt thì khi đổi tên thành file mới, file cũ không bị xoá

Khi bỏ dòng: On Error Resume Next
Nếu tên File (OldName) có dấu tiếng việt thì câu lệnh Kill OldName báo lỗi

@ndu96081631: Có cách nào khắc phục lỗi này không?
Cái vụ tên file là tiếng Việt luôn luôn là thứ gây rối khi xử lý file... nhưng Scripting.FileSystemObject nó chơi được tuốt
Thay:
PHP:
Kill OldName
thành:
PHP:
CreateObject("Scripting.FileSystemObject").DeleteFile OldName
thử xem
 
Upvote 0
Cái vụ tên file là tiếng Việt luôn luôn là thứ gây rối khi xử lý file... nhưng Scripting.FileSystemObject nó chơi được tuốt
Thay:
PHP:
Kill OldName
thành:
PHP:
CreateObject("Scripting.FileSystemObject").DeleteFile OldName
thử xem

Hi, Như vậy ngon rồi. Thank

Lại hỏi thêm chút xíu nữa:

Khi Export File ... được file *.cls
Khi Import File ... thì nó vào Class Module

Vấn đề: Để code đó ở Class Module thì làm thế nào Code đó hoạt động? (chắc phải copy or cut and paste in sheet ...)
 
Upvote 0
Hi, Như vậy ngon rồi. Thank

Lại hỏi thêm chút xíu nữa:

Khi Export File ... được file *.cls
Khi Import File ... thì nó vào Class Module

Vấn đề: Để code đó ở Class Module thì làm thế nào Code đó hoạt động? (chắc phải copy or cut and paste in sheet ...)
Nếu muốn chơi trò "Import/Export" tôi nghĩ nên dùng Class Event thì hay hơn
Thay vì viết code trong sheet, ta viết code trong Class Module như sau:
PHP:
Public WithEvents fn As Worksheet
Private Sub fn_Change(ByVal Target As Range)
  Dim OldName As String, NewName As String
  On Error Resume Next
  If Target.Address = "$A$1" Then
    OldName = ThisWorkbook.FullName
    NewName = ThisWorkbook.Path & "\" & Target & ".xls"
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs NewName
    CreateObject("Scripting.FileSystemObject").DeleteFile OldName
    Application.DisplayAlerts = True
  End If
End Sub
Khi này, nếu Export ta sẽ được 1 file *.cls và khi Import thì đương nhiên nó sẽ vào đúng Class Module như nguyên mẫu
Để kích hoạt cho Class Module này hoạt động, chỉ cần Auto_Open thế này:
PHP:
Dim Ws As New Class1
Sub Auto_Open()
  Set Ws.fn = Sheet1
End Sub
Cũng có thể Export luôn Module chứa sub Auto_Open, ta được file *.bas ---> Khi Import, ta import 1 lúc 2 món: Class và Module
Bạn thử xem
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu muốn chơi trò "Import/Export" tôi nghĩ nên dùng Class Event thì hay hơn
Thay vì viết code trong sheet, ta viết code trong Class Module như sau:
PHP:
Public WithEvents fn As Worksheet
Private Sub fn_Change(ByVal Target As Range)
  Dim OldName As String, NewName As String
  On Error Resume Next
  If Target.Address = "$A$1" Then
    OldName = ThisWorkbook.FullName
    NewName = ThisWorkbook.Path & "\" & Target & ".xls"
    Application.DisplayAlerts = False
    ThisWorkbook.SaveAs NewName
    CreateObject("Scripting.FileSystemObject").DeleteFile OldName
    Application.DisplayAlerts = True
  End If
End Sub
Khi này, nếu Export ta sẽ được 1 file *.cls và khi Import thì đương nhiên nó sẽ vào đúng Class Module như nguyên mẫu
Để kích hoạt cho Class Module này hoạt động, chỉ cần Auto_Open thế này:
PHP:
Dim Ws As New Class1
Sub Auto_Open()
  Set Ws.fn = Sheet1
End Sub
Cũng có thể Export luôn Module chứa sub Auto_Open, ta được file *.bas ---> Khi Import, ta import 1 lúc 2 món: Class và Module
Bạn thử xem

Thật tuyệt vời. thank you very much
 
Upvote 0
Để xem code của một đoạn chương trình trong excel thì phải vào đâu để xem. Xin Cảm ơn
 
Upvote 0
Bạn hỏi không rõ, vào Tools->Macro->Visual Basic Editor hoặc bấm Alt + f11 thử đúng ý bạn không.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

Bài viết mới nhất

Back
Top Bottom