Xử lý lỗi khi thoát Input box

Liên hệ QC

chisinhvnn

Thành viên tiêu biểu
Tham gia
7/3/08
Bài viết
478
Được thích
103
Mã:
 rngSource = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
Mình dùng đoạn code trên để ghi dữ liệu xuống sheet. Khi mình không muốn lấy dữ liệu nữa bấm ESC hoặc Cancel thì bị lỗi. Nhờ GPE giúp đở xử lý lỗi khi mình nhấn ESC (hoặc Cancel) để thoát
 
Mã:
 rngSource = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
Mình dùng đoạn code trên để ghi dữ liệu xuống sheet. Khi mình không muốn lấy dữ liệu nữa bấm ESC hoặc Cancel thì bị lỗi. Nhờ GPE giúp đở xử lý lỗi khi mình nhấn ESC (hoặc Cancel) để thoát
Bạn sử dụng thế này xem sao?
Mã:
Public Sub GPE()
Dim rngSource As Range
On Error Resume Next
Set rngSource = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (rngSource Is Nothing) = False Then
    MsgBox rngSource.Address
End If
End Sub
 
Upvote 0
Mã:
 rngSource = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
Mình dùng đoạn code trên để ghi dữ liệu xuống sheet. Khi mình không muốn lấy dữ liệu nữa bấm ESC hoặc Cancel thì bị lỗi. Nhờ GPE giúp đở xử lý lỗi khi mình nhấn ESC (hoặc Cancel) để thoát
Chỉ một dòng trên thì đâu có lỗi???
Mình khai báo biến rngSource là kiểu dữ liệu gì?
rngSource ở dòng kế tiếp dùng vào việc gì? Lỗi báo cái gì?
Gửi cả cụm lên?
Đơn giản nhất là nhét dòng On Error Resume Next vào trước dòng bị lỗi..
 
Upvote 0
nếu muốn ní trả lại range thì dùng set, kết hợp bẫy lỗi. còn như chủ thớt rất khó bẫy lỗi. Giả sử chọn một ô, và chả may cái ô đó có giá trị là false thì có thánh mới chữa được, do lúc đó không có cơ chế chính xác để nhận biết là có cancel không
 
Upvote 0
Mà thấy buồn cười là thằng inputbox hỗ trợ nhập dạng boolean, nhưng khi người dùng nhấn nút cancel thì nó trả lại false. nêua vậy làm sao xác định được hành vi của người dùng.
 
Upvote 0
Bạn sử dụng thế này xem sao?
Mã:
Public Sub GPE()
Dim rngSource As Range
On Error Resume Next
Set rngSource = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (rngSource Is Nothing) = False Then
    MsgBox rngSource.Address
End If
End Sub
Mã:
Sub laydulieu()
Dim vung As Range
On Error Resume Next
Set vung = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (vung Is Nothing) = False Then
    With Sheet3
        If .[a1] = "" Then
            .[a1] = vung.Value
    Else
        .Range("A1:J10000").Clear
        .Range("A1") = vung.Value
       
    End If
End With
End If
End Sub
Mình viết code như vậy để ghi vào sheet, nhưng nó chỉ lấy được dữ liệu cotrj và dòng đầu tiên của vùng chọn, GPE giúp mìĩnhử lấy để ghi vào sheet toàn bộ dữ liệu của vùng chọn với
 
Upvote 0
Mã:
Sub laydulieu()
Dim vung As Range
On Error Resume Next
Set vung = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (vung Is Nothing) = False Then
    With Sheet3
        If .[a1] = "" Then
            .[a1] = vung.Value
    Else
        .Range("A1:J10000").Clear
        .Range("A1") = vung.Value
      
    End If
End With
End If
End Sub
Mình viết code như vậy để ghi vào sheet, nhưng nó chỉ lấy được dữ liệu cotrj và dòng đầu tiên của vùng chọn, GPE giúp mìĩnhử lấy để ghi vào sheet toàn bộ dữ liệu của vùng chọn với
Thử như thế này xem sao :p
Mã:
Sub laydulieu()
    Dim vung As Range, R As Long, C As Long
On Error Resume Next
Set vung = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (vung Is Nothing) = False Then
    R = vung.Rows.Count: C = vung.Columns.Count
    With Sheet3
        If .[a1] = "" Then
            .[a1].Resize(R, C) = vung.Value
        Else
            .Range("A1:J10000").Clear
            .Range("A1").Resize(R, C) = vung.Value
        End If
    End With
End If
End Sub
 
Upvote 0
Thử như thế này xem sao :p
Mã:
Sub laydulieu()
    Dim vung As Range, R As Long, C As Long
On Error Resume Next
Set vung = Application.InputBox("Chon vung du lieu goc", "Chon vung du lieu", Type:=8)
If (vung Is Nothing) = False Then
    R = vung.Rows.Count: C = vung.Columns.Count
    With Sheet3
        If .[a1] = "" Then
            .[a1].Resize(R, C) = vung.Value
        Else
            .Range("A1:J10000").Clear
            .Range("A1").Resize(R, C) = vung.Value
        End If
    End With
End If
End Sub
Nãy có dùng reize(lbound(vung,1),ubound(vung,2) nhưng nó không hiểu. Chị Pacific giải thích giúp mình với được không
 
Upvote 0
Mà thấy buồn cười là thằng inputbox hỗ trợ nhập dạng boolean, nhưng khi người dùng nhấn nút cancel thì nó trả lại false. nêua vậy làm sao xác định được hành vi của người dùng.

Mắc mớ gì buồn cười. Người ta chỉ làm ra cái giao diện căn bản để dùng cho loại code hổ trợ phần mềm chính (Excel, Access, Script,...). Mấy vị bày đủ trò lắc léo ra rồi đòi hỏi tùm lum.
 
Upvote 0
Mắc mớ gì buồn cười. Người ta chỉ làm ra cái giao diện căn bản để dùng cho loại code hổ trợ phần mềm chính (Excel, Access, Script,...). Mấy vị bày đủ trò lắc léo ra rồi đòi hỏi tùm lum.
Em thấy lạ, có phần vô lý nên muốn trao đổi. Xem cộng đồng có những cách nhìn khác không không.
 
Upvote 0
nếu muốn ní trả lại range thì dùng set, kết hợp bẫy lỗi. còn như chủ thớt rất khó bẫy lỗi. Giả sử chọn một ô, và chả may cái ô đó có giá trị là false thì có thánh mới chữa được, do lúc đó không có cơ chế chính xác để nhận biết là có cancel không
Bạn không biết hay là không có?
 
Upvote 0
Web KT
Back
Top Bottom