Chuyên mục xử lý, gỡ rối code VBA (2 người xem)

Liên hệ QC

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

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,955
Mình có code 1 đoạn này. Input 1 mảng từ 1 bảng có sẵn. Transpose ra được dữ liệu rồi nhưng khi so sánh biến nhập vào với từng giá trị của mảng thì chỉ ra được 1 giá trị đầu. Còn lại báo lỗi Subscript out of Range 404. Máy báo lỗi ở dòng.

If Sheets("CleanerSheet").Cells(d, "B").Value > data(i, 1) And Sheets("CleanerSheet").Cells(d, "B").Value <= data(i + 1, 1) Then


Cảm ơn mọi người trước ạ

PHP:
Option Explicit

Sub Button1_Click()
Dim a, b, c, d, i As Integer
Dim data(1 To 80, 1 To 2) As Variant
Dim LastRow As Integer

    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With
 
c = 1
For a = 2 To 16
For b = 12 To 8 Step -1
    data(c, 1) = Sheets("2018").Cells(b, a).Value
    c = c + 1
Next b
Next a

c = 1
For a = 2 To 16
For b = 12 To 8 Step -1
    data(c, 2) = Sheets("2018").Cells(13, a).Value & Sheets("2018").Cells(b, "A").Value
    c = c + 1
Next b
Next a

Sheets("CleanerSheet").Range("E6:F99").Value = Worksheets.Application.Transpose(data)

For d = 3 To LastRow

     Sheets("CleanerSheet").Cells(d, "B").Select
     For i = 1 To 80
       If Sheets("CleanerSheet").Cells(d, "B").Value > data(i, 1) And Sheets("CleanerSheet").Cells(d, "B").Value <= data(i + 1, 1) Then
          Sheets("CleanerSheet").Cells(d, "C").Value = data(i + 1, 1)
          Sheets("CleanerSheet").Cells(d, "D").Value = data(i + 1, 2)
          i = i + 1
       End If
     Next i
Next d

End Sub
 
Upvote 0
Định bôi nhưng code không cho bôi nên đành trích dẫn luôn :D.
Tềnh hềnh là hơi căng...
1. Lỗi dòng này:
Mã:
Sheets("CleanerSheet").Cells(d, "B").Select
khi Sheets("CleanerSheet") không hiện hành.
Khắc phục:
PHP:
Sheets("CleanerSheet").Select 'Thêm dòng này'
For d = 3 To LastRow
2. Lỗi gọi phần tử của biến mảng data():
Mã:
For i = 1 To 80
       If sal > data(1, i) And sal <= data(1, i + 1) Then
vì khai báo:
Mã:
Dim data(1 To 80, 1 To 2)
Khai báo chỉ số chiều thứ hai của mảng data chạy từ 1 tới 2, còn khi gọi tới phần tử của nó thì lại chạy từ 1 tới 80, nên i>=3 là tèo téo teo.

Lỗi tới chỗ đó là hết hiểu để sửa.

Có lẽ mình dành thời gian đọc tham khảo mấy bài sau: Bài 0-10.
 
Upvote 0
Tềnh hềnh là hơi căng...
1. Lỗi dòng này:
Mã:
Sheets("CleanerSheet").Cells(d, "B").Select
khi Sheets("CleanerSheet") không hiện hành.
Khắc phục:
PHP:
Sheets("CleanerSheet").Select 'Thêm dòng này'
For d = 3 To LastRow
2. Lỗi gọi phần tử của biến mảng data():
Mã:
For i = 1 To 80
       If sal > data(1, i) And sal <= data(1, i + 1) Then
vì khai báo:
Mã:
Dim data(1 To 80, 1 To 2)
Khai báo chỉ số chiều thứ hai của mảng data chạy từ 1 tới 2, còn khi gọi tới phần tử của nó thì lại chạy từ 1 tới 80, nên i>=3 là tèo téo teo.

Lỗi tới chỗ đó là hết hiểu để sửa.

Có lẽ mình dành thời gian đọc tham khảo mấy bài sau: Bài 0-10.

Em cũng mới chuyển code từ VB sang VBA nên cũng có nhiều chỗ chưa hiểu. Cái mảng em đặt theo biến như trên theo em hiểu là fix cố định gồm 80 dòng và 2 cột nhưng khi transpose ra thì lại là 80 cột và 2 dòng. Thế khi mình khai báo như trên thì mảng của mình là 80 cột 2 dòng hay là 80 dòng 2 cột ạ?
 
