khongnhienttt
Thành viên hoạt động



- Tham gia
- 15/7/15
- Bài viết
- 137
- Được thích
- 33
mình có 2 vấn đề cần hỏi
- thứ nhất theo mình biết mảng là tập hợp các phần tử co cấu trúc giống nhau, vậy ví dụ như mình muốn gán 1 vùng dữ liệu trong excel vùng này có định dạng số, chuỗi, ngày tháng ... thì mình khai báo dim Arr() và gán Arr bằng vùng đó, vậy mỗi biến trong Arr thì nó tự hiểu là viriant phải không ạ.
+ tiếp theo nếu vùng dữ liệu của mình toàn chuỗi mình làm thế này
hoặc
nó báo lỗi type missmacth là sao thế các bạn
- thứ 2 dù đã đọc rất nhiều về dùng private, public, static function nhưng mình vẫn chưa rõ lắm, theo mình hiểu nếu khai báo hàm là private thì mình khi ở module khác sẽ không gọi được hàm đó, còn khi là public thì từ module khác có thể gọi tới hàm đó được, còn static function mình nghĩ khi thực hiện xong hàm thì giá trị của hàm sẽ được lưu giữ lại ( nhưng chưa tường tận được giữ lại thế nào)
+ thấy trong Hàm CommPic phiên bản mới nhất với nhiều tùy chọn của thầy ndu96081631: thì tại sao lại dùng private cho hàm URLExists.Code:
Function CommPic(ByVal PicPath As String, Optional ByVal PicCel As Range, _
Optional ByVal ScaleWidth As Single = 1, _
Optional ByVal ScaleHeight As Single = 1) As String
Dim mRng As Range, cmt As Comment, fso As Object, bChk As Boolean
On Error Resume Next
Application.Volatile
Set fso = CreateObject("Scripting.FileSystemObject")
If PicCel Is Nothing Then Set PicCel = Application.ThisCell
PicCel(1, 1).Comment.Delete
If Left(PicPath, 7) = "http://" Then
bChk = URLExists(PicPath)
Else
bChk = fso.FileExists(PicPath)
If bChk = False Then
PicPath = ThisWorkbook.Path & "" & PicPath
bChk = fso.FileExists(PicPath)
End If
End If
If bChk Then
If PicCel(1, 1).Comment Is Nothing Then PicCel(1, 1).AddComment
PicCel(1, 1).Comment.Text vbLf
Set mRng = PicCel(1, 1).MergeArea
If mRng Is Nothing Then Set mRng = PicCel(1, 1)
Set cmt = mRng(1, 1).Comment
cmt.Visible = True
With cmt.Shape
.LockAspectRatio = msoFalse
.Placement = xlMoveAndSize
.Shadow.Visible = msoFalse
.Line.ForeColor.RGB = PicCel.Interior.Color
.AutoShapeType = msoShapeRectangle
.Left = mRng.Left: .Top = mRng.Top
.Width = mRng.Width: .Height = mRng.Height
.ScaleWidth ScaleWidth, msoFalse, msoScaleFromMiddle
.ScaleHeight ScaleHeight, msoFalse, msoScaleFromMiddle
.Fill.UserPicture PicPath
End With
End If
End Function
Private Function URLExists(ByVal URL As String) As Boolean
Application.Volatile
On Error Resume Next
If Left(UCase(URL), 7) <> "HTTP://" Then URL = "http://" & URL
With CreateObject("MSXML2.XMLHTTP")
.Open "HEAD", URL, False: .send
URLExists = .Status = 200
End With
End Function
- thứ nhất theo mình biết mảng là tập hợp các phần tử co cấu trúc giống nhau, vậy ví dụ như mình muốn gán 1 vùng dữ liệu trong excel vùng này có định dạng số, chuỗi, ngày tháng ... thì mình khai báo dim Arr() và gán Arr bằng vùng đó, vậy mỗi biến trong Arr thì nó tự hiểu là viriant phải không ạ.
+ tiếp theo nếu vùng dữ liệu của mình toàn chuỗi mình làm thế này
Mã:
Sub Rectangle1_Click()
Dim a() As String
a = Range("a1:h1").Value
MsgBox a(5)
End Sub
hoặc
Mã:
Sub Rectangle1_Click()
Dim a() As String
a = Range("a1:a10").Value
MsgBox a(5)
End Sub
nó báo lỗi type missmacth là sao thế các bạn
- thứ 2 dù đã đọc rất nhiều về dùng private, public, static function nhưng mình vẫn chưa rõ lắm, theo mình hiểu nếu khai báo hàm là private thì mình khi ở module khác sẽ không gọi được hàm đó, còn khi là public thì từ module khác có thể gọi tới hàm đó được, còn static function mình nghĩ khi thực hiện xong hàm thì giá trị của hàm sẽ được lưu giữ lại ( nhưng chưa tường tận được giữ lại thế nào)
+ thấy trong Hàm CommPic phiên bản mới nhất với nhiều tùy chọn của thầy ndu96081631: thì tại sao lại dùng private cho hàm URLExists.Code:
Function CommPic(ByVal PicPath As String, Optional ByVal PicCel As Range, _
Optional ByVal ScaleWidth As Single = 1, _
Optional ByVal ScaleHeight As Single = 1) As String
Dim mRng As Range, cmt As Comment, fso As Object, bChk As Boolean
On Error Resume Next
Application.Volatile
Set fso = CreateObject("Scripting.FileSystemObject")
If PicCel Is Nothing Then Set PicCel = Application.ThisCell
PicCel(1, 1).Comment.Delete
If Left(PicPath, 7) = "http://" Then
bChk = URLExists(PicPath)
Else
bChk = fso.FileExists(PicPath)
If bChk = False Then
PicPath = ThisWorkbook.Path & "" & PicPath
bChk = fso.FileExists(PicPath)
End If
End If
If bChk Then
If PicCel(1, 1).Comment Is Nothing Then PicCel(1, 1).AddComment
PicCel(1, 1).Comment.Text vbLf
Set mRng = PicCel(1, 1).MergeArea
If mRng Is Nothing Then Set mRng = PicCel(1, 1)
Set cmt = mRng(1, 1).Comment
cmt.Visible = True
With cmt.Shape
.LockAspectRatio = msoFalse
.Placement = xlMoveAndSize
.Shadow.Visible = msoFalse
.Line.ForeColor.RGB = PicCel.Interior.Color
.AutoShapeType = msoShapeRectangle
.Left = mRng.Left: .Top = mRng.Top
.Width = mRng.Width: .Height = mRng.Height
.ScaleWidth ScaleWidth, msoFalse, msoScaleFromMiddle
.ScaleHeight ScaleHeight, msoFalse, msoScaleFromMiddle
.Fill.UserPicture PicPath
End With
End If
End Function
Private Function URLExists(ByVal URL As String) As Boolean
Application.Volatile
On Error Resume Next
If Left(UCase(URL), 7) <> "HTTP://" Then URL = "http://" & URL
With CreateObject("MSXML2.XMLHTTP")
.Open "HEAD", URL, False: .send
URLExists = .Status = 200
End With
End Function