Làm việc với lệnh đóng/mở file Excel (1 người xem)

Liên hệ QC

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

MinhKhai

Giải pháp Ếc-xào
Tham gia
16/4/08
Bài viết
941
Được thích
574
Em cần xin code để xử lý: Trong 1 file excel có 1 nút lệnh, khi bấm vào nút lệnh này, 1 hộp thoại hiện ra để ta truy xuất (chỉ dẫn) đến 1 file .xls khác (đang mở hoặc đang đóng) sau đó thao tác 1 vài lệnh trên file đó (vd: unmerger tất các cell, sắp xếp dữ liệu, save hoặc không save file đó...)

Xin được chỉ dẫn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Em cần xin code để xử lý: Trong 1 file excel có 1 nút lệnh, khi bấm vào nút lệnh này, 1 hộp thoại hiện ra để ta truy xuất (chỉ dẫn) đến 1 file .xls khác (đang mở hoặc đang đóng) sau đó thao tác 1 vài lệnh trên file đó (vd: unmerger tất các cell, sắp xếp dữ liệu, save hoặc không save file đó...)

Xin được chỉ dẫn.
Bạn thử làm thế nào xem sao :
Đầu tiên với file excel đang mở bạn record macro --> ngâm cứu code ,unmerger,sort ,save file....
--> Tạo một nút lệnh, dùng hộp thoại getopenfilename -->liên kết tới file excel khác, rồi thao tác trên file vừa mở bằng cái code VBA bạn đã record ở trên
 
Upvote 0
Em cần xin code để xử lý: Trong 1 file excel có 1 nút lệnh, khi bấm vào nút lệnh này, 1 hộp thoại hiện ra để ta truy xuất (chỉ dẫn) đến 1 file .xls khác (đang mở hoặc đang đóng) sau đó thao tác 1 vài lệnh trên file đó (vd: unmerger tất các cell, sắp xếp dữ liệu, save hoặc không save file đó...)

Xin được chỉ dẫn.

Ví dụ đơn giản về lệnh mở file nhé:
Mã:
Sub Test()
 Dim vFile
 Dim [COLOR=#ff0000][B]wkb[/B][/COLOR] As Workbook
 vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
 If TypeName(vFile) = "String" Then Set [COLOR=#ff0000][B]wkb[/B][/COLOR] = Workbooks.Open(vFile)
End Sub
Chú ý cái biến màu đỏ, nó chính là workbook mà bạn đã mở thông qua hộp thoại Open
Từ sau dòng lệnh Set wkb = Workbooks.Open(vFile), bạn muốn làm gì với thằng wkb thì cứ việc thoải mái. Ví dụ:
Mã:
If Not wkb Is Nothing Then
   wkb.Activate
   wkb.Sheets(1).Select
   Range("B2:C10").Select
End If
vân vân...
 
Upvote 0
Bạn thử làm thế nào xem sao :
Đầu tiên với file excel đang mở bạn record macro --> ngâm cứu code ,unmerger,sort ,save file....
--> Tạo một nút lệnh, dùng hộp thoại getopenfilename -->liên kết tới file excel khác, rồi thao tác trên file vừa mở bằng cái code VBA bạn đã record ở trên

Mấy lệnh unmerger, sort, save thì em đã biết. Tuy nhiên em chưa biết cấu trúc đầy đủ của lệnh mở file. Các bác cho em 1 ví dụ cụ thể được không ?
 
Upvote 0
Tiêu đề của topic chẳng ổn tí nào
Bạn nghĩ xem phải sửa lại thế nào đây? Tức điều gì là thứ mà bạn quan tâm và cần hỏi? Lệnh mở file Excel chăng?

Dạ, em có nhiều câu hỏi lắm, không chung vào 1 topic nào nên cũng chưa đặt tên topic cho chuẩn
Em đang tiếp cận với VBA, học theo cách step by step, lắp ghép những code lẻ tẻ vào, mong bác góp ý thêm
Em xin tiếp tục hỏi: File truy xuất sau khi được mở và copy, em muốn dán về sheet có nút lệnh thì làm thế nào ? (Em chưa biết code để activate trở lại cái workbook có nút lệnh.
 

File đính kèm

Upvote 0
Dạ, em có nhiều câu hỏi lắm, không chung vào 1 topic nào nên cũng chưa đặt tên topic cho chuẩn
Em đang tiếp cận với VBA, học theo cách step by step, lắp ghép những code lẻ tẻ vào, mong bác góp ý thêm
Em xin tiếp tục hỏi: File truy xuất sau khi được mở và copy, em muốn dán về sheet có nút lệnh thì làm thế nào ? (Em chưa biết code để activate trở lại cái workbook có nút lệnh.

Ví dụ thế này: Mở File Bi Dieu Khien.xls, copy vùng dữ liệu A1:D20 rồi paste vào A1 của File Dieu Khien.xls. Xong đóng file File Bi Dieu Khien.xls
Mã:
Sub Test()
 Dim vFile
 Dim wkb1 As Workbook, wkb2 As Workbook
 vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
 If TypeName(vFile) = "String" Then Set wkb2 = Workbooks.Open(vFile)
 If Not wkb2 Is Nothing Then
   Set wkb1 = ThisWorkbook
   wkb2.Sheets(1).Range("A1:D20").Copy
   wkb1.Sheets(1).Range("A1").PasteSpecial 3
   wkb2.Close False
 End If
End Sub
 
Upvote 0
Dạ, em có nhiều câu hỏi lắm, không chung vào 1 topic nào nên cũng chưa đặt tên topic cho chuẩn
Em đang tiếp cận với VBA, học theo cách step by step, lắp ghép những code lẻ tẻ vào, mong bác góp ý thêm
Em xin tiếp tục hỏi: File truy xuất sau khi được mở và copy, em muốn dán về sheet có nút lệnh thì làm thế nào ? (Em chưa biết code để activate trở lại cái workbook có nút lệnh.
Thử thay code trong file của bạn bằng code này xem :<--------( mình chỉ sửa theo code của bạn)
[GPECODE=vb]
Private Sub CommandButton1_Click()
Dim vFile
Dim wkb As Workbook, tmparr
vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
If TypeName(vFile) = "String" Then
Set wkb = Workbooks.Open(vFile)
Else
Exit Sub
End If
With Application
.ScreenUpdating = 0
.DisplayAlerts = 0
End With
With wkb.Sheets("sheet1").UsedRange
.UnMerge
.WrapText = False
.Sort .Columns("A")
tmparr = .Value
End With
wkb.Close False
ActiveSheet.UsedRange.Clear
[A1].Resize(UBound(tmparr, 1), UBound(tmparr, 2)) = tmparr
With Application
.ScreenUpdating = 1
.DisplayAlerts = 1
End With
End Sub


[/GPECODE]
 
Upvote 0
Thử thay code trong file của bạn bằng code này xem :<--------( mình chỉ sửa theo code của bạn)
[GPECODE=vb]
Private Sub CommandButton1_Click()
Dim vFile
Dim wkb As Workbook, tmparr
vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
If TypeName(vFile) = "String" Then
Set wkb = Workbooks.Open(vFile)
Else
Exit Sub
End If
With Application
.ScreenUpdating = 0
.DisplayAlerts = 0
End With
With wkb.Sheets("sheet1").UsedRange
.UnMerge
.WrapText = False
.Sort .Columns("A")
tmparr = .Value
End With
wkb.Close False
ActiveSheet.UsedRange.Clear
[A1].Resize(UBound(tmparr, 1), UBound(tmparr, 2)) = tmparr
With Application
.ScreenUpdating = 1
.DisplayAlerts = 1
End With
End Sub


[/GPECODE]

Cảm ơn bác. Trong file của em, em chỉ muốn copy có giới hạn vùng dữ liệu của file bị điều khiển. Vì thế em phải UnMerge và Sort. Sau khi Sort (trước khi Sort phải UnMerge các ô) vùng dữ liệu cần Copy/Paste là vùng từ cột A cột Z và từ dòng 1 đến dòng có số thứ tự lớn nhất. Vì vậy em mới "cài cắm" cái Maxx vào.
Các bác bổ sung lại cho em được không ?
 
Upvote 0
Cảm ơn bác. Trong file của em, em chỉ muốn copy có giới hạn vùng dữ liệu của file bị điều khiển. Vì thế em phải UnMerge và Sort. Sau khi Sort (trước khi Sort phải UnMerge các ô) vùng dữ liệu cần Copy/Paste là vùng từ cột A cột Z và từ dòng 1 đến dòng có số thứ tự lớn nhất. Vì vậy em mới "cài cắm" cái Maxx vào.
Các bác bổ sung lại cho em được không ?

Xem kỹ lại code của bạn, tôi đoán rằng bạn muốn lọc file nguồn với điều kiện cột A là Number, đúng không?
Vậy thì Advanced Filter cũng được vậy:
Mã:
Private Sub CommandButton1_Click()
  Dim vFile
  Dim wkb As Workbook
  vFile = Application.GetOpenFilename("Excel Files, *.xls;*.xlsx;*.xlsm")
  Application.ScreenUpdating = False
  If TypeName(vFile) = "String" Then Set wkb = Workbooks.Open(vFile)
  If Not wkb Is Nothing Then
    With wkb.Sheets("sheet1").Range("A10:Z10000")
      .MergeCells = False
      .WrapText = False
      .Parent.Range("AB2").Value = "=ISNUMBER($A11)"
      .AdvancedFilter 2, .Parent.Range("AB1:AB2"), ThisWorkbook.Sheets(1).Range("A1")
    End With
    wkb.Close False
  End If
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Xem kỹ lại code của bạn, tôi đoán rằng bạn muốn lọc file nguồn với điều kiện cột A là Number, đúng không?
Vậy thì Advanced Filter cũng được vậy:
Em xin nói rõ yêu cầu thực tế của em (thông qua đó để em học về VBA).
Em có 1 file TongHop (mà em gọi là file điều khiển). Hàng ngày/hàng tuần em nhận được file dữ liệu nguồn (mà em gọi là file bị điều khiển). Khi xử lý em thường phải copy dữ liệu từ các file bị điều khiển vào file TongHop một cách thủ công. Thông qua VBA em muốn tự động các thao tác thủ công đó.
Trong file TongHop đã có sẵn form, nên chỉ cần copy dữ liệu chính từ file nguồn. Mục đích Sort của em là để tống khứ các dòng trống, các tiêu đề... xuống các hàng dưới và sau đó chỉ copy dữ liệu chính. Quan sát file nguồn sau khi Sort sẽ thấy dữ liệu chính (nếu sắp xếp theo cột A) sẽ có diện tích là từ dòng 1 đến dòng 195 (195 là số lớn nhất của cột A). Sau khi copy dữ liệu xong, file nguồn không cần Save, thậm chí có thể xóa. Vậy thôi

Sau khi giải quyết yêu cầu trên em xin tiếp tục xin trợ giúp: Theo mạch vấn đề trên việc dán dữ liệu cũng là 1 vấn đề khó với em. Trong file em gửi, ô để dán dữ liệu là cố định, nhưng thực tế thì ô này không cố định do phải ghép nối dữ liệu hàng ngày. Cụ thể là ngày 1 em dán từ ô B1, dữ liệu có 50 dòng. Ngày 2 thì ô cần dán phải là ô B51. Vậy làm sao để VBA hiểu ??
Giải pháp của em là đặt cột thứ tự ở cột A của file đích (File TongHop), và đánh số thứ tự bằng công thức. Việc dán từ ô nào sẽ được xác định bằng Max(cột STT)+1 (cột B dòng Max+1). Tuy nhiên sài mã VBA như thế nào thì em chịu.
Rất mong được chỉ dẫn.
 
Lần chỉnh sửa cuối:
Upvote 0
Sau khi giải quyết yêu cầu trên em xin tiếp tục xin trợ giúp: Theo mạch vấn đề trên việc dán dữ liệu cũng là 1 vấn đề khó với em. Trong file em gửi, ô để dán dữ liệu là cố định, nhưng thực tế thì ô này không cố định do phải ghép nối dữ liệu hàng ngày. Cụ thể là ngày 1 em dán từ ô B1, dữ liệu có 50 dòng. Ngày 2 thì ô cần dán phải là ô B51. Vậy làm sao để VBA hiểu ??
Giải pháp của em là đặt cột thứ tự ở cột A của file đích (File TongHop), và đánh số thứ tự bằng công thức. Việc dán từ ô nào sẽ được xác định bằng Max(cột STT)+1 (cột B dòng Max+1). Tuy nhiên sài mã VBA như thế nào thì em chịu.
Rất mong được chỉ dẫn.

Dòng lệnh này:
Mã:
Thisworkbook.Sheets(1).Range("B60000").End(xlUp).Offset(1)[/B]
chính là cell mà bạn cần đấy
 
Upvote 0

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

Back
Top Bottom