Không chạy được hàm mới tạo bằng VBA (1 người xem)

  • Thread starter Thread starter the dr
  • Ngày gửi Ngày gửi
Liên hệ QC

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

the dr

Thành viên mới
Tham gia
27/7/11
Bài viết
9
Được thích
0
Mình mới học VBA được ít hôm. Bài giảng có phần tạo hàm mới, mình thấy code có vẻ đơn giản nhưng lúc ra bảng cel thì máy vẫn không nhận hàm mới mình tạo. Nhờ mọi người xem giúp xem mình làm sai ở đâu. Đây là công thức tính Dện tích hình chữ nhật. Xin cảm ơn

Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
'Ham tinh dien tich hinh chu nhat
Dien_Tich = Rong * Cao
End Function
 
Mình mới học VBA được ít hôm. Bài giảng có phần tạo hàm mới, mình thấy code có vẻ đơn giản nhưng lúc ra bảng cel thì máy vẫn không nhận hàm mới mình tạo. Nhờ mọi người xem giúp xem mình làm sai ở đâu. Đây là công thức tính Dện tích hình chữ nhật. Xin cảm ơn

Public Function Dien_Tich(Rong As Double, Cao As Double) As Double
'Ham tinh dien tich hinh chu nhat
Dien_Tich = Rong * Cao
End Function
Bạn kiểm tra lại vấn đề: Hàm này phải được đặt trong 1 Module của file có sử dụng nó (Module được tạo bằng cách chọn Insert\Module hoặc cách tương tự).
 
Upvote 0
Vẫn được mà, nhớ để trong module :

untitled.JPG
 
Upvote 0
Mình làm ở cel 2k7,mình làm như thế này:
Vào thẻ developer, mở hộp Visual basic, tiếp theo mình vào insert, ở phần Name mình gõ Dien_Tich, Type chọn funtion, Scope chọn Public rồi OK
Tiếp đó mình đánh đoạn code như trên vào. Mình làm theo y hướng dẫn.
Mong mọi người bỏ chút thời gian giúp đỡ newbie như mình
Xin cảm ơn
 
Upvote 0
Làm gì co insert Name nhỉ, bạn chọn insert Module như hình ở bài 3 nhé
 
Upvote 0
Name ở Insert phần procedure bạn ạ, cái này mình làm theo hướng dẫn
 
Upvote 0
File của mình cũng hiện ra module y hệt bạn, nhưng đến khi mình chuyển sang cel bằng phím alt+Q, gõ công thức thì cel báo không nhận được đoạn text mình gõ.
 
Upvote 0
File của mình cũng hiện ra module y hệt bạn, nhưng đến khi mình chuyển sang cel bằng phím alt+Q, gõ công thức thì cel báo không nhận được đoạn text mình gõ.
Bạn gõ như thế nào?
Nhập thử = Dien_tich(2,3) xem kết quả có bằng 6 không?
 
Upvote 0
Không được bạn ạ, ra lỗi #Name không hiểu text.Làm phiền bạn quá
 
Upvote 0
Không được bạn ạ, ra lỗi #Name không hiểu text.Làm phiền bạn quá
Phát sinh lỗi #NAME chứng tỏ Excel không nhận ra hàm tự tạo Dien_tich của bạn. Có thể chế độ Security trong Excel của bạn đang được thiết lập ở mức Disable all macros without nofitication, nó chặn không cho Macro hoạt động. Bạn thử làm theo hướng dẫn ở bài này xem có được không nhé.
 
Upvote 0
Đây là file của mình,nhờ mọi người check dùm
cảm ơn
 

File đính kèm

Upvote 0
File xlsx thì làm gì có code chứ? Làm VBA xong khi lưu lại nó có hỏi mà không xem nó hỏi gì, nhắm mắt bấm Yes nên mất hết code rồi.

Yes Or No.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn mọi người, mình đã sửa được rồi
 
Upvote 0
Em lập hàm trên Excel dùng VBA không tự cập nhật dữ liệu. Mỗi lần sửa dữ liệu lại phải nhấp đúp vào ô dữ liệu sử dụng hàm rồi Bấm Enter thì mới cập nhật dữ liệu. Các bác giải quyết E nhé. Tks
 

File đính kèm

Upvote 0
Em lập hàm trên Excel dùng VBA không tự cập nhật dữ liệu. Mỗi lần sửa dữ liệu lại phải nhấp đúp vào ô dữ liệu sử dụng hàm rồi Bấm Enter thì mới cập nhật dữ liệu. Các bác giải quyết E nhé. Tks
Thêm dòng Application.Volatile vào đầu code nhé
Mà nè: hàm gì mà kỳ cục thế nhỉ? Dùng LOOKUP cũng được vậy:
PHP:
=LOOKUP("chuyen",DuLieu!$A$2:$AY$2,DuLieu!$A$1:$AY$1)
 
Upvote 0
Thêm dòng Application.Volatile vào đầu code nhé
Mà nè: hàm gì mà kỳ cục thế nhỉ? Dùng LOOKUP cũng được vậy:
PHP:
=LOOKUP("chuyen",DuLieu!$A$2:$AY$2,DuLieu!$A$1:$AY$1)

Theo cách đó được đoạn code

Mã:
Application.Volatile
Public Function thamchieu00()
Dim i As Integer
i = 1

Do While i < 51
    
    If Worksheets("DuLieu").Cells(2, i) = "Chuyen" Then
        thamchieu00 = Worksheets("DuLieu").Cells(1, i)
    End If
    i = i + 1
Loop
End Function

Sau khi thêm KQ là: #NAME?

