Gọi hàm này ở đâu vậy ạ??? (2 người xem)

Liên hệ QC

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

mthuvigo

Thành viên mới
Tham gia
17/11/11
Bài viết
40
Được thích
25
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
ActiveWorkbook.Sheets.Copy
ActiveWorkbook.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
End Sub

Anh chị ơi mình nên gọi hàm này ở đâu để sau khi nó lưu ra một file mới thì tự động đóng file đang mở lại luôn ạ??? Tại vì sau khi lưu file thành một file mới bằng lệnh saveas thì nó tiếp tục lưu file mới nữa.
 
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ActiveWorkbook
.Sheets.Copy
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close
End with
End Sub
 
Upvote 0
Cảm ơn anh đã trả lời giúp em. Nhưng hàm này thì mình gọi ở đâu cho nó chạy vậy anh?
Em gọi nó ở hàm Private Sub Workbook_BeforeClose(Cancel As Boolean) thì nó lưu file nhưng file gốc vẫn không đóng lại và tiếp tục lưu file mới
 
Upvote 0
ActiveWorkbook là file hiện hành nên sẽ là file mới copy sang và save á
Muốn lưu file cũ (file chứa code đang chạy), thì dùng ThisWorkbook.
 
Upvote 0
Ý của em khi viết macro này là khi em đang thao tác trên file gốc, sau khi thao tác xong, em đóng file này lại thì hiển thị hộp thông báo lưu file, em nhập tên file muốn lưu nhấn OK thì file gốc đóng lại đồng thời file mới cũng sẽ được tạo ra. Anh chị xem và giúp em với nhé!
 
Upvote 0
Khi sửa ActiveWorkbook thành ThisWorkbook thì sau khi lưu với tên em nhập vào thành công thì nó lưu thêm một file mới nữa, anh chị ơi giúp em với!
 
Upvote 0
Khi sửa ActiveWorkbook thành ThisWorkbook thì sau khi lưu với tên em nhập vào thành công thì nó lưu thêm một file mới nữa, anh chị ơi giúp em với!
Thử cái này coi sao. Hình như code bị dư cái gì đó, thấy nó sao sao ấy. Biến EndR để làm gì vậy? Nghĩ mãi mà không hiểu

Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ThisWorkbook
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close False
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thử cái này coi sao. Hình như code bị dư cái gì đó, thấy nó sao sao ấy. Biến EndR để làm gì vậy? Nghĩ mãi mà không hiểu

Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
With ThisWorkbook
.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
.Close False
End With
End Sub

Cảm ơn anh, em cũng đã thử code của anh, nhưng sau khi lưu file mới thành công thì nó lại tiếp tục chạy code thêm một lần nữa và yêu cầu nhập tên file cần lưu.
Biến EndR là biến lưu lại giá trị của file gốc. Trong file gốc em có một macro viết cho ô K6 giá trị tăng tự động sau mỗi lần mở file, nhưng khi lưu sang một file mới em muốn giữ nguyên các giá trị đó ở file đã lưu, còn file gốc thì vẫn chạy macro tăng giá trị tự động.
Ví dụ. Sau khi mở file gốc thì giá trị ở ô K6 là 200011 thì sau khi lưu file, file đc lưu có giá trị 200011. Sau này khi mở file gốc tăng giá trị 200012 thì file đã lưu đó vẫn có giá trị 200011 và không chạy macro tăng giá trị tự động.
 
Upvote 0
Cảm ơn anh, em cũng đã thử code của anh, nhưng sau khi lưu file mới thành công thì nó lại tiếp tục chạy code thêm một lần nữa và yêu cầu nhập tên file cần lưu.
Biến EndR là biến lưu lại giá trị của file gốc. Trong file gốc em có một macro viết cho ô K6 giá trị tăng tự động sau mỗi lần mở file, nhưng khi lưu sang một file mới em muốn giữ nguyên các giá trị đó ở file đã lưu, còn file gốc thì vẫn chạy macro tăng giá trị tự động.
Ví dụ. Sau khi mở file gốc thì giá trị ở ô K6 là 200011 thì sau khi lưu file, file đc lưu có giá trị 200011. Sau này khi mở file gốc tăng giá trị 200012 thì file đã lưu đó vẫn có giá trị 200011 và không chạy macro tăng giá trị tự động.