Upvote 0
PHP:
FileQLSX.Sheets("BANG_TINH").Range("B22:Z" & LastRowNo).SpecialCells(xlCellTypeVisible).Copy
 
 FileBangQD.Sheets("CongLamKH").Range("D3").PasteSpecial xlPasteValues
Anh, chị cho em hỏi, em có đoạn code copy như trên, chỉ copy những dữ liệu hiển thị không copy dữ liệu ẩn. Em muốn chuyển sang dùng ADO mà không biết trong ADO bỏ qua giá trị ẩn như nào. Anh, chị giúp em với ạ. Em cảm ơn. Dữ liệu của em không theo thứ tự nhất định.
PHP:
Str5 = "Select * from [BANG_TINH$B22:Z] where F1 is not null"
    FileBangQD.Sheets("ThongSo").Range("D3").CopyFromRecordset cnn.Execute(Str5)
Em có dùng đoạn code trên để thay thế mà chỉ copy được một dòng.
 
Lần chỉnh sửa cuối:
Upvote 0
Các bác hướng dẫn giúp em sửa lỗi add value từ text input vào header.
Em dùng hàm UNItoVBA chuyển chuỗi nhập từ txtcongty mà nó không hiển thị ra. trong khi gán cứng thì nó lại ra. Em cám ơn.
Em gửi kèm file và code ạ.
Code đây ạ:
==================
Private Sub btnbrowser_Click()
' Sub GettingFolder()
Dim SelectedFolder As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select folder"
.ButtonName = "Confirm"
.InitialFileName = "C:\"

If .Show = -1 Then
'ok clicked
SelectedFolder = .SelectedItems(1)
txtduongdan.Value = SelectedFolder
'MsgBox (SelectedFolder)
Else
'cancel clicked
End If
End With
End Sub
Private Sub btnnext_Click()
Dim chuoi, chuoimoi, congty, gdv As String
Dim i, j As Integer

'==== chuyen bien so sang format chung
chuoi = UCase(txtbks.Text)
chuoimoi = ""

For i = 1 To Len(chuoi)
If Mid(chuoi, i, 1) <> "-" And Mid(chuoi, i, 1) <> "." And Mid(chuoi, i, 1) <> "_" Then
chuoimoi = chuoimoi + Mid(chuoi, i, 1)
End If
Next i

If Len(chuoimoi) = 8 Then
chuoimoi = Left(chuoimoi, 3) + "-" + Mid(chuoimoi, 4, 3) + "." + Right(chuoimoi, 2)
Else
chuoimoi = Left(chuoimoi, 3) + "-" + Right(chuoimoi, 4)
End If
'=====================================
congty = UNItoVBA(txtcongty.Value)
' congty = "C" & ChrW(212) & "NG TY B" & ChrW(7842) & "O HI" & ChrW(7874) & "M NGH" & ChrW(7878) & " AN"
gdv = "Gi" & ChrW(225) & "m " & ChrW(273) & ChrW(7883) & "nh vi" & ChrW(234) & "n: "


ActiveWindow.View = xlPageLayoutView
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftHeader = "&""Times New Roman,Bold""&12" & congty _
& Chr(10) & "&""Times New Roman,Regular""&12" & gdv _
' & Chr(10) & "&""Times New Roman,Regular""&12 Ngay giam dinh: " & "20/12/2017 BKS: "
.LeftMargin = Application.InchesToPoints(0.7)
.RightMargin = Application.InchesToPoints(0.7)
.TopMargin = Application.InchesToPoints(0.75)
.BottomMargin = Application.InchesToPoints(0.75)
.HeaderMargin = Application.InchesToPoints(0.3)
.FooterMargin = Application.InchesToPoints(0.3)
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.ScaleWithDocHeaderFooter = True
.AlignMarginsHeaderFooter = True
End With
Application.PrintCommunication = True
Range("A1").Select

'===========================================================


With Sheets("Data")

.Range("A3") = txtcongty.Text

