Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
Tham khảo code của các mem post về xử lý đối với file (txt,ini...) mình nhờ các bác giải thích dòng lệnh sau với, vì rất hay bị lỗi bởi đoạn code này mà chưa biết cách xử lý như thế nào,hiện tại máy mình chạy WinXP-SP3, Office 2003-SP3 không biết làm từ 2003 mà chuyển sang Office2007 thì sẽ bị lỗi như thế nào và làm sao xử lý:

.
Refresh BackgroundQuery:=False

C
ảm ơn mọi người trước nha !!!
 
Upvote 0
Tham khảo code của các mem post về xử lý đối với file (txt,ini...) mình nhờ các bác giải thích dòng lệnh sau với, vì rất hay bị lỗi bởi đoạn code này mà chưa biết cách xử lý như thế nào,hiện tại máy mình chạy WinXP-SP3, Office 2003-SP3 không biết làm từ 2003 mà chuyển sang Office2007 thì sẽ bị lỗi như thế nào và làm sao xử lý:

.
Refresh BackgroundQuery:=False

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

Cái này mà bạn gọi là đoạn code à, bạn đưa cả thủ tục hoặc hàm hoặc cả file lên đi chớ đưa một câu vậy ai biết đâu mà trả lời. Bởi vì cũng câu lệnh đó nhưng nằm chổ này thì không lỗi, nhưng nằm chổ khác có thể gây lỗi.
 
Upvote 0
oke bạn :

Sub Read_Data()
Dim tenfile As String
tenfile = "test.ini"
Range("A55").Select
Selection.ClearContents
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Windows\" & tenfile, _
Destination:=Range("A55"))
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
 
Upvote 0
Mình là dân mới học lập trình VBA, nhiều thứ cũng tự mò. Mình muốn dùng code để chèn tự động 1 hình ảnh vào 1 ô Excel.
PHP:
Public Function InsertPicture() As Object
InsertPicture = Sheet1.Pictures.Insert("Penguins.jpg")
With Pic
.Top = Sheet1.Cells(48, 4).Top
.Left = Sheet1.Cells(48, 4).Left
End With
End Function
Ở trên ô Excel, mình gõ InsertPicture() thì nó bị #VALUE!
Vậy đoạn code của mình bị sai chỗ nào? Mong các bạn giúp đỡ.
File đính kèm: http://www.mediafire.com/?w2m7nqu3kjf5u6k
Tóm lại: Hàm tự tạo không thể làm nhiệm vụ chèn hình, format gì được đâu... trừ trường hợp hình ấy chèn vào 1 comment
 
Upvote 0
oke bạn :

Sub Read_Data()
Dim tenfile As String
tenfile = "test.ini"
Range("A55").Select
Selection.ClearContents
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\W indows\" & tenfile, _
Destination:=Range("A55"))
.Name = "test"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Có hai khả năng:
1. Câu lệnh này dư một dấu cách trong chữ W indows: With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\W indows\" & tenfile, _
Destination:=Range("A55"))

2. Không tồn tại File test trong thư mục Windows

Nói chung là lỗi không tồn tại file .ini
Mà dòng code nào thừa (mặc định rồi) thì dọn bớt đi cho gọn
 
Upvote 0
Có hai khả năng:
1. Câu lệnh này dư một dấu cách trong chữ W indows: With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\W indows\" & tenfile, _
Destination:=Range("A55"))

2. Không tồn tại File test trong thư mục Windows

Nói chung là lỗi không tồn tại file .ini
Mà dòng code nào thừa (mặc định rồi) thì dọn bớt đi cho gọn

Cảm ơn bạn đã hồi âm.
- Vấn đề 1 do mình khi post lên gõ thiếu
- Vấn đề 2 : file *.ini hoặc (*.txt) mình đã có sẵn trong thư mục C:\Windows rồi.
- Vì khi bị lỗi thì nó đánh dấu ở dòng này nên muốn hỏi ý nghĩa của dòng lệnh này,( .Refresh BackgroundQuery:=False : bỏ quả Refresh_ có phải vậy kg? ) có thể bỏ nó được kg?
 
Upvote 0
trong đoạn Code của thày Ndu, tôi chưa hiểu được bản chất của việc sử dụng Dictionary lắm, nhờ mọi người giúp hộ, cụ thể đoạn Code sau:

PHP:
Sub Test()
  Dim Arr1(1 To 4), Arr2, Dic1, i As Long
  Arr1(1) = "a"
  Arr1(2) = "b"
  Arr1(3) = "c"
  Arr1(4) = "d"
  Set Dic1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(Arr1)
    If Not Dic1.Exists(Arr1(i)) Then Dic1.Add Arr1(i), Asc(Arr1(i))
  Next
  Arr2 = Dic1.Keys
  MsgBox Arr2(0)
  MsgBox Arr2(1)
  MsgBox Dic1.Item("a")
  MsgBox Dic1.Item("b")