Mình đoán là do macro trên file gốc của bạn đấy, muốn nhanh gọn thi gởi file lên mọi người xem thử nhé
 
Upvote 0
Sub LuuFileMoi()
Dim EndR As Long, FName As String
EndR = Sheets("QUOTESHEET").Range("K6").Value
FName = InputBox("New File Name:")
ActiveWorkbook.Sheets.Copy
ActiveWorkbook.SaveAs Filename:=FName
Sheets("QUOTESHEET").Range("K6").Value = EndR
End Sub

Anh chị ơi mình nên gọi hàm này ở đâu để sau khi nó lưu ra một file mới thì tự động đóng file đang mở lại luôn ạ??? Tại vì sau khi lưu file thành một file mới bằng lệnh saveas thì nó tiếp tục lưu file mới nữa.

1. Trước hết về code của bạn. Tôi cũng không hiểu EndR để làm gì. Trong code giữa 2 dòng:
Mã:
EndR = Sheets("QUOTESHEET").Range("K6").Value
và
Mã:
Sheets("QUOTESHEET").Range("K6").Value = EndR
có cái gì làm thay đổi giá trị của ô K6 đâu mà bạn phải làm cái "trò" lưu và phục hồi giá trị cho ô K6???
Với "ActiveWorkbook.Sheets.Copy" mục đích bạn định làm gì?

2. Về câu hỏi: "Anh chị ơi mình nên gọi hàm này ở đâu "
Bạn hỏi thật buồn cười. Bạn muốn gọi nó lúc nào chả được. Vd. tôi có Button1, có
Mã:
Sub Button1_Click()
 ' làm nhiều việc hoặc chả làm gì cả
 LuuFileMoi
End Sub
Hoặc trong 1 macro nào đó, hoặc trong 1 sự kiện nào đó, vd. đóng UserForm nào đó thì tôi có code:
Mã:
 ' làm nhiều việc hoặc chả làm gì cả
 LuuFileMoi
Được chứ? Không được à? Vậy thì bạn định gọi LuuFileMoi lúc nào thì "nhét" nó vào đó chứ sao lại hỏi người khác???

3. Về trình bầy vấn đề.
Muốn người khác giúp mình thì hãy giúp họ hiểu mình. Hãy nhớ là ý đồ của mình thì chỉ nằm trong đầu mình mà thôi. Nếu muốn nó cũng nằm trong đầu ngườii khác thì hãy miêu tả vấn đề từng bước. Sau đây là một ví dụ về miêu tả:
"Em có 1 tập tin mà trên sheet QUOTESHEET tại ô K6 có giá trị mà mỗi lần mở file thì macro thay đổi giá triị đó. Ô K6 chỉ được thay đổi 1 lần khi mở file. Sau khi mở file em có thể thay đổi nhiều thứ hoặc không nhưng nếu em đóng file bằng cách nhấn vào nút "X" thì macro LuuFileMoi được thực hiện. Macro này có nhiệm vụ lưu file với tên mới."
Với cách mô tả như trên thì do "nhưng nếu em đóng file bằng cách nhấn vào nút "X" thì macro LuuFileMoi được thực hiện" nên rõ ràng là LuuFileMoi ta "bỏ" vào Workbook_BeforeClose.
Mã:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    LuuFileMoi
End Sub
Sub LuuFileMoi()
Dim FName As String
    With ThisWorkbook
        .Save ' nếu tất cả các thay đổi muốn lưu lại
        FName = InputBox("New File Name:")
        .SaveAs Filename:=FName
    End With
End Sub
Nếu nhu cầu của bạn khác thì hãy viết rõ ra.
Trong quan hệ giữa người với người việc diễn đạt ý nghĩ, làm sao cho người khác hiểu mình là rất quan trọng. Cứ cái kiểu: "giúp tôi với, đau, đau quá" thì ai giúp được? Nếu là "đau" do bị cô bạn gái đá thì nói ra để người ta còn giới thiệu cô khác còn "nóng bỏng" hơn. Nếu đau ruột thừa thì nói ra ngay chứ cứ "đau đau" thì rồi đến lúc "muộn rồi" mà người khác vẫn chưa hiểu được là đau gì.
 
