Hướng dẫn gán 1 biến workbook (4 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

sakurasumo

Thành viên mới
Tham gia
11/2/24
Bài viết
8
Được thích
0
Em đang vướng việc gán 1 biến Workbook vào 1 file excel bất kỳ.
Khi gán vào 1 tên file thì bị lỗi, nhưng khi vừa gán vừa mở thì không bị lỗi.

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks("abc.xlsx")
wk.open
End sub

-----> Bị lổi ngay dòng : set wk=workbooks("abc.xlsx")

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks.open ("abc.xlsx")
End sub

-----> không bị lỗi.

Anh/em xem giúp lý do.
Mục đích của em là chỉ gán wk vào 1 file nào đó, khi cần thì mở.
 
Đuôi.XLSX không chạy Macro bạn à.
 
Dạ, không.
File đuôi .XLSX là file sẽ được mở khi chạy code.
File chay code thì đuôi là .xlsm
 
Thêm đường dẫn đi bạn.
 
Em đang vướng việc gán 1 biến Workbook vào 1 file excel bất kỳ.
Khi gán vào 1 tên file thì bị lỗi, nhưng khi vừa gán vừa mở thì không bị lỗi.

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks("abc.xlsx")
wk.open
End sub

-----> Bị lổi ngay dòng : set wk=workbooks("abc.xlsx")

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks.open ("abc.xlsx")
End sub

-----> không bị lỗi.

Anh/em xem giúp lý do.
Mục đích của em là chỉ gán wk vào 1 file nào đó, khi cần thì mở.
Bạn đưa ví dụ thì phải đưa cho đúng. Cả hai "trường hợp 1" bên trên đều lỗi.
--
Chưa mở file thì có cái gì đâu mà gán, lỗi là đương nhiên.
 
Em đang vướng việc gán 1 biến Workbook vào 1 file excel bất kỳ.
Khi gán vào 1 tên file thì bị lỗi, nhưng khi vừa gán vừa mở thì không bị lỗi.

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks("abc.xlsx")
wk.open
End sub

-----> Bị lổi ngay dòng : set wk=workbooks("abc.xlsx")

Trường hợp 1 : gán biến wk, sau đó mở workbook ----> bị lỗi
Sub Tinh()
dim wk as workbook
set wk=workbooks.open ("abc.xlsx")
End sub

-----> không bị lỗi.

Anh/em xem giúp lý do.
Mục đích của em là chỉ gán wk vào 1 file nào đó, khi cần thì mở.
Mở xong mới gán chứ. Chơi gán xong mới mở. Thì khác gì khai sinh trước mới đẻ
 
set wk = workbook("abc.xlsx") chỉ dùng khi file abc đã mở. Nghĩa là trong số file đã mở phải có file này. Chưa mở thì lỗi.
set wk = workbooks.open ("abc.xlsx") là gộp 2 hành động mở và gán, mở trước gán sau, nên không lỗi.
Thêm đường dẫn đi bạn.
Không có đường dẫn thì mặc định là Thisworkbook.Path hoặc MyDocument
Đuôi.XLSX không chạy Macro bạn à.
File có macro thì mở file gì cũng được
 
Lần chỉnh sửa cuối:
cám ơn ban ptm0412 đã hướng dẫn.
Em thêm ý nữa đó là trường hợp em làm việc với 50 workbook.
Qua lại các workbook để lấy data.
nếu như làm theo cách trên thì em phải cùng lúc 50 workbook rồi active cái workbook cần lấy data.
Như vậy thì hơi mệt...
Nên em định gán từng workbook tương ứng như wk1,wk2,...wk50.
Khi nào cần dùng workbook gì thì open cái đó, dùng xong rồi đóng.
---> Anh/Em chỉ code dùm với nhé.
 
Em thêm ý nữa đó là trường hợp em làm việc với 50 workbook.
Liệt kê 50 workbook trên sheet1, chẳng hạn A1:A50 , và gán vào 1 mảng.
Mã:
WbsArr = Sheet1.Range("A1:A50").Value
Sau đó dùng vòng lặp
Mã:
For i = 1 to 50
    Workbook.Open WbsArr(i,1)
    Set Wb = Workbooks(WbsArr(i,1))
    Làm gì đó
    Wb.Close
Next i
 
Bạn ptm0412 giỏi quá...
Nếu thứ tự workbook chưa được định hình sẵn và không dùng hết 50 workbook.
thích thì mở workbook này, lúc thì mở workbook khác.
nói chung là tùy từng trưởng hợp thì phải xử lý thế nào?
 
thích thì mở workbook này, lúc thì mở workbook khác.
Bạn thích cái gì thì bỏ vào list cái đó. Bỏ vào rồi mà bỗng nhiên không thích nữa thì khóc. Tôi không dỗ nín.
Nếu giữa thích và không thích có cái gì đó phân biệt thì If nó 1 cái.
Trường hợp nhiều cái thích bất chợt như thời trang thay đổi, hoặc như thời tiết mùa bão lũ thì tạo nhiều list: List váy dài, list váy ngắn, list đồ thể thao, list váy dạ hội.
 
Cám ơn Thầy @ptm0412 đã hướng dẫn cho em!!!!!!
 
cám ơn ban ptm0412 đã hướng dẫn.
Em thêm ý nữa đó là trường hợp em làm việc với 50 workbook.
Qua lại các workbook để lấy data.
nếu như làm theo cách trên thì em phải cùng lúc 50 workbook rồi active cái workbook cần lấy data.
Như vậy thì hơi mệt...
Nên em định gán từng workbook tương ứng như wk1,wk2,...wk50.
Khi nào cần dùng workbook gì thì open cái đó, dùng xong rồi đóng.
---> Anh/Em chỉ code dùm với nhé.
Đang lý luận như bạn thì vấn đề ban đầu nó nở ra đến khi nào dừng được :D
Khi số lượng file nhiều thì bạn có thể dùng FSO để quét qua file trong thư mục chỉ định. Liệt kê tên file vào mảng hoặc sheet.
Dùng vòng lặp for each tất cả các file và ghi vào sheet, bổ sung thêm 1 cột on/off để quyết định có lấy dữ liệu không.
dùng wb = Workbooks.Open(file.Path) rồi trong từng file vòng lặp qua tất cả các sheet trong từng workbook, dữ liệu gì cũng lấy được.
Quan trọng bài toán cụ thể, lấy data gì (data này có được chuẩn hóa ở tất cả các file chưa ?), chứ nêu ra khơi khơi thì các anh muốn giúp cũng không giúp được.
 
Đang lý luận như bạn thì vấn đề ban đầu nó nở ra đến khi nào dừng được
Do tác giả dùng động từ "thích".
Nếu nói do nhu cầu công việc khác nhau cần mở những file khác nhau thì tôi thông cảm người nhân viên đang học hoặc đang tìm hiểu để hoàn thành công việc, lúc đó có thể tôi giúp 1 đoạn code. Còn thích với không thích thì vô chừng và giống như việc thích váy ngắn với váy dài nên tôi không muốn giúp nữa.
 
...
Mục đích của em là chỉ gán wk vào 1 file nào đó, khi cần thì mở.
...
thích thì mở workbook này, lúc thì mở workbook khác.
nói chung là tùy từng trưởng hợp thì phải xử lý thế nào?
Hai cái này không cần thiết phải đi với nhau.
Tìm giải thuật khác đi.

Chú thích: code để chọn được cái "thích" quan trọng hơn.
 
Web KT

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

Back
Top Bottom