Nếu bài toán chỉ là tìm đối tượng theo một loại dữ liệu như vậy thì E cũng sẽ dùng hàm VLOOKUP hoặc HLOOKUP. Ví dụ E upload lê chỉ là dẫn chứng để các bác dễ bắt bệnh. Chờ ý kiến khác của các bác.
 
Upvote 0
Theo cách đó được đoạn code

Mã:
Application.Volatile
Public Function thamchieu00()
Dim i As Integer
i = 1

Do While i < 51
    
    If Worksheets("DuLieu").Cells(2, i) = "Chuyen" Then
        thamchieu00 = Worksheets("DuLieu").Cells(1, i)
    End If
    i = i + 1
Loop
End Function

Sau khi thêm KQ là: #NAME?

Nếu bài toán chỉ là tìm đối tượng theo một loại dữ liệu như vậy thì E cũng sẽ dùng hàm VLOOKUP hoặc HLOOKUP. Ví dụ E upload lê chỉ là dẫn chứng để các bác dễ bắt bệnh. Chờ ý kiến khác của các bác.
Má ơi! Bạn... thật thà ghê!
Người ta nói thêm "cái gì đó" vào đầu code là ý muốn nói đến code của bạn đấy
Dù ở ĐẦU thì ít nhất nó cũng phải nằm DƯỚI dòng Public Function thamchieu00() chứ +-+-+-+
Trên diễn đàn người ta hay hướng dẫn theo kiểu: Thêm On Error Resume Next vào đầu code ---> Nếu bạn quá thật thà mà cho dòng ấy lên tận trên đầu thật thì.. code nó "điên" luôn
--------------------------
Nói thêm: So sánh theo kiểu If Worksheets("DuLieu").Cells(2, i) = "Chuyen" Then là có phân biệt HOA thường à nha
 
Lần chỉnh sửa cuối:
Upvote 0
E đang tìm hiểu VBA để làm chương trình tách lọc TKB cho Giáo viên mà.
Băn khoăn của E đã được giải đáp.
Cám ơn A. Chúc thành công
 
Upvote 0
Anh ndu96081631 giúp em lỗi này nữa (trong file đính kèm - định dạng .xlsm)
Khi E sử dụng hàm tkbgiaovien() đã lập thì nó luôn trả về KQ là: 0


Cám ơn Anh.
 

File đính kèm

Upvote 0
Anh ndu96081631 giúp em lỗi này nữa (trong file đính kèm - định dạng .xlsm)
Khi E sử dụng hàm tkbgiaovien() đã lập thì nó luôn trả về KQ là: 0


Cám ơn Anh.
Hàm của bạn;
PHP:
Public Function tkbgiaovien()
Application.Volatile
Dim i As Integer
i = 3
Do While i < 51
    
    If Worksheets("TKBChieuGv").Cells(3, i) = Worksheets("Giaovien").Cells(18, 5) Then
        tkbgiaovien = Worksheets("TKBChieuGv").Cells(2, i)
    End If
    i = i + 1
Loop
End Function
Chẳng hiểu bạn muốn làm cái gì luôn, vì;
Worksheets("Giaovien").Cells(18, 5) là giá trị cell E18 tại sheet Giaovien... Nó hiện đang = 4 (nói chung cột E đều là giá trị số)
Worksheets("TKBChieuGv").Cells(3, i) là các giá trị tại dòng 3 của sheet TKBChieuGv, bắt đầu từ cột C (do i = 3) ---> Toàn bộ dòng này đều là Text (tên của các giáo viện)
Vậy mà bạn lại lấy 2 giá trị này so sánh với nhau ---> Đến tết Chà Và cũng không bằng
Tóm lại: Tốt nhất bạn hãy mô tả vấn đề để mọi người giải quyết giúp bạn
(Xin lỗi nếu tôi có quá lời nhưng thật sự là tôi muốn nói rằng: cái hàm của bạn nó quá.. tào lao ---> Chẳng ra dáng 1 hàm tự tạo gì cả )
 
Upvote 0
hjx. Cám ơn Anh. Em soạn CODE nhầm. Anh nói xong Em nhìn lại mới biết nhầm. Đầu óc quá tải mất rồi
Em đã sửa từ
Mã:
[COLOR=#007700]If [/COLOR][COLOR=#0000BB]Worksheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"TKBChieuGv"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]Worksheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Giaovien"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]18[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]5[/COLOR][COLOR=#007700]) [/COLOR][COLOR=#0000BB]Then[/COLOR]
thành
Mã:
[COLOR=#007700]If [/COLOR][COLOR=#0000BB]Worksheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"TKBChieuGv"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]i[/COLOR][COLOR=#007700]) = [/COLOR][COLOR=#0000BB]Worksheets[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"Giaovien"[/COLOR][COLOR=#007700]).[/COLOR][COLOR=#0000BB]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]18[/COLOR][COLOR=#007700], [/COLOR]4[COLOR=#007700]) [/COLOR][COLOR=#0000BB]Then[/COLOR]
CODE chạy ngon lành rồi
(nhầm giữa 45)

 
Lần chỉnh sửa cuối:
Upvote 0
Em viết một hàm Excel (thêm dòng Application.Volatile ở đầu Code). Em sử dụng hàm đó trong khoảng 5000 ô dữ liệu. Mỗi lần sửa dữ liệu ở một ô nào đó (thuộc Sheets đó hoặc Sheets khác) là hàm đó lại tự động load lại toàn bộ dữ liệu ở 5000 ô, do đó rất nặng.

Bây giờ Em muốn có 1 nút điều khiển. Khi nào sửa xong thì Click vào nút đó để hàm đó tự chạy và load lại dữ liệu ở toàn bộ các ô mà hàm đó có mặt

Rất mong các bác giúp đỡ
 
Upvote 0

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

Back
Top Bottom