Upvote 0
Cảm ơn sự đóng góp ý kiến chân thành của siwtom. Lời văn của em diễn đạt lủng củng quá khiến mọi người khó hiểu, lần sau em sẽ cố gắng hơn.
Vì file excel của công ty là file đặt hàng liên quan nhiều file tính đơn giá của sếp nên em không dám đưa nguyên file lên cho mọi người cùng xem. Em chỉ có thể chụp hình như thế này thôi. File mà em đang làm trên đó là như thế này ạ.
tu van.jpg

Tại ô K6 em có viết đoạn code cho tăng giá trị ở module12 như sau:
Sub Count()
Sheets("QUOTESHEET").Range("K6").Value = Sheets("QUOTESHEET").Range("K6").Value + 1
End Sub

Và em muốn sau mỗi lần mở file ô K6 tự động tăng giá trị lên.
Private Sub Workbook_Open()
Call Count
ThisWorkbook.Save

End sub

Với đoạn code trên của siwtom thì em đã chạy được và lưu ra một file mới. Anh chị cho em hỏi thêm một tí nữa nhé. Trong file mới lưu sau khi kích hoạt nút enable macro thì ô K6 tiếp tục tăng giá trị lên, làm thế nào để K6 không tăng giá trị lên mà vẫn giữ nguyên giá trị cũ ạ. Có nghĩa là làm thế nào để nó không chạy cái macro tăng giá trị sau mỗi lần mở file đó ạ.

 

File đính kèm

  • tu van.jpg
    tu van.jpg
    19.7 KB · Đọc: 25
Lần chỉnh sửa cuối:
Upvote 0
Để không tăng giá trị lên nữa thì em đã viết một macro xóa hết code macro trong thisworkbook rồi ạ.

Trong cái khung bảo nhập tên file cần lưu có 2 button OK và CANCEL, Nếu bấm OK thì nó lưu file, còn bấm CANCEL thì nó hiển thị ra cái thông báo như thế này

loi.png

Làm sao để nó không hiển thị thông báo như thế này nữa ạ, có thể khi nhấn CANCEl thì ở lại file mình đang làm. Nó làm cho người dùng cảm thấy khó chịu lắm ạ. Nhờ anh chị chỉ giáo giúp em.
 
Upvote 0
Để không tăng giá trị lên nữa thì em đã viết một macro xóa hết code macro trong thisworkbook rồi ạ.

Trong cái khung bảo nhập tên file cần lưu có 2 button OK và CANCEL, Nếu bấm OK thì nó lưu file, còn bấm CANCEL thì nó hiển thị ra cái thông báo như thế này



Làm sao để nó không hiển thị thông báo như thế này nữa ạ, có thể khi nhấn CANCEl thì ở lại file mình đang làm. Nó làm cho người dùng cảm thấy khó chịu lắm ạ. Nhờ anh chị chỉ giáo giúp em.

Bạn ơi, từ đầu tới giờ tôi thấy code của bạn được người trả lời đoán già đoán non, sao bạn không gửi cái file đó lên cho người ta dễ hướng dẫn cho bạn mà bạn toàn gửi hình lên làm sao bắt bệnh qua hình được? Máy báo lỗi này, nhưng làm ra mới thấy không phải lỗi đó. Tốt nhất bạn gửi file lên đi.
 
Upvote 0
http://db.tt/S1lZJj0H

Bài của em đây ạ, anh chị xem rồi giúp em nhé.

Có thể có 2 lỗi xảy ra với file của bạn. Lỗi dễ thấy nhất là ở chỗ này:

Lỗi thứ 1:

