Hỏi đáp về VBA (các vấn đề căn bản nhất)

Liên hệ QC

havietchuong

Thành viên tiêu biểu
Tham gia
16/6/09
Bài viết
490
Được thích
570
Giới tính
Nam
Nghề nghiệp
Giáo viên tiểu học.
Tôi không biết đặt đặt câu hỏi này nơi nào cho đúng, xin gởi vào đây. Nếu có sai xin thông cảm cho người mới học VBA.
Trong 1 cửa sổ Module có thể ghi nhiều nhiều Macro và mỗi macro có thể ứng với 1 tổ hợp phím nào đó được không?
Tôi thử nhiều lần thì khi được khi không. Không biết nó thế nào? Trong tập tin sau có lỗi gì không trong cách ghi Macro? Cám ơn.
 

File đính kèm

  • baitap1.xls
    28 KB · Đọc: 244
Lần chỉnh sửa cuối:
Bác vào Tools/Macro/Security chọn Medium hoặc Low rồi chạy lại xem thế nào nhé!
 
Upvote 0
Upvote 0
Khi viết xong đoạn code, tôi save thì nhận được 1 câu thêm vào sau đoạn code đó là "ActiveWorkbook.Save" và đoạn code tôi vừa lập thực hiện không được. Nhờ các bạn cho biết câu báo lỗi ấy có ý gì? Muốn khắc phục phải làm bằng cách nào? Cám ơn.
 
Upvote 0
Khi viết xong đoạn code, tôi save thì nhận được 1 câu thêm vào sau đoạn code đó là "ActiveWorkbook.Save" và đoạn code tôi vừa lập thực hiện không được. Nhờ các bạn cho biết câu báo lỗi ấy có ý gì? Muốn khắc phục phải làm bằng cách nào? Cám ơn.

Lệnh này có nghĩa là lưu lại trong workbook đang hiện hành (giống như bấm Ctr+S), anh kiểm tra lại xem đối tượng thực hiện có đúng không? Vì lệnh này báo lỗi thì cũng hơi lạ, vì đã dính VBA thì ai cũng sử dụng đối tượng workbook.
 
Upvote 0
[/ATTACH]Chỉ vì mới học nên phải làm phiền các bạn nữa rồi.
Trước đây tôi cũng viết đoạn code như thế này thì nó chạy bình thường nhưng bây giờ xóa đi rồi viết lại không sao nó không chạy mà tô vàng báo lỗi thế này, nhờ các bạ chỉ giúp. Cám ơn.
 

File đính kèm

  • chuong3.JPG
    chuong3.JPG
    86.5 KB · Đọc: 58
Upvote 0
[/ATTACH]Chỉ vì mới học nên phải làm phiền các bạn nữa rồi.
Trước đây tôi cũng viết đoạn code như thế này thì nó chạy bình thường nhưng bây giờ xóa đi rồi viết lại không sao nó không chạy mà tô vàng báo lỗi thế này, nhờ các bạ chỉ giúp. Cám ơn.
Chuyển thành : ActiveCell.Offset(, 2).FormulaR1C1 = "=RC[-2]+RC[-1]" sẽ ổn.
 
Upvote 0
Đúng vậy Khoa ạ.
Bố chỉnh lại, nó đã chạy bình thường. Do mình chủ quan quá.
Hy vọng sẽ tìm hiểu thêm nhiều điều mới lạ trên VBA.
Cám ơn nha.
 
Upvote 0
Cám ơn các ban.
Qua hướng dẫn của các bạn, tôi đã viết được những phép tính cơ bản trên dòng, cột, một số ô bất kì.
Nay muốn vận dụng vào hàm đoạn code sau, tôi dùng đúng cú pháp của hàm Sum trong Excel nhưng không biết tại sao nó báo sai.
Nhờ các bạn có ý kiến giúp đỡ. Cám ơn.
chuong6.JPG
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể cài đặt TeamViewer5 vào máy, khi nào có vướng mắc gì mà tôi rảnh, sẽ hướng dẫn trực tiếp hoặc thực hành trực tiếp trên máy bạn.
Còn không, lần sau, bạn chỉ nên chụp hình cái thông báo lỗi, còn code bạn copy đoạn code post lên, chỉ rõ báo lỗi dòng nào thôi:
- không có thông báo lỗi thì không thể giải quyết được
- nếu muốn test lại hộ bạn thì không copy code về test được, vì là hình chụp. Phải gõ lại bằng tay, làm biếng lắm.
Tôi đang online Yahoo Messenger (thanhmy_pham)
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn các ban.
Qua hướng dẫn của các bạn, tôi đã viết được những phép tính cơ bản trên dòng, cột, một số ô bất kì.
Nay muốn vận dụng vào hàm đoạn code sau, tôi dùng đúng cú pháp của hàm Sum trong Excel nhưng không biết tại sao nó báo sai.
Nhờ các bạn có ý kiến giúp đỡ. Cám ơn.
Code trên thiếu dấu = và dấu ) tại hàm SUM
Lý ra phải vầy:
ActiveCell.Offset(, 4) = "=SUM(RC[-1]:RC[-4])"
Mấy lỗi đơn giản này, chịu khó "nhìn" là phát hiện ngay!
 
Upvote 0
Khoa có thể giải thích về 2 hàng mà Khoa viết thêm để được hiểu rõ thêm. Cám ơn.
With ActiveCell
.........
End With
 
