Tạo danh mục bị lỗi reference is not valid

Liên hệ QC

bjboyn00b

Thành viên chính thức
Tham gia
17/12/10
Bài viết
83
Được thích
4
Mình có lấy code ở trên mạng để tạo list các sheet trong file ở sheet đầu tiên, với vài sheet không sao, nhưng với file có nhiều sheet thì bị lỗi "reference is not valid"
Code mình lấy như sau:
Mã:
Sub Binh_Creat_List()
'
' Binh_Creat_List Macro
'
' Keyboard Shortcut: Ctrl+j

Dim wsSheet As Worksheet
Dim ws As Worksheet
Dim Counter As Long
On Error Resume Next
Set wsSheet = Sheets("Mucluc")
'Kiem tra su ton tai cua Sheet
On Error GoTo 0
If wsSheet Is Nothing Then
'Neu chua co thi them vao vi tri dau tien cua Workbook
Set wsSheet = ActiveWorkbook.Sheets.Add(Before:=Worksheets(1))
wsSheet.Name = "Mucluc"
End If
With wsSheet
.Cells(2, 1) = "DANH SACH CAC SHEET"
.Cells(2, 1).Name = "Index"
.Cells(4, 1).Value = "STT"
.Cells(4, 2).Value = "Ten Sheet"
End With
'Merge Cell
With Range("A2:B2")
.Merge
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
'Set ColumnWidth
With Columns("A:A")
.ColumnWidth = 8
.HorizontalAlignment = xlCenter
End With
With Range("A4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Columns("B:B").ColumnWidth = 30
With Range("B4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Counter = 1
For Each ws In Worksheets
If ws.Name <> wsSheet.Name Then
'Gan gia tri cot thu tu
wsSheet.Cells(Counter + 4, 1).Value = Counter
'Tao lien ket
wsSheet.Hyperlinks.Add Anchor:=wsSheet.Cells(Counter + 4, 2), _
Address:="", _
SubAddress:=ws.Name & "!A1", _
ScreenTip:=ws.Name, _
TextToDisplay:=ws.Name
'Them nut Quay ve Sheet Muc luc tai moi Sheet
With ws
.Hyperlinks.Add Anchor:=.Range("H1"), Address:="", SubAddress:="Index", TextToDisplay:="Quay ve"
End With
Counter = Counter + 1
End If
Next ws
Set xlSheet = Nothing
End Sub

Ai biết chỉ giúp mình code sai ở đâu với nhé
 
Bạn up file bị lỗi lên xem thử thế nào, chứ nhìn vào đám rừng này mệt quá.
 
Cảm ơn bạn, mình sửa rồi nhưng vẫn bị, không phải chỉ sheet có dấu - mới bị mà sheet thường cũng thế, có sheet được, có sheet không :(
Miễn tên sheet có dấu "-", khoảng trắng, dấu "="... và một số ký tự đặc biệt khác đều bị.
 
Miễn tên sheet có dấu "-", khoảng trắng, dấu "="... và một số ký tự đặc biệt khác đều bị.
Mình đã sửa như sau
Mã:
Sub Binh_Creat_List()
'
' Binh_Creat_List Macro
'
' Keyboard Shortcut: Ctrl+j

Dim wsSheet As Worksheet
Dim ws As Worksheet
Dim Counter As Long
On Error Resume Next
Set wsSheet = Sheets("Mucluc")
'Kiem tra su ton tai cua Sheet
On Error GoTo 0
If wsSheet Is Nothing Then
'Neu chua co thi them vao vi tri dau tien cua Workbook
Set wsSheet = ActiveWorkbook.Sheets.Add(Before:=Worksheets(1))
wsSheet.Name = "Mucluc"
End If
With wsSheet
.Cells(2, 1) = "DANH SACH CAC SHEET"
.Cells(2, 1).Name = "Index"
.Cells(4, 1).Value = "STT"
.Cells(4, 2).Value = "Ten Sheet"
End With
'Merge Cell
With Range("A2:B2")
.Merge
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
'Set ColumnWidth
With Columns("A:A")
.ColumnWidth = 8
.HorizontalAlignment = xlCenter
End With
With Range("A4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Columns("B:B").ColumnWidth = 30
With Range("B4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Counter = 1
For Each ws In Worksheets
If ws.Name <> wsSheet.Name Then
'Gan gia tri cot thu tu
wsSheet.Cells(Counter + 4, 1).Value = Counter
'Tao lien ket
wsSheet.Hyperlinks.Add Anchor:=wsSheet.Cells(Counter + 4, 2), _
Address:="", _
[COLOR=#ff0000]SubAddress:="'" & ws.Name & "'!A1",_[/COLOR]
ScreenTip:=ws.Name, _
TextToDisplay:=ws.Name
'Them nut Quay ve Sheet Muc luc tai moi Sheet
With ws
.Hyperlinks.Add Anchor:=.Range("H1"), Address:="", SubAddress:="Index", TextToDisplay:="Quay ve"
End With
Counter = Counter + 1
End If
Next ws
Set xlSheet = Nothing
End Sub

Sửa như vậy đã okie chưa bạn nhỉ?
 
Mình đã sửa như sau
Mã:
Sub Binh_Creat_List()
'
' Binh_Creat_List Macro
'
' Keyboard Shortcut: Ctrl+j

Dim wsSheet As Worksheet
Dim ws As Worksheet
Dim Counter As Long
On Error Resume Next
Set wsSheet = Sheets("Mucluc")
'Kiem tra su ton tai cua Sheet
On Error GoTo 0
If wsSheet Is Nothing Then
'Neu chua co thi them vao vi tri dau tien cua Workbook
Set wsSheet = ActiveWorkbook.Sheets.Add(Before:=Worksheets(1))
wsSheet.Name = "Mucluc"
End If
With wsSheet
.Cells(2, 1) = "DANH SACH CAC SHEET"
.Cells(2, 1).Name = "Index"
.Cells(4, 1).Value = "STT"
.Cells(4, 2).Value = "Ten Sheet"
End With
'Merge Cell
With Range("A2:B2")
.Merge
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
'Set ColumnWidth
With Columns("A:A")
.ColumnWidth = 8
.HorizontalAlignment = xlCenter
End With
With Range("A4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Columns("B:B").ColumnWidth = 30
With Range("B4")
.HorizontalAlignment = xlCenter
.Font.Bold = True
End With
Counter = 1
For Each ws In Worksheets
If ws.Name <> wsSheet.Name Then
'Gan gia tri cot thu tu
wsSheet.Cells(Counter + 4, 1).Value = Counter
'Tao lien ket
wsSheet.Hyperlinks.Add Anchor:=wsSheet.Cells(Counter + 4, 2), _
Address:="", _
[COLOR=#ff0000]SubAddress:="'" & ws.Name & "'!A1",_[/COLOR]
ScreenTip:=ws.Name, _
TextToDisplay:=ws.Name
'Them nut Quay ve Sheet Muc luc tai moi Sheet
With ws
.Hyperlinks.Add Anchor:=.Range("H1"), Address:="", SubAddress:="Index", TextToDisplay:="Quay ve"
End With
Counter = Counter + 1
End If
Next ws
Set xlSheet = Nothing
End Sub

Sửa như vậy đã okie chưa bạn nhỉ?

cái chỗ bôi đỏ giống như mình nói mà. Mình test có bị cái nào đâu nhỉ?
 
a .
 

File đính kèm

  • Untitled.png
    Untitled.png
    25.6 KB · Đọc: 20
Lần chỉnh sửa cuối:
mình làm thì bị báo như sau

Bạn xem giúp mình nhé, tk bạn

Nếu file của bạn đã có sẵn sheet "Mucluc" thì chạy thử Sub này coi sao:
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Ws As Worksheet, Rng As Range, Cll As Range, Tem As String, Arr(), K As Long
ReDim Arr(1 To Worksheets.Count, 1 To 1)
For Each Ws In Worksheets
    If Ws.Name <> "Mucluc" Then
        Tem = Ws.Name
        K = K + 1
        Arr(K, 1) = Tem
        Ws.Activate
        ActiveSheet.Hyperlinks.Add Anchor:=Range("H1"), Address:="", SubAddress:= _
        "'Mucluc'!H1", TextToDisplay:="Quay Ve"
    End If
Next Ws
With Sheets("Mucluc")
    .Activate
    .[B5:B1000].Clear
    .Range("B5:B1000").NumberFormat = "@"
    .[B5].Resize(K) = Arr
    Set Rng = .Range(.[B5], .[B5].End(xlDown))
    Rng.Sort Key1:=.[B5]
    For Each Cll In Rng
        ActiveSheet.Hyperlinks.Add Anchor:=Cll, Address:="", SubAddress:= _
        "'" & Cll.Value & "'!H1", TextToDisplay:=Cll.Value
    Next Cll
End With
End Sub
 

File đính kèm

  • Mucluc.rar
    693.4 KB · Đọc: 19
Lần chỉnh sửa cuối:
Nếu file của bạn đã có sẵn sheet "Mucluc" thì chạy thử Sub này coi sao:
PHP:
Public Sub GPE()
Application.ScreenUpdating = False
Dim Ws As Worksheet, Rng As Range, Cll As Range, Tem As String, Arr(), K As Long
ReDim Arr(1 To Worksheets.Count, 1 To 1)
For Each Ws In Worksheets
    If Ws.Name <> "Mucluc" Then
        Tem = Ws.Name
        K = K + 1
        Arr(K, 1) = Tem
        Ws.Activate
        ActiveSheet.Hyperlinks.Add Anchor:=Range("H1"), Address:="", SubAddress:= _
        "'Mucluc'!H1", TextToDisplay:="Quay Ve"
    End If
Next Ws
With Sheets("Mucluc")
    .Activate
    .[B5:B1000].Clear
    .Range("B5:B1000").NumberFormat = "@"
    .[B5].Resize(K) = Arr
    Set Rng = .Range(.[B5], .[B5].End(xlDown))
    Rng.Sort Key1:=.[B5]
    For Each Cll In Rng
        ActiveSheet.Hyperlinks.Add Anchor:=Cll, Address:="", SubAddress:= _
        "'" & Cll.Value & "'!H1", TextToDisplay:=Cll.Value
    Next Cll
End With
End Sub

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

Mình làm cách này được nha. Cám ơn bạn.
 
Web KT
Back
Top Bottom