Mã:
Sub LuuFileMoi()
Dim FName As String
    With ThisWorkbook
        .Save
        FName = InputBox("New File Name:")
        .SaveAs Filename:=FName
       [COLOR=#ff0000][B] .xoa_thisworkbookcode[/B][/COLOR]
    End With
End Sub

Bạn đặt trước đó là dấu chấm (.) bạn phải xóa dấu chấm đó.

Ngoài ra, Lỗi tiềm ẩn khác ở thủ tục này là khi InputBox hiện lên, nếu File name có những ký tự trái với quy ước đặt tên file như [, ], ?, / ... thì sẽ phát sinh thêm lỗi.

Lỗi thứ 2:

Có thể xảy ra là khi dùng thủ tục Xóa Macro. Với thủ tục này, nếu ta cài đặt trong Macro Security, tại mục Trusted Publishers, nếu check vào Trust access to Visual Basic Project thì không xảy ra lỗi, ngược lại sẽ bị lỗi phát sinh.
 
Lần chỉnh sửa cuối:
Upvote 0
Có một vấn đề như thế này nữa ạ. Khi nhập vào tên file cần lưu và nhấn button OK nó sẽ tạo ra file mới và xuất hiện thêm một hộp thông báo yêu cầu Lưu file hay không lưu, nếu lưu file thì có file mới được tạo ra và thực hiện macro của em viết đó là file mới không tăng giá trị lên ở ô E2. Nhưng nếu nhấn Cancel thì nó cũng tạo ra file mới nhưng y chang file gốc, đó là giá trị ở ô E2 tiếp tục tăng. Có cách nào giải quyết vấn đề này không ạ?
 
Upvote 0
Cái File của bạn tôi không biết dùng vào mục đích gì, trước tiên khi can thiệp vào việc xóa, chỉnh sửa macro, bắt buộc bạn phải vào cài đặt trước phần này: Tool > Macro Security, tại tab Trusted Publishers, check vào Trust access to Visual Basic Project

Riêng thủ tục của bạn cần sửa lại như sau:

PHP:
Sub LuuFileMoi()
    Dim FName As String
    With ThisWorkbook
        .Save
LamLai:
        FName = InputBox("New File Name:")
        If FName = "" Then
LamLaiNua:
            MsgBox "Ten File khong hop le!" & Chr(13) & "Ban phai dat ten File lai!"
            GoTo LamLai
        End If
        On Error GoTo LamLaiNua
        Xoa_ThisworkbookCode
        .SaveAs Filename:=FName
    End With
End Sub
 

File đính kèm

Upvote 0
Cảm ơn anh Hoàng Trọng Nghĩa, anh có thể sửa lại code chỗ nút Cancel dùm em, nếu bấm cancel thì thoát khỏi file và không lưu đuợc không ạ?
 
Upvote 0
Cảm ơn anh Hoàng Trọng Nghĩa, anh có thể sửa lại code chỗ nút Cancel dùm em, nếu bấm cancel thì thoát khỏi file và không lưu đuợc không ạ?

Dễ thôi, trước khi thực hiện thì hỏi trước có lưu thành file mới hay không rồi tùy theo Yes hay No mà thực hiện thôi.

PHP:
Sub LuuFileMoi()
    Dim FName As String, Msg As Long
    With ThisWorkbook
        .Save
        Msg = MsgBox("Ban co muon save thanh file moi khong?", vbQuestion + vbYesNo, "Thông báo")
        If Msg = vbNo Then Exit Sub
LamLai:
        FName = InputBox("New File Name:")
        If FName = "" Then
LamLaiNua:
            MsgBox "Ten File khong hop le!" & Chr(13) & "Ban phai dat ten File lai!"
            GoTo LamLai
        End If
        On Error GoTo LamLaiNua
        Xoa_ThisworkbookCode
        .SaveAs Filename:=FName
    End With
End Sub
 
Upvote 0
Đây là code do mình tự SaveAs. Mình có thể can thiệp vào nút lệnh SaveAs của Excel bằng đoạn code trên không ạ? Vì nếu em SaveAs bằng nút SaveAS của Excel thì nó lưu file mới và không thực hiện macro của em. Nghĩa là lưu file mới và E2 vẫn tăng đều đặn mỗi lần mở file.
 
Upvote 0
Web KT

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

Back
Top Bottom