Upvote 0
Khoa có thể giải thích về 2 hàng mà Khoa viết thêm để được hiểu rõ thêm. Cám ơn.
With ActiveCell
.........
End With
Theo mình, khuyên Chương khoan quan tâm đến cú fáp With . . . End With vội.
Chỉ cần hiểu nôm na như trong toán học người ta gộp thừa số chung vậy mà:
3 * (n -1) + 5* (1 - n) => (n - 1)* ( 3 - 5)

Sau này trình độ hơi cao rồi thì cú fáp này vừa thoáng vừa mát (Kể cả trên bình diện tốc độ chương trình nữa đó nha)

Bổ sung: Nếu viết như bạn Chương thì:
Để hiểu, ta ví dụ Activecell là Phòng tắm (FT) & vào đầu chương trình ta đang ở fòng khách (FK)

Dòng lệnh 1 ta hạ lệnh nó vô FT đo chiều cao cửa sổ
(Nó sau khi đo xong sẽ ra FK)
Dòng lệnh 2 vô FT đo chiều cao vòi sen
(Nó lại vô FT, đo xong, nó lại ra FK)
Cứ như vậy thêm ba lần bên dưới nữa được lặp lại.

Nếu ta dùng cú fáp With . . . End With thì nó sẽ ở lì trong đó, thực thi toàn bộ 5 nhiệm vụ rồi mới ra FK.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Khoa có thể giải thích về 2 hàng mà Khoa viết thêm để được hiểu rõ thêm. Cám ơn.
With ActiveCell
.........
End With
"Đồng bào" Havietchuong thân mến, theo mình hiểu cứ nôm na là như thế này
Với cái CELL bạn đang chọn(ActiveCell), bạn muốn làm cái quái gì nó
With ActiveCell ( bắt đầu)
Bạn có thể định dạng Đậm,Nghiêng cho chữ, định dạng Font chữ, màu nền, màu chữ, gán công thức, gán value, nhích qua phải, quẹo qua trái, đi lên, tuột xuống v v...và v v..
Khi nào chán rồi thì bạn End With cho nó hiểu là bạn không muốn làm gì đụng chạm tới nó nữa
Hihi, hiểu có "bi" nhiêu đó thôi
 
Upvote 0
Khoa có thể giải thích về 2 hàng mà Khoa viết thêm để được hiểu rõ thêm. Cám ơn.
With ActiveCell
.........
End With
Đơn giản là gần giống với việc lấy thừa số chung ra ngoài thôi.
Thay vì anh viết code như sau:
............
ActiveCell.Formula = "=Concatenate(""Hello"",""Hehe"")"
ActiveCell.Copy ActiveCell.Offset(1, 1)
............
Thì có thể viết lại như sau:
.........................
With ActiveCell
.Formula = "=Concatenate(""Hello"",""Hehe"")"
.Copy .Offset(1, 1)
End With
........................
 
Upvote 0
Để hiểu, ta ví dụ Activecell là Phòng tắm (FT) & vào đầu chương trình ta đang ở fòng khách (FK)

Dòng lệnh 1 ta hạ lệnh nó vô FT đo chiều cao cửa sổ
(Nó sau khi đo xong sẽ ra FK)
Dòng lệnh 2 vô FT đo chiều cao vòi sen
(Nó lại vô FT, đo xong, nó lại ra FK)
Cứ như vậy thêm ba lần bên dưới nữa được lặp lại.

Nếu ta dùng cú fáp With . . . End With thì nó sẽ ở lì trong đó, thực thi toàn bộ 5 nhiệm vụ rồi mới ra FK.
Từ ngày biết đến With... End With, em khoái xài vô cùng... vì nó... mát (chắc do được ở lâu trong FT...)
Ẹc... Ẹc...
Một trong những tiện lợi của With... End With (mà em thích) là đở mất công khai báo biến...
Ví dụ thay vì viết thế này:
PHP:
Sub Test()
  Dim Dic
  Set Dic = CreateObject("Scripting.Dictionary")
  If Not Dic.Exists(Gì gì đó) Then
      Dic.Add Gì gì đó, ""
  End If
  ...
  ...
End Sub
Thì em thích "cải tiến" như vầy hơn
PHP:
Sub Test()
  With  CreateObject("Scripting.Dictionary")
    If Not .Exists(Gì gì đó) Then
      .Add Gì gì đó, ""
    End If
  End With
  ...
  ...
End Sub
Đở tốn 1 biến!
 
Lần chỉnh sửa cuối:
Upvote 0
Việc tìm hiểu về các phép tính, phần nào đã được giải toả, nay tôi muốn tìm hiểu thêm về những bài học trên GPE nhưng khi gõ đoạn code sau vào thì không thực hiện được, mong các bạn chỉ giúp. Đoạn code như sau: Bị bào lỗi ở hàng tô màu.
Sub hoc1()
Range("B2").Select
With Selection
.HorizontalAlignment = x1Center
.VerticalAlignment = x1Center
End With
Range("B2:F2").Select
Selection.Merge
End Sub

Cám ơn.
 
Upvote 0
Khi minh chuyển thành chữ in thì bạn có thấy gì không:

[FONT=&quot].HorizontalAlignment = x1Center[/FONT][FONT=&quot]
[/FONT][FONT=&quot].VerticalAlignment = x1Center

2 ký tự màu đỏ là chữ L chứ không phải là số 1 như bạn
[/FONT]
 
Upvote 0
Web KT
Back
Top Bottom