.Range("A4") = txtgdv.Text
.Range("A5") = txtnggd.Text
.Range("A6") = chuoimoi
.Range("A7") = txtanhdau.Text
.Range("A8") = txtanhcuoi.Text
.Range("A9") = UNItoVBA(txtcongty.Text)

End With

UserForm1.Hide
End Sub
'=====================================================
'Chuyen chuoi tu UNICODE sang Code VBA
Function UNItoVBA(ByVal MyStr As String) As String

Dim Str As String, i As Integer, CStart As Integer, CCount As Integer, Status As Boolean
Str = "-225-224-7843-227-7841-259-7855-7857-7859-7861-7863-226-7845-7847-7849-7851-7853-273-233-232-7867-7869-7865-234-7871-7873-7875-7877-7879-237-236-7881-297-7883-243-242-7887-245-7885-244-7889-7891-7893-7895-7897-417-7899-7901-7903-7905-7907-250-249-7911-361-7909-432-7913-7915-7917-7919-7921-253-7923-7927-7929-7925-193-192-7842-195-7840-258-7854-7856-7858-7860-7862-194-7844-7846-7848-7850-7852-272-201-200-7866-7868-7864-202-7870-7872-7874-7876-7878-205-204-7880-296-7882-211-210-7886-213-7884-212-7888-7890-7892-7894-7896-416-7898-7900-7902-7904-7906-218-217-7910-360-7908-431-7912-7914-7916-7918-7920-221-7922-7926-7928-7924-10-"
For i = 1 To Len(MyStr)
If InStr(Str, "-" & AscW(Mid(MyStr, i, 1)) & "-") = 0 Then
If Not Status Then
CStart = i: Status = True
End If
CCount = CCount + 1
Else
If Status Then UNItoVBA = UNItoVBA & IIf(UNItoVBA = "", "", " & ") & """" & Replace(Mid(MyStr, CStart, CCount), """", """""") & """"
Status = False
CCount = 0
UNItoVBA = UNItoVBA & IIf(UNItoVBA = "", "", " & ") & "ChrW(" & AscW(Mid(MyStr, i, 1)) & ")"
End If
Next
If Status Then UNItoVBA = UNItoVBA & IIf(UNItoVBA = "", "", " & ") & """" & Replace(Mid(MyStr, CStart, CCount), """", """""") & """"
End Function
'===========================================
Private Sub Label1_Click()
End Sub
'============================================
 

File đính kèm

Upvote 0
Chào các sư huynh!
Nhờ các sư huynh viết giúp code VBA: Công việc của em có liên quan đến việc lọc dữ liệu thỏa mãn yêu cầu cho trước. Bình thường em toàn nhặt thủ công, chia dữ liệu làm nhiều phần cho nhiều người làm, rất mất thời gian công sức mà không chính xác. Em có mày mò vài hàm cơ bản nhưng không nhanh hơn là bao. Nói ra thì hơi khó diễn tả, em up file để các huynh giúp đỡ.
Em cảm ơn!
 

File đính kèm

Upvote 0
Bạn muốn lọc cái gì & ở trang nào; Kết quả lọc cho hiện ở đâu
Túm lại chỉ là:
Cái gì?
Khi nào?
Ở đâu
 
Upvote 0
Ad ơi cuwps mình với, mình tạo 1 Form nhập và khai báo với dữ liệu đã có ở sheet này qua Sheet khác, mà nó cứ báo lỗi, mong Ad giúp mình với
 

File đính kèm

  • LỖI CODE.png
    LỖI CODE.png
    191.1 KB · Đọc: 9
Upvote 0
Xài hàm VLOOKUP() thì cần bảy lỗi, kể cả trong VBA.
 
Upvote 0
Nhờ anh chị sửa lỗi khi import form bị lỗi sau:
"errors during load refer to"
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là form đính kèm lỗi. Bài #1415
Nội dung file log:
Line 8: Property OleObjectBlob in FormDonGia had an invalid file reference.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hóng, các anh chị đổi đuôi xls thành frm rồi xem lỗi giúp e với nhé. Thank1
 
Lần chỉnh sửa cuối:
Upvote 0
OleObjectBlob = "FormDonGia.frx":0000
Kiểm tra file FormDonGia.frx có không bạn
 
Upvote 0
File frx ko có bạn ơi. Theo mình tìm hiểu trên diễn đàn thì file đó ko có cũng được. Ko biết có đúng ko?
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom