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

Status
Không mở trả lời sau này.

huyhoang_mmyeht

Thành viên hoạt động
Tham gia ngày
5 Tháng năm 2009
Bài viết
115
Được thích
2
Điểm
370
Tuổi
37
mình hơi gà bạn có thể giúp mình làm bản test được không?
 

duytmd

Thành viên chính thức
Tham gia ngày
28 Tháng bảy 2010
Bài viết
78
Được thích
2
Điểm
370
Tuổi
39
Chào các anh chị em trong diễn đan GPE, e có file excel này muốn nhờ ac viết giúp cho e 1 code.
Ở cột C hàng thứ 9 trở đi, khi muốn gõ đúng mã hiệu như sheet DongiaTTH (ví dụ:CO.01102) thì tại các cột C,D,F,G và H sẽ lọc số liệu tương ứng từ sheet DongiaTTH với mã hiệu đã chọn và past vào các cột đã nói ở trên. Còn nếu gõ không đúng mã hiệu hoặc click phải vào cột C hàng thứ 9 thì xuất hiện một useform và trong useform sẽ xuất hiện các số liệu như sheet DongiaTTH và lúc đó ta có thể xem hoặc click các mã hiệu rồi chọn thì các số liệu đó tự động past vào sheet chi tiết. code này giống như code của phần mềm dự toán vậy. em xin cám ơn
 

File đính kèm

Lần chỉnh sửa cuối:

huhumalu

Thành viên hoạt động
Tham gia ngày
20 Tháng mười 2009
Bài viết
104
Được thích
7
Điểm
370
Tuổi
30
Nhờ mọi người sửa giúp đoạn code sau.

Nhờ anh em trong diễn đàn xem thử kg biết bị sao mà nó lại báo lỗi. Tuy có chạy được theo yêu cầu định dạng như kg biết nó lại bị Debug. ||||| Nhờ anh em sửa lại giúp.
Mã:
Sub DinhDangOChu()
    Dim i, x, a, b As Integer
    Dim lastrow As Long
    lastrow = ActiveCell.End(xlDown).Row
    a = ActiveCell.Row
    b = ActiveCell.Column
    For i = 0 To lastrow - 1
    Cells(a, b).Offset(i, 5) = "=SEARCH(CHAR(10),R[0]C[-5])"
    x = ActiveCell.Offset(i, 5)
    With Cells(a, b).Offset(i, 0).Characters(Start:=1, Length:=x).Font
        .Name = "Times New Roman"
        .FontStyle = "Bold"
    End With
    With Cells(a, b).Offset(i, 0).Characters(Start:=x, Length:=999).Font
        .Name = "Arial"
        .FontStyle = "Italic"
    End With
    Next i
End Sub
 

File đính kèm

sealand

Thành viên gạo cội
Tham gia ngày
16 Tháng năm 2008
Bài viết
4,877
Được thích
7,754
Điểm
860
Tuổi
59
Nơi ở
Hải Phòng
Bạn sai ở đây

For i = 0 To lastrow - 1

Phải là

For i = 0 To lastrow - a


vì bạn xác định vượt vùng dữ liệu nên code bị lỗi khi chạy vào ô trống . Cũng nên On error Resume Next vào đầu Code vì nếu không có thì trong vùng có 1 ô nào đó trống cũng tèo.
 
Lần chỉnh sửa cuối:

huhumalu

Thành viên hoạt động
Tham gia ngày
20 Tháng mười 2009
Bài viết
104
Được thích
7
Điểm
370
Tuổi
30
Cảm ơn bạn rất nhiều đã giúp. Mình chạy được code trên rồi. Bạn cho mình hỏi thêm "On error Resume Next" là sao vậy bạn ? có cách nào để nó "trượt" nhanh hơn kg ?
Có cách nào để nếu mình click vào ô trống hay ô kg có kí tự Char(10) thì code kg chạy kg ? Vì khi click vào mình thấy nó chạy rất lâu và chạy hết bảng tính luôn.
 
Lần chỉnh sửa cuối:

Ba Tê

Cạo Rồi Khỏi Gội
Tham gia ngày
5 Tháng năm 2009
Bài viết
11,013
Được thích
15,555
Điểm
1,860
Tuổi
60
Nơi ở
An Giang
Cảm ơn bạn rất nhiều đã giúp. Mình chạy được code trên rồi. Bạn cho mình hỏi thêm "On error Resume Next" là sao vậy bạn ? có cách nào để nó "trượt" nhanh hơn kg ?
Có cách nào để nếu mình click vào ô trống hay ô kg có kí tự Char(10) thì code kg chạy kg ? Vì khi click vào mình thấy nó chạy rất lâu và chạy hết bảng tính luôn.
Thử chạy code này xem:
PHP:
Sub DinhDangOChu2()
Application.ScreenUpdating = False
Dim Rng As Range, Cll As Range, Tem As Long
Set Rng = Range(ActiveCell, Cells(65000, ActiveCell.Column).End(xlUp))
For Each Cll In Rng
If Cll.Value <> vbNullString Then
    Tem = InStr(1, Cll, Chr(10), 1)
    With Cll.Characters(Start:=1, Length:=Tem - 1).Font
        .Name = "Times New Roman"
        .FontStyle = "Bold"
    End With
    With Cll.Characters(Start:=Tem + 1, Length:=200).Font
        .Name = "Arial"
        .FontStyle = "Italic"
    End With
