[KHÓ] tham chiếu tới 1 ô trong file excel chưa mở khác

Liên hệ QC

vanmanhvcu

Thành viên chính thức
Tham gia
27/3/11
Bài viết
85
Được thích
10
Xin chào tất cả mọi người
tôi có câu hỏi sau mong mọi người chỉ giúp
tôi có 1 biến Rng as Range trong module1
tôi biết đường dẫn và tên của file excel, tên worksheet, địa chỉ 1 ô trong file excel khác chưa được mở

câu hỏi đặt ra là:
gán biến Rng vào 1 ô trong file excel chưa được mở kia như thế nào? mà tôi không phải mở file excel đó lên
Mong chỉ giúp
 
Chuyện này tôi không biết, muốn lấy đồ trong tủ =>tôi thường mở tủ ra, lấy đồ, đóng tủ lại
. Hình như anh lộn tiệm rồi á. :D
. Chủ thớt muốn ngược lại thì phải. Tức là, chủ thớt có một cái u sờ bờ (usb) chứa bài hát "Khó - của Nam Cường", có một thiết bị chơi nhạc hỗ trợ kết nối u sờ bờ và được để trong một hộp kín đã khóa. Chủ thớt biết tọa độ cổng usb trên thiết bị kia rồi, giờ cần cắm cái u sờ bờ vào đúng vị trị #&%$ mà không cần mở hộp, để mở bài hát "Khó" lên nghe.
 
Upvote 0
Lý do tại sao cần điều kiện "chưa được mở"? Mở thì mất mát gì?
 
Upvote 0
Lý do tại sao cần điều kiện "chưa được mở"? Mở thì mất mát gì?
vùng dữ liệu trong file đó thì fixed theo Address cố định rồi nên ko cần mở file đó để chọn vùng dữ liệu nữa.
mục đích của mình là dùng Application.filedialog(...filepicker) để người dùng chọn đến file "chưa được mở" đó để lấy được đường dẫn và tên file
cuối cùng là truy câp dữ liệu trong file đó mà không cần mở file
 
Upvote 0
Ờ tóm lại không cần mở file mà lấy được dữ liệu, mà dữ liệu phải thuộc dạng Rờ Nờ Gờ mới chịu hả?
Muốn lấy Rờ Nờ Gờ từ file mà không cần mở file thì nàm thao được chứ.
 
Upvote 0
Ờ tóm lại không cần mở file mà lấy được dữ liệu, mà dữ liệu phải thuộc dạng Rờ Nờ Gờ mới chịu hả?
Muốn lấy Rờ Nờ Gờ từ file mà không cần mở file thì nàm thao được chứ.
ScreenShot_8_10_2018_350613.png
nó hoạt động như kiểu ô G23, không cần mở file mà vẫn lấy được giá trị ô B11
nên ý đinh của tôi làm sao để tham chiếu được tới ô B11 ở file khogoc1.xls kia mà cũng không cần mở file đó ra.
các bác có ý kiến gì không?
 
Upvote 0
Nếu dữ liệu của bạn là dạng bảng thì dùng ADO để làm nhé.
 
Upvote 0
@ chủ thớt:
Gõ Google thử xem "write to closed workbook excel vba"
 
Upvote 0

Tôi gửi bạn code VBA lấy dữ liệu từ file Excel đang đóng bằng ADO - SQL nhé

Mã:
Sub GetDataFromADO_Recordset()
    Dim cnn As New Connection, sConnStr As String
    Dim rst As Recordset
    Dim cFileName As String, X As Long
    
    cFileName = ThisWorkbook.Path & "\" & "data.xlsx"
    
    If Val(Application.Version) >= 12 Then 'EXCEL 2007 INSTANCE
        sConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cFileName & _
                  ";Extended Properties=""Excel 12.0 Xml;HDR=YES;"""
    Else
        sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & cFileName
    End If
    
    cnn.Open sConnStr
    On Error GoTo lbEndSub
    'Get data by SQL
    Set rst = cnn.Execute("SELECT * FROM dmkh")
        
    Range("A5:G1000").ClearContents 'Clear values on range
    'Paste all records in recordset to range
    X = Range("A5").CopyFromRecordset(rst)
    MsgBox "Da lay duoc " & X & " dong du lieu.", vbInformation, "Lay du lieu thanh cong"
