Renato từ Ý hỏi:
Làm cách nào để mở sổ làm việc trong VBA khi chọn từ danh sách? Khi tôi ghi một macro, nó sẽ mã hóa tên của tệp đã chọn trong macro.
Có một lệnh trong VBA được gọi là GetOpenFileName. Nó sẽ hiển thị hộp Mở tệp. Bạn có thể điều hướng đến một thư mục, chọn tệp và sau đó nhấp vào Mở. Tại thời điểm này, lệnh không mở tệp, nó chỉ chuyển tên trở lại chương trình của bạn. Đây là một ví dụ về mã đang được sử dụng:
Sub TestIt() NewFN = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file") If NewFN = False Then ' They pressed Cancel MsgBox "Stopping because you did not select a file" Exit Sub Else Workbooks.Open Filename:=NewFN End If End Sub
Roger hỏi:
Làm cách nào để chạy macro trước khi đóng hoặc lưu tệp?
Macro cần được nhập vào ngăn mã được liên kết với "ThisWorkbook". Từ menu thả xuống bên phải, chọn BeforeClose hoặc BeforeSave.
Ken viết:
Tôi có một trình xử lý sự kiện trang tính lặp lại, ít nhất 16 lần. Điều gì đang xảy ra?
Trình xử lý của Ken rất đơn giản - nếu mục nhập không phải là số, nó sẽ thay đổi mục nhập thành chữ hoa. Đây là vấn đề. Khi anh ấy thay đổi giá trị của mục nhập thành chữ hoa, đó là một thay đổi trang tính khác và sự kiện sẽ kích hoạt lại. Mỗi khi sự kiện thay đổi kích hoạt, Ken sẽ thay đổi trang tính và macro được gọi đệ quy, cho đến khi ngăn xếp cuộc gọi hết bộ nhớ.
Giải pháp là tạm thời dừng các sự kiện chạy trong khi bạn thay đổi giá trị thành chữ hoa. Bạn có thể làm điều này bằng cách thay đổi giá trị của Application.EnableEvents thành False. Đây là macro đã sửa:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) If Not IsNumeric(Target.Value) Then Application.EnableEvents = False Target.Value = UCase(Target.Value) Application.EnableEvents = True End If End Sub
Andy đến từ Vương quốc Anh hỏi câu hỏi thú vị nhất hôm nay.
Tôi có một quy trình VBA trong một sổ làm việc tạo ra một số sổ làm việc khác. Tôi muốn có thể thêm động một siêu kết nối trong mỗi sổ làm việc mới sẽ trỏ ngược lại sổ làm việc đã tạo các sổ làm việc mới.
Andy - đây là một ý tưởng hay. Nếu không có lợi ích khi nhìn thấy mã của bạn, tôi có thể tưởng tượng một cái gì đó như thế này sẽ hoạt động:
Sub Testit() Creator = ActiveWorkbook.FullName '… . Andy's code to create the new workbook… . ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:= _ Creator, TextToDisplay:="Click Here to Return to " & Creator End Sub