End If
Next
Set Rng = Nothing
Application.ScreenUpdating = False
End Sub
 

huhumalu

Thành viên hoạt động
Tham gia ngày
20 Tháng mười 2009
Bài viết
104
Được thích
7
Điểm
370
Tuổi
30
Cảm ơn bạn Ba tê, đúng là qua mảng nó chạy nhanh hơn hẳn. Cảm ơn bạn rất nhiều.
 

tiendungnst

Thành viên chính thức
Tham gia ngày
9 Tháng bảy 2007
Bài viết
86
Được thích
5
Điểm
0
Chào ACE diễn đàn GPE!
Mình cần một đoạn CODE VBA để tự động tổng hợp dữ liệu từ nhiều File excel trong cùng một Foder, yêu cầu của bài tập là:
File tổng hợp sẽ tự động tổng hợp dữ liệu của tất cả các file có trong một Foder (số lượng file trong foder này không bị giới hạn và không biết trước sẽ có bao nhiêu file) dữ liệu được tổng hợp theo từng CELL của từng Sheet tương ứng.
Mình đã tham khảo bài viết của bác @anhtuan1066 ở đây http://www.giaiphapexcel.com/forum/showthread.php?7146-Đố-vui-về-VBA!&p=253055#post253055 để viết CODE nhưng nó chỉ lấy dữ liệu được từ 1file,
Nhờ các bạn xem và chỉnh sửa CODE để có thể thực hiện bài tập ah. Vui lòng xem file đính kèm.
Để CODE thực thi trên file (tất cả các Sheet của file tổng hợp đều được tổng hợp dữ liệu) thì phải chỉnh sửa ntn ah?
 

File đính kèm

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Được thích
52,324
Điểm
11,910
nhờ mấy a giải thik dùm e cái code này.code này viết để điều khiển mạch quang báo led ma trận dùng AT 89s52.code này là code asm.
Đây là diễn đàn Excel mà bạn
Ở đây chuyên về VBA và Visual Basic, bạn hỏi cái gì đâu có phải là "lộn tiệm" không?
 

ptm0412

Excel Ordinary Member
Thành viên BQT
Super Moderator
Tham gia ngày
4 Tháng mười một 2007
Bài viết
9,286
Được thích
28,278
Điểm
1,910
Tuổi
57
Nơi ở
Gò Vấp

vuquyen10693

Thành viên mới
Tham gia ngày
25 Tháng sáu 2013
Bài viết
34
Được thích
9
Điểm
0
Nơi ở
Hà Nội
ĐÂY LÀ MỘT ĐOẠN CODE MÌNH THAM KHẢO TỪ FILE TRÊN DIỄN ĐÀN VÀ THAY ĐỔI CHÚT THÔI
Là một đoạn code để mình nhập hồ sơ khách mua hàng, có 3 cột nhập là Tên - Địa chỉ - Thông tin
Private Sub CommandButton1_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
If TextBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Then
MsgBox "Your information is insufficient", , "ATTENTION !"
Exit Sub
End If
'find first empty row in database
iRow = ws.Cells(Rows.Count, 2) _
.End(xlUp).Offset(1, 0).Row
'copy the data to the database
ws.Cells(iRow, 2).Value = Me.TextBox1.Value
ws.Cells(iRow, 4).Value = Me.TextBox2.Value
ws.Cells(iRow, 6).Value = Me.TextBox3.Value
'clear the data
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
Me.TextBox1.SetFocus
End Sub

Thật ra mình chẳng biết tẹo gì về VBA, nhìn rồi đoán thôi, cái (IRow,4)..(IRow,2) thì hiểu đó là cột tương ứng từ A,B,C....
Nhưng ''CÁI SỐ 2'' kia thì mình cứ thay đổi linh tinh cả. Không biết xác định thế nào để thông tin nhập vào
rơi đúng dòng đầu tiên sau tiêu đề mình cần.
Các bạn giúp với!. hix
 

Quang Dat HP

