Hỏi về Control tương tự như listview nhưng cho phép nhập dữ liệu trên nó (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,902
Được thích
5,306
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Mình thấy một số phần mềm có phần để nhập liệu tương tự như listview. Các bạn cho mình hỏi là nó thuộc dạng control nào. Trong VBA có loại control này không?

Trong phần mềm HTKK, trên Form mình thầy có thanh Scrollbar để cuộn lên xuống màn hình nhập liệu (VD như phần Tờ khai thuế GTGT). Trong VBA mình có cách nào để có được chức năng tương tự như vậy không?

Mình xin cảm ơn
 
File của Ca_dafi khi mở lên nó hiện ra cái này

attachment.php


Bấm OK nó hiện tiếp:

attachment.php


OK cái nữa nó báo lổi:

attachment.php


Vào menu Tools\References thấy báo lỏi Missing...

attachment.php


Nhưng dù có Uncheck thì nó vẫn cứ báo lổi (mỗi khi double click lên cell)
------------------
Nếu gặp tình trạng này, hãy tải file MSCOMCT2.OCX về đăng ký là xong!
 

File đính kèm

  • untitled1.JPG
    untitled1.JPG
    16.8 KB · Đọc: 287
  • untitled2.JPG
    untitled2.JPG
    26.3 KB · Đọc: 255
  • untitled3.JPG
    untitled3.JPG
    9.2 KB · Đọc: 248
  • untitled4.JPG
    untitled4.JPG
    40.9 KB · Đọc: 257
Lần chỉnh sửa cuối:
Upvote 0
To: Anh Tuấn,
Anh đang dùng phiên bản Office nào?

Theo kinh nghiệm của em, thì em phải Update Office 2003 SP3 hoặc đối với Office 2007 cũng vậy. Mới tuần rồi mấy chương trình của em đều bị...sau khi em cập nhật thì OK.

Lê Văn Duyệt
 
Upvote 0
To: Anh Tuấn,
Anh đang dùng phiên bản Office nào?

Theo kinh nghiệm của em, thì em phải Update Office 2003 SP3 hoặc đối với Office 2007 cũng vậy. Mới tuần rồi mấy chương trình của em đều bị...sau khi em cập nhật thì OK.

Lê Văn Duyệt
Vừa mới tìm ra nguyên nhân ---> Thiếu MSCOMCT2.OCX Duyệt à
 
Upvote 0
Cái này em thấy tiện cho việc nhập dữ liệu từ form đưa vào bảng tính Excel: VD như bảng chấm công chẳng hạn. Viết code cho nó thì thế nào các bác nhỉ???
 
Upvote 0
Em thấy cái Subform này hay quá, sẽ từ từ nghiên cứu.
Còn một vấn đề nữa, đó là làm sao để khi chạy, ta có thể dùng chuột để kéo tăng hay giảm độ rộng của các cột lại được ah.
 
Upvote 0
Còn một vấn đề nữa, đó là làm sao để khi chạy, ta có thể dùng chuột để kéo tăng hay giảm độ rộng của các cột lại được ah.
Nhấn chọn đối tương-->Properties--> Customs-->Nhấn dấu ...-->Thẻ General
Tuỳ chọn trong mục:AllowUserResizing

Để xác định vị trí từng ô ta dùng thuộc tính Object.Row và Object.Col (Tính từ 0)
Để tạo tiêu đề cột ta nhập vào ô FormatString trong thẻ Styles |Tieu đề 1 | Tiêu đè 2 | ....

Lưu ý: Bạn đừng gọi là SubForm vì SubForm là Form nhúng trong Form còn đây là đối tượng trên Form
 
Lần chỉnh sửa cuối:
Upvote 0
Nhấn chọn đối tương-->Properties--> Customs-->Nhấn dấu ...-->Thẻ General
Tuỳ chọn trong mục:AllowUserResizing

Để xác định vị trí từng ô ta dùng thuộc tính Object.Row và Object.Col (Tính từ 0)
Để tạo tiêu đề cột ta nhập vào ô FormatString trong thẻ Styles |Tieu đề 1 | Tiêu đè 2 | ....

Lưu ý: Bạn đừng gọi là SubForm vì SubForm là Form nhúng trong Form còn đây là đối tượng trên Form

Viết code sao hả bác, kiểu này có vẻ mới quá nên em chưa biết viết code để gán vào sheet
 
Upvote 0
Viết code sao hả bác, kiểu này có vẻ mới quá nên em chưa biết viết code để gán vào sheet
VD nho nhỏ :
PHP:
[A1] = SubForm.TextMatrix(SubForm.Row, 1)


Sẵn đây các bạn cho mình hỏi làm sao có thể định dạng được dữ liệu nhập vào. VD như cột 2 định dạng là "dd/mm/yyyy", cột 3 định dạng là "#,##0"
 
Lần chỉnh sửa cuối:
Upvote 0
Mình ví dụ nạp dữ liệu từ sheet vào

Mã:
Private Sub nap()
With vsFlexArray1
For i = 1 To 20
For j = 1 To 3
.Row = i
.Col = j
.Text = Sheet1.Cells(i, j)
Next: Next
End With
End Sub
Bạn cứ định dạng bình thường
 
Upvote 0
Code nap có Format:
Mã:
Sub nap()
With vsFlexArray1
For i = 1 To 20
For j = 1 To 3
.Row = i
.Col = j
If IsDate(Sheet1.Cells(i, j)) Then
.Text = Format(Sheet1.Cells(i, j), "dd/mm/yyyy")
ElseIf IsNumeric(Sheet1.Cells(i, j)) Then
.Text = Format(Sheet1.Cells(i, j), "#,##0")
Else
.Text = Sheet1.Cells(i, j)
End If
Next: Next
End With
End Sub
 
Upvote 0
Mình ví dụ nạp dữ liệu từ sheet vào

Mã:
Private Sub nap()
With vsFlexArray1
For i = 1 To 20
For j = 1 To 3
.Row = i
.Col = j
.Text = Sheet1.Cells(i, j)
Next: Next
End With
End Sub
Bạn cứ định dạng bình thường

Đó là nạp từ sheet1 vào, thực hiện ngược lại thì làm sao hả bác, tức là nạp từ form vào sheet1 đó?
 
Upvote 0
Thì bạn đảo đi 1 chút:
Mã:
Private Sub nap()
With vsFlexArray1
For i = 1 To 20
For j = 1 To 3
.Row = i
.Col = j
Sheet1.Cells(i, j)=.Text
Next: Next
End With
End Sub
 
Upvote 0
Còn vấn đề về font chữ sao lại không gõ đwọc tiếng việt có dấu các bác nhỉ. Em đang dung font Unicode, gõ TeLex. Không biết trong form sử dụng font gì??? Bác náo biết chỉ giùm em với.
 
Upvote 0
Bạn vào Properties đổi ra font hố trợ tiếng Việt phù hợp Font của bạn. Bạn lưu ý các anh ấy đã nói là không hỗ trợ Unicode mà.
 
Upvote 0
Cái này có lẽ là mới và rất hay, mong mọi người tạo giúp một file dữ liệu hoàn chỉnh.
 
Upvote 0
Bạn vào Properties đổi ra font hố trợ tiếng Việt phù hợp Font của bạn. Bạn lưu ý các anh ấy đã nói là không hỗ trợ Unicode mà.
Chỉ nội 1 vụ không hổ trợ tiếng Việt Unicode là thấy làm biếng nghiêng cứu rồi.... Vì thời buổi này hầu hết chúng ta đều làm việc cho nước ngoài, nếu bắt buộc phải xài font của "ta" thì... AI XEM?
 
Upvote 0
Chỉ nội 1 vụ không hổ trợ tiếng Việt Unicode là thấy làm biếng nghiêng cứu rồi.... Vì thời buổi này hầu hết chúng ta đều làm việc cho nước ngoài, nếu bắt buộc phải xài font của "ta" thì... AI XEM?
Hì hì! Sao làm biếng vậy anh! Nếu làm việc cho nước ngoài thì mắc gì phải dùng Tiếng Việt Unicode!? Sao không dùng tiếng Anh luôn thể nhỉ?
 
Upvote 0
Theo ý kiến các bạn mình gửi 1 ví dụ liệt kê chứng từ KT.
Mạn phép Ca da_fi sửa Form của bạn, máy của mình không thể thêm được đối tượng mới khổ chứ.
Ndu: Cái khó là không hiển thị tiếng Việt chứ tiếng Anh thì có sao đâu
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em cùng quan điểm với anh ndu, không hỗ trợ font Unicode thì khó thực hiện lắm. Cho dù làm với người nước ngoài đi chăng nữa nhưng đó chỉ là số ít thôi. Không phải 100% dân VN ta đều làm cho tây và dùng ngôn ngữ tây phải không các bác.
 
Upvote 0
Hì hì! Sao làm biếng vậy anh! Nếu làm việc cho nước ngoài thì mắc gì phải dùng Tiếng Việt Unicode!? Sao không dùng tiếng Anh luôn thể nhỉ?
Vâng! Đương nhiên là xài tiếng Anh, nhưng ác 1 cái là hầu hết các ông Sếp đều muốn đa ngôn ngử ---> Như cty tôi, 1 báo cáo luôn phải có 3 thứ tiếng: Anh, Hàn, Việt ---> Vậy theo Kiệt thì làm sao đây? Có phải chỉ có Unicode mới đáp ứng được nhu cầu này không?
Ẹc... Ẹc...
 
Upvote 0
File của Ca_dafi khi mở lên nó hiện ra cái này

attachment.php

File mình làm thử, khi hiện ra thông báo này, nếu bấm nút Yes và kết hợp với đoạn code hủy bỏ các thông báo lỗi tiếp theo thì chương trình vẫn hoạt động tốt.

Các bạn cho mình hỏi có cách nào để bỏ qua thông báo ở hình trên không. Hoặc làm cách nào để tự động bấm nút yes và ẩn thông báo này đi luôn không. Chứ khi làm phần mềm mà phải lo cái vụ Update Office cho khách hàng thì chắc không ổn.
 
Upvote 0
File mình làm thử, khi hiện ra thông báo này, nếu bấm nút Yes và kết hợp với đoạn code hủy bỏ các thông báo lỗi tiếp theo thì chương trình vẫn hoạt động tốt.

Các bạn cho mình hỏi có cách nào để bỏ qua thông báo ở hình trên không. Hoặc làm cách nào để tự động bấm nút yes và ẩn thông báo này đi luôn không. Chứ khi làm phần mềm mà phải lo cái vụ Update Office cho khách hàng thì chắc không ổn.
Danh làm thế này xem:
1> Start\Run\Regedit
2> Duyệt tới key:
HKEY_CURRENT_USER\Software\Microsoft\VBA\Security
Lưu ý: Nếu chưa có Key Security thì bạn tự tạo lấy
3> Click phải khung bên phải của Security, chọn New\DWORD Value với các thông số sau:
Value Name = LoadControlsInForms
Value Data = 1

4> Đóng Registry và chạy lại file Excel xem thử
Hoặc đơn giản, bạn Export file đính kèm này vào Registry là xong
 

File đính kèm

Upvote 0
Các THẦY, các ANH ơi, sau khi tải File Sd VSFlex3.0.rar về nó báo lỗi liên tục, vào trong References... bỏ chọn 2 cái MISSING là Vflex gì đó và 1 cái common control (SP4) lại báo lỗi tiếp ngay Sub loaddl()
If Not c Is Nothing Then
Me.Txt_So = c.Text
Me.Txt_Ngay = c.Offset(, -1)
Lỗi báo như sau: Method or data member not found.


Cũng nói thêm là ngay ngày hôm qua thôi vẫn còn xài chức năng Additional Control... để chọn Listview Control, hôm nay không xài được nữa, chọn vào là nó chuyển ngay đến cái nút Toolbox. Các Anh, Chị cho biết lý do lỗi "ngang xương" này được không ạ? Cách khắc phục như thế nào? (Đừng nói với em là cài lại Win nha).-+*/-+*/-+*/
 
Upvote 0
Danh làm thế này xem:
1> Start\Run\Regedit
2> Duyệt tới key:
HKEY_CURRENT_USER\Software\Microsoft\VBA\Security
Lưu ý: Nếu chưa có Key Security thì bạn tự tạo lấy
3> Click phải khung bên phải của Security, chọn New\DWORD Value với các thông số sau:
Value Name = LoadControlsInForms
Value Data = 1

4> Đóng Registry và chạy lại file Excel xem thử
Hoặc đơn giản, bạn Export file đính kèm này vào Registry là xong

Nếu làm như vậy thì mình phải trực tiếp thao tác rồi.
ý của em là khi viết chương trình cho khách hàng sử dụng. Nếu gặp lỗi trên thì có cách nào (Viết code trong file excel chương trình) để nó tự động hoàn thiện luôn. Thay vì phải thao tác bằng tay thì làm sao cho Excel nó thay mình xử lý.
 
Upvote 0
Nếu làm như vậy thì mình phải trực tiếp thao tác rồi.
ý của em là khi viết chương trình cho khách hàng sử dụng. Nếu gặp lỗi trên thì có cách nào (Viết code trong file excel chương trình) để nó tự động hoàn thiện luôn. Thay vì phải thao tác bằng tay thì làm sao cho Excel nó thay mình xử lý.
Cũng dể thôi:
- Bạn tạo 1 file .BAT, bảo người ta chạy trước file này
- File BAT sẽ làm nhiệm vụ copy mscomct2.ocx vào thư mục System32 đồng thời Import luôn file .REG (2 file này ta đính kèm sẳn)
2 tiến trình này thậm chí có thể làm luôn bằng VBA (trong sự kiện WorkBook_Open)
Làm bằng tay được, lý nào tự động lại không xong!
Các THẦY, các ANH ơi, sau khi tải File Sd VSFlex3.0.rar về nó báo lỗi liên tục, vào trong References... bỏ chọn 2 cái MISSING là Vflex gì đó và 1 cái common control (SP4) lại báo lỗi tiếp ngay Sub loaddl()
.
Xem lại bài số #3
 
Upvote 0
Cũng dể thôi:
- Bạn tạo 1 file .BAT, bảo người ta chạy trước file này
- File BAT sẽ làm nhiệm vụ copy mscomct2.ocx vào thư mục System32 đồng thời Import luôn file .REG (2 file này ta đính kèm sẳn)
2 tiến trình này thậm chí có thể làm luôn bằng VBA (trong sự kiện WorkBook_Open)
Làm bằng tay được, lý nào tự động lại không xong!

Xem lại bài số #3

Em thì không rành cái vụ .Bat và .Reg lắm. Nếu có thể được, nhờ anh giúp ạ.
 
Upvote 0
Em thì không rành cái vụ .Bat và .Reg lắm. Nếu có thể được, nhờ anh giúp ạ.
Thôi.. làm bằng VBA luôn nha!
1> Code copy 1 file vào 1 nơi nào đó thì khỏi nói rồi
2> Import 1 file .REG vào Registry thật đơn giản đến không ngờ:
PHP:
Sub Test()
  Dim sFilename As String
  sFilename = "D:\MyReg.reg"   '<---- Đường dẩn chứa file Reg
  Shell "reg import """ & sFilename & """"
End Sub
Hoặc:
PHP:
Sub Test()
  Dim sFilename As String
  sFilename = "D:\MyReg.reg"   '<---- Đường dẩn chứa file Reg
  Shell "regedit.exe /s """ & sFilename & """"
End Sub
Trong đó MyReg.reg là tên file REG của ta!
Khi tạo 1 chương trình, ta cho code Copy file và code này vào sự kiện Workbook_Open là xong!
 
Upvote 0
Xin vui lòng cho hỏi lại

Ngay hôm qua tôi vẫn còn xài chức năng Additional Control... để chọn Listview Control, hôm nay không xài được nữa, chọn vào là nó chuyển ngay đến cái nút Toolbox. Các Anh, Chị cho biết lý do lỗi này được không ạ? Cách khắc phục như thế nào?
Cám ơn rất nhiều.
 
Upvote 0
Ngay hôm qua tôi vẫn còn xài chức năng Additional Control... để chọn Listview Control, hôm nay không xài được nữa, chọn vào là nó chuyển ngay đến cái nút Toolbox. Các Anh, Chị cho biết lý do lỗi này được không ạ? Cách khắc phục như thế nào?
Cám ơn rất nhiều.
Vậy thì xin CHIA BUỒN cùng bạn chứ biết làm sao!
- Nguyên nhân: Nhiều lắm.. và người ta cũng chỉ đoán chừng thôi
- Cách khắc phục: chỉ có 1 cách duy nhất ---> CÀI LẠI WINDOWS +-+-+-+ +-+-+-+ +-+-+-+
Ẹc... Ẹc...
 
Upvote 0
Vậy thì xin CHIA BUỒN cùng bạn chứ biết làm sao!
- Nguyên nhân: Nhiều lắm.. và người ta cũng chỉ đoán chừng thôi
- Cách khắc phục: chỉ có 1 cách duy nhất ---> CÀI LẠI WINDOWS +-+-+-+ +-+-+-+ +-+-+-+
Ẹc... Ẹc...

Trời, lỗi này em đã xem qua nhiều lần tại diễn đàn này rồi, tưởng thời gian qua có cách khắc phục nó chứ. Có khi nào là máy em bị virus không nhỉ?
 
Upvote 0
Trời, lỗi này em đã xem qua nhiều lần tại diễn đàn này rồi, tưởng thời gian qua có cách khắc phục nó chứ. Có khi nào là máy em bị virus không nhỉ?
Tôi không nghĩ đó là virus ---> Có lẽ có sự "tranh chấp" nào đó trong quá trình chạy code (load các ActiveX Control chẳng hạn)... vân vân và vân vân...
Nói chung là bạn có thể yên tâm về vấn đề virus... nhưng phải "bận tâm" khá nhiều để khắc phục lổi này: Cái lại Windows và tất cả các phần mềm
 
Upvote 0
Theo ý kiến các bạn mình gửi 1 ví dụ liệt kê chứng từ KT.
Mạn phép Ca da_fi sửa Form của bạn, máy của mình không thể thêm được đối tượng mới khổ chứ.
Ndu: Cái khó là không hiển thị tiếng Việt chứ tiếng Anh thì có sao đâu

em thấy trong form có đoạn code Public Function FG_AutosizeCols Sao cái này nó không Wordwrap.+-+-+-+

PHP:
Public Function FG_AutosizeCols(myGrid As vsFlexArray, Optional ByVal lFirstCol As Long = -1, Optional ByVal lLastCol As Long = -1, Optional bCheckFont As Boolean = False)
   Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long
   Dim lCellWidth As Long, lColWidth As Long
   Dim bFontBold As Boolean
   Dim dFontSize As Double
   Dim sFontName As String
   If bCheckFont Then
      ' save the forms font settings
      bFontBold = Me.FontBold
      sFontName = Me.FontName
      dFontSize = Me.FontSize
   End If
   With myGrid
      If bCheckFont Then
         lCurRow = .Row
         lCurCol = .Col
      End If
      If lFirstCol = -1 Then lFirstCol = 0
      If lLastCol = -1 Then lLastCol = .Cols - 1
      For lCol = lFirstCol To lLastCol
         lColWidth = 0
         If bCheckFont Then .Col = lCol
         For lRow = 0 To .Rows - 1
            If bCheckFont Then
               .Row = lRow
               Me.FontBold = .CellFontBold
               Me.FontName = .CellFontName
               Me.FontSize = .CellFontSize
            End If
            lCellWidth = Me.TextWidth(.TextMatrix(lRow, lCol))
            If lCellWidth > lColWidth Then lColWidth = lCellWidth
         Next lRow
         .ColWidth(lCol) = lColWidth + Me.TextWidth("W")
      Next lCol
      If bCheckFont Then
         .Row = lCurRow
         .Col = lCurCol
      End If
   End With
   If bCheckFont Then
      ' restore the forms font settings
      Me.FontBold = bFontBold
      Me.FontName = sFontName
      Me.FontSize = dFontSize
   End If
End Function
 
Upvote 0

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

Back
Top Bottom