Copy code từ file gốc vào 1 file khác mà không chạy

Liên hệ QC

hoangminhtien

Thành viên gắn bó
Tham gia
29/2/08
Bài viết
1,685
Được thích
2,226
Nghề nghiệp
Mechanical Engineering
Em có coppy trên diễn đàn 1 file (em không nhớ là nằm ở chủ đề nào), file tên là “vi du”. File này khi chạy code thì tốt (nhấn vào ô E3 thì xuất hiện cái lịch để chọn ngày). Em copy đoạn code này và cho nó vào 1 file khác thì nó lại không chạy. các bác xem cái file “vi du” ngoài code ra nó còn cái gì không mà nó lại chạy được. cái file "sua doi" còn thiếu cái gì mà nó lại không chạy được. cám ơn các bác
 

File đính kèm

Em có coppy trên diễn đàn 1 file (em không nhớ là nằm ở chủ đề nào), file tên là “vi du”. File này khi chạy code thì tốt (nhấn vào ô E3 thì xuất hiện cái lịch để chọn ngày). Em copy đoạn code này và cho nó vào 1 file khác thì nó lại không chạy. các bác xem cái file “vi du” ngoài code ra nó còn cái gì không mà nó lại chạy được. cái file "sua doi" còn thiếu cái gì mà nó lại không chạy được. cám ơn các bác
Bạn có thấy trong code có đề cập đến Object Calendar1 không. Cái thiếu trong file bạn là Object đó. Bây giờ chỉ cần tạo Object đó là file của bạn giống như file kia thôi.
 

File đính kèm

Upvote 0
Nhiều dấu hiệu để nhận biết:
- File goc.xls, chỉ cần vào design mode là thấy 1 cái "thiếu thiếu" hiện ra.
- Trong thông báo lỗi của file suadoi.xls, nó biểu là thiếu object, và tô vàng dòng visible = False hoặc dòng visible True, ngó ở trên thì cái bị tác động bởi lệnh visible là cái calendar1
 
Upvote 0
Đầu tiên bạn phải Chèn cái Calendar vào thông qua Insert-Object-Calendar Control, sau đó bạn dùng set thuộc tính Visible = False cho nó. Thông qua sự kiện Worksheet_SelectionChange, bạn sẽ làm Calendar ẩn hoặc hiện tùy theo ô bạn chọn trên bảng tính.
Nếu chỉ dựa vào file gốc, copy Calendar và dán vào file của bạn. Muốn copy được cái Calendar này, bạn chuyển sang chế độ Design bằng cách bấm vào nút hình thước trên màn hình Visual Basic.
 
Upvote 0
Em muốn dùng cả calendar và conbobox để nhập dử liệu mà không biết cách làm. Dùng calendar để nhập ngày trong trường ngày 1 và ngày 2. dùng combobox để nhập dữ liệu các trường “tên vật liệu”, “loại vật liệu” và “ĐV”. Các bác xem trong file em sai chỗ nào rồi sửa giúp em với nhé! Cám ơn các bác
 

File đính kèm

Upvote 0
Các bác ai biết vấn đề này giúp em với nhé!
 
Upvote 0
Em muốn dùng cả calendar và conbobox để nhập dử liệu mà không biết cách làm. Dùng calendar để nhập ngày trong trường ngày 1 và ngày 2. dùng combobox để nhập dữ liệu các trường “tên vật liệu”, “loại vật liệu” và “ĐV”. Các bác xem trong file em sai chỗ nào rồi sửa giúp em với nhé! Cám ơn các bác
Code đúng là hơi lằng nhằng (lại sai 1 vài chổ)
Bạn thử sửa lại thế này xem
PHP:
Private Sub Calendar1_Click()
 If Not Intersect([C2:C50000,G2:G50000], ActiveCell) Is Nothing Then
   ActiveCell = Calendar1.Value
   Calendar1.Visible = False
 End If
End Sub
PHP:
Private Sub Cbo_Parts_Click()
  With ActiveCell
    If Not Intersect([D2:D50000], .Cells) Is Nothing Then
      .Offset(, 0) = Cbo_Parts.Value
      .Offset(, 1) = Cbo_Parts.Column(1)
      .Offset(, 2) = Cbo_Parts.Column(2)
    End If
  End With
End Sub
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count = 1 Then
    If Not Intersect([C2:C50000,G2:G50000], Target) Is Nothing Then
      Calendar1.Visible = True
      Calendar1.Top = Target.Top: Calendar1.Left = Target(, 2).Left
    ElseIf Not Intersect([D2:D50000], Target) Is Nothing Then
      Cbo_Parts.Visible = True
      Cbo_Parts.Top = Target.Top: Cbo_Parts.Left = Target.Left
      Cbo_Parts.Width = Target.Width: Cbo_Parts.Height = Target.Height
    ElseIf Application.CutCopyMode = False Then
      Calendar1.Visible = False
      Cbo_Parts.Visible = False
    End If
  End If
End Sub
 

File đính kèm

Upvote 0
Code đúng là hơi lằng nhằng (lại sai 1 vài chổ)
Bạn thử sửa lại thế này xem
PHP:
Private Sub Calendar1_Click()
 If Not Intersect([C2:C50000,G2:G50000], ActiveCell) Is Nothing Then
   ActiveCell = Calendar1.Value
   Calendar1.Visible = False
 End If
End Sub
PHP:
Private Sub Cbo_Parts_Click()
  With ActiveCell
    If Not Intersect([D2:D50000], .Cells) Is Nothing Then
      .Offset(, 0) = Cbo_Parts.Value
      .Offset(, 1) = Cbo_Parts.Column(1)
      .Offset(, 2) = Cbo_Parts.Column(2)
    End If
  End With
End Sub
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count = 1 Then
    If Not Intersect([C2:C50000,G2:G50000], Target) Is Nothing Then
      Calendar1.Visible = True
      Calendar1.Top = Target.Top: Calendar1.Left = Target(, 2).Left
    ElseIf Not Intersect([D2:D50000], Target) Is Nothing Then
      Cbo_Parts.Visible = True
      Cbo_Parts.Top = Target.Top: Cbo_Parts.Left = Target.Left
      Cbo_Parts.Width = Target.Width: Cbo_Parts.Height = Target.Height
    ElseIf Application.CutCopyMode = False Then
      Calendar1.Visible = False
      Cbo_Parts.Visible = False
    End If
  End If
End Sub

Cám ơn bác đã hướng dẫn. tuy nhiên có 1 vấn đề nữa trong file là sau khi nhập ở trường “tên nguyên vật liệu” em muốn xóa ô này thì phải làm sao? Sau khi xóa thì dữ liệu liên quan ở trường là “loại vật liệu” và “ĐV” cũng tự động xóa theo.
Em muốn hỏi thêm để đánh số trong trường “STT” tự động thì phải làm thế nào? Các bác giúp đỡ em tiếp với nhé
 
Upvote 0
Cám ơn bác đã hướng dẫn. tuy nhiên có 1 vấn đề nữa trong file là sau khi nhập ở trường “tên nguyên vật liệu” em muốn xóa ô này thì phải làm sao? Sau khi xóa thì dữ liệu liên quan ở trường là “loại vật liệu” và “ĐV” cũng tự động xóa theo.
Em muốn hỏi thêm để đánh số trong trường “STT” tự động thì phải làm thế nào? Các bác giúp đỡ em tiếp với nhé
Tạm thời bạn thêm sự kiện Worksheet_Change như vầy xem:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect([E2:E50000], Target) Is Nothing Then
    If IsEmpty(Target) Then Target.EntireRow.Delete
  ElseIf Not Intersect(Range([C2], [C65536].End(xlUp)), Target) Is Nothing Then
    Range([C2], [C65536].End(xlUp)).Offset(, -1).Value = Evaluate("ROW(R:R)")
  End If
End Sub
Khi ấy, nếu bạn xóa cell tại cột E thì dử liệu nguyên dòng đó sẽ được xóa theo
Còn khi bạn nhập ngày vào cột C thì cột B tự điền STT
-----------
Tuy nhiên tôi có gợi ý thế này: Với dử liệu của bạn, nếu dùng UserForm để nhập xem chừng sẽ nhanh hơn mà code bảo đảm cũng sẽ gọn hơn ---> Đở mất công rắc rối với mấy sự kiện Change
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bác, bác có thể viết cho em cái UserForm được không ạ? VBA em chẳng biết gì cả. cám ơn bác
 
Upvote 0
Cám ơn bác, bác có thể viết cho em cái UserForm được không ạ? VBA em chẳng biết gì cả. cám ơn bác
Nói thật, viết code thì tôi cũng tàm tạm... nhưng để thiết kế cái UserForm lại đòi hỏi có chút khiếu thẩm mỹ... (mà món này tôi lại quá kém... Người ta có thể vẽ rẹt rẹt trong vòng 10 phút trong khi tôi lại loay hoay có khi cả ngày chưa xong... Hic.. Hic...)
Hay là thế này đi, bạn hãy nghĩ ra cái giao diện UserForm trước ---> Như thế nào mà bạn cho là dể thao tác nhất, tôi sẽ dựa vào đó viết code cho bạn!
(Cái giao diện này bạn có thể vẽ ra bảng tính cũng được)
 
Upvote 0
Nói thật, viết code thì tôi cũng tàm tạm... nhưng để thiết kế cái UserForm lại đòi hỏi có chút khiếu thẩm mỹ... (mà món này tôi lại quá kém... Người ta có thể vẽ rẹt rẹt trong vòng 10 phút trong khi tôi lại loay hoay có khi cả ngày chưa xong... Hic.. Hic...)
Hay là thế này đi, bạn hãy nghĩ ra cái giao diện UserForm trước ---> Như thế nào mà bạn cho là dể thao tác nhất, tôi sẽ dựa vào đó viết code cho bạn!
(Cái giao diện này bạn có thể vẽ ra bảng tính cũng được)

Cám ơn bác đã tận tình giúp đỡ. Tuy nhiên em cũng không biết cách trình bày Form vì vậy tạm thời em nhập dữ liệu theo cách cũ vậy. khi nào có thời gian rãnh rỗi em sẽ học và nhờ bác tiếp. cám ơn bác
 
Upvote 0
Web KT

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

Back
Top Bottom