Thành viên mới
Tham gia ngày
19 Tháng bảy 2013
Bài viết
3
Được thích
0
Điểm
0
Mình có bài toán yêu cầu như thế này. Cột A nhập dữ liệu thì cột B hàng tương ứng hiển thị thời gian nhập dữ liệu của cột A. Giả sử ô A2 nhập dữ liệu thì ô B2 hiển thị thời gian nhập cô A2, sau đó ô B2 tự động khóa lại không cho người dùng tác động điều chỉnh. Khi ô A2 được nhập dữ liệu mới thì ô B2 tự động mở ra và hiển thị thời gian nhập số liệu tương ứng rồi lại khóa lại.
Mình mới có code cho hiển thị thời gian, chưa có code cho trạng thái khóa và mở khóa cho Ô B2 như trên, các bác có cao kiến gì giúp đỡ em vs.
code của em như sau:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cll As Range
If Intersect(Target, [A1:A10]) Is Nothing Then Exit Sub
For Each Cll In Intersect(Target, [A1:A10])
If Cll <> "" Then
If Cll <> Cll.ID Then
Cll.Offset(, 1) = Format(Now, "hh:mm AM/PM")
Cll.ID = Cll
End If
Else
Cll.Offset(, 1).ClearContents
Cll.ID = ""
End If
Next
End Sub
 

namkpac

Thành viên thường trực
Tham gia ngày
25 Tháng mười một 2008
Bài viết
272
Được thích
9
Điểm
685
Đây là diễn đàn Excel mà bạn
Ở đây chuyên về VBA và Visual Basic, bạn hỏi cái gì đâu có phải là "lộn tiệm" không?
Nhờ các anh chị giải thích code của hàm sau với:

Private Declare Function GetMeID Lib "excelqt.dll" (ByVal RT As String) As Integer
Declare Function GetActiveWindow Lib "user32" () As Long

Function ThongtinKTXD(ByVal ODIA As String, SOHDDSR As Integer) As String
Dim Serial As String
Dim ret As Integer
Serial = Space$(256)
ret = GetMeID(Serial)
If SOHDDSR = 13971 Then
ThongtinKTXD = Serial
ThongtinKTXD = Trim(ThongtinKTXD)
Else
ThongtinKTXD = ""
End If
End Function

Function NumberWindow() As Long
Dim NumberWND As Long
NumberWindow = GetActiveWindow()
End Function
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Được thích
52,324
Điểm
11,910
Hỏi lại bạn hàm này
Mã:
Private Declare Function GetMeID Lib "excelqt.dll" (ByVal RT As String) As Integer
Ở đâu ra vậy?
 

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia ngày
5 Tháng sáu 2008
Bài viết
30,166
Được thích
52,324
Điểm
11,910
Em copy trong 1 modul và em ko biết nó làm việc như thế nào, anh giúp em với được ko?
Tôi đoán đến 99% rằng hàm này do ai đó tạo ra từ VB6 và đóng gói thành DLL (file excelqt.dll) để dùng trên Excel
Vậy nếu chưa cài đặt chương trình để có file excelqt.dll thì làm sao mà test đây?
Mà nè, tự nhiên copy module của người ta về test chơi vậy sao? Ít ra bạn cũng phải biết code ấy dùng vào việc gì chứ?
 

namkpac

Thành viên thường trực
Tham gia ngày
25 Tháng mười một 2008
Bài viết
272
Được thích
9
Điểm
685
cho em hỏi với, nếu khi cài đặt thì file này nó nằm trong system phải không anh? em đang tìm hiểu cách làm HWID như 1 đề tài em có hỏi trên diễn đàn. Nếu đúng vậy thì em có tìm được trên google 1 bộ form tạo HWID từ VB6. có gì anh chỉ giúp em với nha. Cảm ơn anh ndu96081631 nhiều
 

maytinhvp01

Thành viên thường trực
Tham gia ngày
27 Tháng bảy 2013
Bài viết
389
Được thích
178
Điểm
395
Nơi ở
VĩnhYên_VP
Chỉ giúp cho sai dòng code VBA ( lính mới)

Public Function tong(sobachu As Long)
Dim a As Long, b As Long, c As Long
c = sobachu Mod 10
b = sobachu Mod 100 - c
a = (sobachu - b * 10 - c) / 100
tong = a + b + c
End Function

Đề bài là: Viết hàm nhận 1 số nguyên dương có 3 chữ số, tính tổng của 3 chữ số đó. Mình đã viết nhủ trên nhưng chạy thử với số 456 sai.( kết quả đúng 15 lại ra 56). Thank!
 

HYen17

Thành viên cằn cỗi.
Tham gia ngày
27 Tháng năm 2007
Bài viết
4,481
Được thích
6,162
Điểm
100
Tuổi
19
Bạn thử với hàm này & sau đó đối chiếu:

Mã:
[B]Function Tong3So(ABC As Long)
[/B] Tong3So = ABC \ 100 + (ABC \ 10 Mod 10) + (ABC Mod 10)
[B]End Function[/B]
 
Status
Không mở trả lời sau này.
Top