End Sub
tôi chưa hiểu lắm cái đuôi Asc(Arr1(i) là cái gì, khi tôi bấm chạy F5 kết quả hai giá trị cuối cùng là 97, 98 là do ở đâu mà có nó?
 
Upvote 0
trong đoạn Code của thày Ndu, tôi chưa hiểu được bản chất của việc sử dụng Dictionary lắm, nhờ mọi người giúp hộ, cụ thể đoạn Code sau:

PHP:
Sub Test()
  Dim Arr1(1 To 4), Arr2, Dic1, i As Long
  Arr1(1) = "a"
  Arr1(2) = "b"
  Arr1(3) = "c"
  Arr1(4) = "d"
  Set Dic1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(Arr1)
    If Not Dic1.Exists(Arr1(i)) Then Dic1.Add Arr1(i), Asc(Arr1(i))
  Next
  Arr2 = Dic1.Keys
  MsgBox Arr2(0)
  MsgBox Arr2(1)
  MsgBox Dic1.Item("a")
  MsgBox Dic1.Item("b")
End Sub
tôi chưa hiểu lắm cái đuôi Asc(Arr1(i) là cái gì, khi tôi bấm chạy F5 kết quả hai giá trị cuối cùng là 97, 98 là do ở đâu mà có nó?
Hàm Asc tương đương với hàm CODE của Excel ấy
Ví dụ:
Asc("a") = 97
và:
CODE("a") = 97
Nó trả về kết quả là 1 số nguyên đại diện cho MÃ CỦA KÝ TỰ
Thế thôi
 
Upvote 0
Hàm Asc tương đương với hàm CODE của Excel ấy
Ví dụ:
Asc("a") = 97
và:
CODE("a") = 97
Nó trả về kết quả là 1 số nguyên đại diện cho MÃ CỦA KÝ TỰ
Thế thôi

Thế làm sao để trả mã về được dạng này: ChrW(), giả sử muốn chữ Ô thành ChrW(xxx) thì phải làm sao?
 
Upvote 0
Hỏi về code để copy file từ thư mục này sang thu mục khác định trước.

chào các cao thủ, tôi thực ra không hiểu rõ về VBA nhưng có kiếm được trên diễn đàn đoạn code để xóa file trong một thu mục (thư mục này quản lý bằng excel). Nay tôi muốn thêm một nút bấm để copy file đã chọn sang thu mục khác. Mong các bác giúp đỡ, code như sau:

Private oFilePropReader As DSOleFile.PropertyReader
Private oDocProp As DSOleFile.DocumentProperties
Dim eFile As String, eFolderName As String
Dim stt As Integer

Private Sub CommandButton1_Click()
On Error Resume Next
Dim ewbName As String
Dim oCustProp As DSOleFile.CustomProperty
Set oFilePropReader = New DSOleFile.PropertyReader
eFolderName = Cells(4, 5)
stt = TextBox1.Text
ewbName = Cells(stt + 8, 3)
eFile = eFolderName & "\" & ewbName
Set oDocProp = oFilePropReader.GetDocumentProperties(eFile)
TextBox2.Text = oDocProp.Name
TextBox3.Text = oDocProp.Title
TextBox4.Text = oDocProp.Subject
TextBox5.Text = oDocProp.Author
TextBox6.Text = oDocProp.Category
TextBox7.Text = oDocProp.Manager
CommandButton2.Enabled = True
Set oDocProp = Nothing
End Sub
Private Sub CommandButton2_Click()
On Error Resume Next


Kill eFolderName & "\" & TextBox2.Text

TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""

End Sub
Đoạn code này em muốn viết thành copy file đuọc chọn sang thu mục định sẵn (thư mục có thể là gán vào trong form hoặc 1 cell cho trước)
Private Sub CommandButton4_Click()
On Error Resume Next


Kill eFolderName & "\" & TextBox2.Text

TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""

End Sub


Private Sub CommandButton3_Click()
UserForm1.Hide
End Sub
 
Upvote 0
Nhờ các AC giải thích giúp dòng code dưới giúp, thanks : (ReDim và UBound)

PHP:
ReDim Mg(1 To UBound(Vung) * 2, 1 To 32)
 
Upvote 0
Nhờ các AC giải thích giúp dòng code dưới giúp, thanks : (ReDim và UBound)

PHP:
ReDim Mg(1 To UBound(Vung) * 2, 1 To 32)


Với Vung là một mảng, ta ReDim lại mảng này thành mảng Mg

1 to UBound(Vung)* 2 là mảng bắt đầu từ 1 và có số dòng là số dòng của Vung nhân cho 2 (nếu số dòng của Vung là 10 thì số dòng của Mg là 20)

1 To 32 là số cột của mảng mới chạy từ cột thứ 1 đến cột thứ 32

Như vậy từ mảng Vung ban đầu đã chuyển đổi thành mảng Mg mới với số hàng bằng gấp hai lần số hàng của Vùng và số cột là 32.
 
Upvote 0
Mình có kiếm được đoạn Code để nhập số nguyên tự động chuyển thành số thập phân: Ví dụ nhập 55 chuyển thành 5.5
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Target.Value > 10 Then Target.Value = Target.Value / 10
End Sub
Nhưng như vậy thì nhập ở bất cứ đâu thì các số đều tự động chuyển hết
Vậy nhờ các bạn giúp mình thêm đoạn Code để chỉ được nhập trong một vùng tùy chọn?
 
Upvote 0
Bạn cần thêm dòng lệnh để khoanh vùng nơi nhập liệu, như

PHP:
 If Not Intersect(Taret, Columns("D:D")) Is Nothing then
    'Dòng Lệnh của bạn'

 End If

Bạn thử nghiệm với việc nhập vô cột 'D';

Sau khi nhuần nhuyễn, bạn sửa lại địa chỉ này thích hợp với trang nhập liệu của bạn.

(húc thành công!
 
Upvote 0
PHP:
 If Not Intersect(Taret, Columns("D:D")) Is Nothing then
    'Dòng Lệnh của bạn'

 End If

Bạn thử nghiệm với việc nhập vô cột 'D';

Sau khi nhuần nhuyễn, bạn sửa lại địa chỉ này thích hợp với trang nhập liệu của bạn.

(húc thành công!
Ui sao có phải vậy ko? Mình chỉ biết về hàm thôi, còn VBA này thì tịt, nên đặt thêm câu lệnh của bạn vào trên hay dưới If nó cũng ko chạy được, bạn giúp mình hoàn thành đoạn Code đó đi, mình đã làm vậy mà ko chạy!
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Intersect(Taret, Columns("D:D")) Is Nothing Then

If Target.Value > 10 Then Target.Value = Target.Value / 10

 End If
End Sub
 
Upvote 0
Ui sao có phải vậy ko? Mình chỉ biết về hàm thôi, còn VBA này thì tịt, nên đặt thêm câu lệnh của bạn vào trên hay dưới If nó cũng ko chạy được, bạn giúp mình hoàn thành đoạn Code đó đi, mình đã làm vậy mà ko chạy!
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
If Not Intersect([COLOR=#ff0000][B]Taret[/B][/COLOR], Columns("D:D")) Is Nothing Then

If Target.Value > 10 Then Target.Value = Target.Value / 10

 End If
End Sub
Bạn thử sửa chỗ màu đỏ thành Target xem có được không. Ngoài ra, thay Columns("D:D") bởi Sh.Columns("D:D") cho tường minh.
 
Upvote 0
Bạn thử sửa chỗ màu đỏ thành Target xem có được không. Ngoài ra, thay Columns("D:D") bởi Sh.Columns("D:D") cho tường minh.
Ngoài ra còn phải thêm Application.EnableEvents = False vào đầu code và Application.EnableEvents = True vào cuối code nữa mới chuẩn
 
Upvote 0
Ngoài ra còn phải thêm Application.EnableEvents = False vào đầu code và Application.EnableEvents = True vào cuối code nữa mới chuẩn
Bác Phúc và Bác Ndu ơi! Em cop đoạn code này mà sai ở đâu vậy? Nó chưa chịu chạy đâu, mong các bác giúp em chút đi!
Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
If Not Intersect(Target, Sh.Columns("D:D")) Is Nothing Then

If Target.Value > 10 Then Target.Value = Target.Value / 10
Application.EnableEvents = True
 End If
 
End Sub
 
Upvote 0
Bác Phúc và Bác Ndu ơi! Em cop đoạn code này mà sai ở đâu vậy? Nó chưa chịu chạy đâu, mong các bác giúp em chút đi!
Mã:
[B][COLOR=#ff0000]Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)[/COLOR][/B]
Application.EnableEvents = False
On Error Resume Next
If Not Intersect(Target, Sh.Columns("D:D")) Is Nothing Then

If Target.Value > 10 Then Target.Value = Target.Value / 10
Application.EnableEvents = True
 End If
 
End Sub

Cấu trúc câu lệnh của bạn sai chứ gì!

Mã:
[COLOR=#0000cd][B]Private Sub Worksheet_Change(ByVal Target As Range)[/B][/COLOR]
    If Not Intersect(Target, Columns("D:D")) Is Nothing Then
        If Target.Value > 10 Then Target.Value = Target.Value / 10
    End If
End Sub
 
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