lbEndSub:
    'Close connection and free memory
    If Not rst Is Nothing Then
        If rst.State = 1 Then rst.Close
        Set rst = Nothing
    End If
    
    If cnn.State = 1 Then cnn.Close
    Set cnn = Nothing
    If Err <> 0 Then
        MsgBox Err.Description, vbCritical, "Nguyen Duy Tuan thong bao loi"
    End If
End Sub
 

File đính kèm

  • ADO lập trình lấy dữ liệu file đang đóng.zip
    23.9 KB · Đọc: 10
Upvote 0
Túm lại là mình hiểu sai hay hai anh trên hiểu đúng vậy ta?

1538992734590.png
 
Upvote 0
Tôi gửi bạn code VBA lấy dữ liệu từ file Excel đang đóng bằng ADO - SQL nhé

Mã:
Sub GetDataFromADO_Recordset()
    Dim cnn As New Connection, sConnStr As String
    Dim rst As Recordset
    Dim cFileName As String, X As Long
   
    cFileName = ThisWorkbook.Path & "\" & "data.xlsx"
   
    If Val(Application.Version) >= 12 Then 'EXCEL 2007 INSTANCE
        sConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cFileName & _
                  ";Extended Properties=""Excel 12.0 Xml;HDR=YES;"""
    Else
        sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & cFileName
    End If
   
    cnn.Open sConnStr
    On Error GoTo lbEndSub
    'Get data by SQL
    Set rst = cnn.Execute("SELECT * FROM dmkh")
       
    Range("A5:G1000").ClearContents 'Clear values on range
    'Paste all records in recordset to range
    X = Range("A5").CopyFromRecordset(rst)
    MsgBox "Da lay duoc " & X & " dong du lieu.", vbInformation, "Lay du lieu thanh cong"
lbEndSub:
    'Close connection and free memory
    If Not rst Is Nothing Then
        If rst.State = 1 Then rst.Close
        Set rst = Nothing
    End If
   
    If cnn.State = 1 Then cnn.Close
    Set cnn = Nothing
    If Err <> 0 Then
        MsgBox Err.Description, vbCritical, "Nguyen Duy Tuan thong bao loi"
    End If
End Sub

Anh ơi, em muốn lấy dữ liệu trong vùng A5:G1000 của "sheet2" mà không phải là sheet1 thì code sửa ở đâu anh?
 
Upvote 0
Anh ơi, em muốn lấy dữ liệu trong vùng A5:G1000 của "sheet2" mà không phải là sheet1 thì code sửa ở đâu anh?
Em chỉ cần tạo NAME cho vùng đó, còn hiểu bản chất thì gọi theo tên Sheet. Tôi nhất là bạn đặt NAME rồi áp dụng vào trong câu lệnh SELECT.
 
Upvote 0
Tôi gửi bạn code VBA lấy dữ liệu từ file Excel đang đóng bằng ADO - SQL nhé

Mã:
Sub GetDataFromADO_Recordset()
    Dim cnn As New Connection, sConnStr As String
    Dim rst As Recordset
    Dim cFileName As String, X As Long
   
    cFileName = ThisWorkbook.Path & "\" & "data.xlsx"
   
    If Val(Application.Version) >= 12 Then 'EXCEL 2007 INSTANCE
        sConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cFileName & _
                  ";Extended Properties=""Excel 12.0 Xml;HDR=YES;"""
    Else
        sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & cFileName
    End If
   
    cnn.Open sConnStr
    On Error GoTo lbEndSub
    'Get data by SQL
    Set rst = cnn.Execute("SELECT * FROM dmkh")
       
    Range("A5:G1000").ClearContents 'Clear values on range
    'Paste all records in recordset to range
    X = Range("A5").CopyFromRecordset(rst)
    MsgBox "Da lay duoc " & X & " dong du lieu.", vbInformation, "Lay du lieu thanh cong"
lbEndSub:
    'Close connection and free memory
    If Not rst Is Nothing Then
        If rst.State = 1 Then rst.Close
        Set rst = Nothing
    End If
   
    If cnn.State = 1 Then cnn.Close
    Set cnn = Nothing
    If Err <> 0 Then
        MsgBox Err.Description, vbCritical, "Nguyen Duy Tuan thong bao loi"
    End If
End Sub
cách của anh đúng cái em cần !
cám ơn anh đã giúp đỡ.
 
Upvote 0
Web KT
Back
Top Bottom