Giải thích hộ một số lỗi của file excel có VBA

Liên hệ QC

MicrosoftExcel

Thành viên chính thức
Tham gia
21/8/08
Bài viết
97
Được thích
30
Hi all
Tôi có một chương trình viết trong VBA, nhưng không hiểu sao lại bị một số lỗi sau.

- Khi tôi đổi tên name của range thì tự động nó cứ nhảy từ sheet hiện hành sang sheet khác.
- Khi tôi đổi tên sheet xong và ấn Enter thì chương trình tự động tính toán.
- File rất hay bị đóng tự động và recover.

Sau đây là file kèm theo nhờ các bạn xem xét lỗi hộ.

Hoặc là link down từ Media

http://www.mediafire.com/?9nfozyxjhte
 

File đính kèm

Trong hàm có đoạn code

ActiveWorkbook.save

nên khi bạn thay đổi số liệu Excel sẽ tự động Save và hiển nhiên trước khi Save nó phải tự động Caculation.

Bạn bỏ dòng code đó đi là ổn.
 
Upvote 0
Trong hàm có đoạn code

ActiveWorkbook.save

nên khi bạn thay đổi số liệu Excel sẽ tự động Save và hiển nhiên trước khi Save nó phải tự động Caculation.

Bạn bỏ dòng code đó đi là ổn.

Thế còn những lỗi kia thì sao hả bạn. Tôi tưởng là khi đổi tên sheet thì file đã save đâu nhỉ. Nó cũng chỉ như là thay đổi một ô dữ liệu thôi chứ?
 
Upvote 0
Bạn thử làm như sau:

- Trước tiên bạn để chế độ Disable Macro để nó không tự động chạy được
- Sau đó bạn mở file và Alt+F11, mở cửa số VBA
- Mở hết module kiểm tra xem hàm nào có ActiveWorkbook.save thì đánh dấu " ' " trước nó đi
- Save file, đóng
- Đặt chế độ Enable Macro, mở lại file sẽ hết lỗi.
* Các lỗi trên đều do hàm UDF có dòng code ActiveWorkbook.save

File của bạn công thứ nhiều bạn nên đặt chế độ caculation = manual, Khi nào cần tính toán thì F9 excel sẽ không bị chậm.
 
Upvote 0
Bạn có thể xem giúp mình đoạn code này được không?
Sao mình vẽ biểu đồ mà đoạn code này cứ báo lỗi, mặc dù mình đã khai báo là mảng rồi mà vị trí mảng vẫn bị lỗi.

PHP:
Sub VedothiZFW()
'
' Vedothi ZFW Macro
'
'

'
'Ve do thi Z~F~W
Dim Z, F, W, Td, Qd, Qx As Range
Dim Tdt, Qdt, Qxdt, Wdt, Zdt As Range
Dim Fn As WorksheetFunction
Set Fn = Application.WorksheetFunction


    'Ve do thi
    Charts.Add
    
    'Chon kieu do thi Scatter
    ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
    
    'Ve do thi F~Z
    
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=Dauvao!F"     'Lỗi ở chỗ này
    ActiveChart.SeriesCollection(1).Values = "=Dauvao!Z"       'Lỗi ở chỗ này
    ActiveChart.SeriesCollection(1).Name = "F"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="ChartZFW"
    With ActiveChart
        .HasAxis(xlCategory, xlPrimary) = True
        .HasAxis(xlValue, xlPrimary) = True
    End With
    ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
    
    'Ve do thi W~Z
    
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).XValues = "=Dauvao!W"     'Lỗi ở chỗ này
    ActiveChart.SeriesCollection(2).Values = "=Dauvao!Z"        'Lỗi ở chỗ này
    ActiveChart.SeriesCollection(2).Name = "W"
    
    ' Hien truc toa do cho chuoi du lieu thu 2 la W
    
    ActiveChart.SeriesCollection(2).Select
    ActiveChart.SeriesCollection(2).AxisGroup = 2
    ActiveChart.ChartArea.Select
    
    'Them truc toa do cho chuoi du lieu thu 2
    
    With ActiveChart
        .HasAxis(xlCategory, xlPrimary) = True
        .HasAxis(xlCategory, xlSecondary) = True
        .HasAxis(xlValue, xlPrimary) = True
        .HasAxis(xlValue, xlSecondary) = True
    End With
    ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
    ActiveChart.Axes(xlCategory, xlSecondary).CategoryType = xlAutomatic
    ActiveChart.Axes(xlCategory, xlSecondary).Select
    'ActiveWindow.Visible = False
    
    ' Dao chieu cot du lieu cho truc thu 2
    
    With ActiveChart.Axes(xlCategory, xlSecondary)
        .MinimumScaleIsAuto = True
        .MaximumScaleIsAuto = True
        .MinorUnitIsAuto = True
        .MajorUnitIsAuto = True
        .Crosses = xlAutomatic
        .ReversePlotOrder = True
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
    ' Dinh dang khoang cach gia tri cot du lieu theo truc tung Z ~F
    
        ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    With ActiveChart.Axes(xlValue)
        .MinimumScale = Fn.Min(Z)          'Lỗi ở chỗ này
        .MaximumScale = Fn.Max(Z)        'Lỗi ở chỗ này
        .MinorUnitIsAuto = True
        .MajorUnit = 10
        .Crosses = xlAutomatic
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    
    ' Dinh dang khoang cach gia tri cot du lieu theo truc tung Z ~W
    
    ActiveChart.Axes(xlValue, xlSecondary).Select
    With ActiveChart.Axes(xlValue, xlSecondary)
        .MinimumScale = Fn.Min(Z)          'Lỗi ở chỗ này
        .MaximumScale = Fn.Max(Z)        'Lỗi ở chỗ này
        .MinorUnitIsAuto = True
        .MajorUnit = 10
        .Crosses = xlMaximum
        .ReversePlotOrder = False
        .ScaleType = xlLinear
        .DisplayUnit = xlNone
    End With
    'ActiveWindow.Visible = False
    
    ' Dinh dang lai co font chu cho tung truc toa do
    
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.Axes(xlValue).Select
    Selection.TickLabels.AutoScaleFont = True
    With Selection.TickLabels.Font
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    ActiveChart.Axes(xlCategory).Select
    Selection.TickLabels.AutoScaleFont = True
    With Selection.TickLabels.Font
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    
    ' Doi lai font nen cho do thi thanh mau trang
    
    With Selection.Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
    End With
    Selection.Interior.ColorIndex = xlNone
    
    ' Dinh vi vi tri bieu doi
    ' Dinh chieu rong'
    ActiveSheet.ChartObjects(1).Width = 350
    ' Dinh chieu cao'
    ActiveSheet.ChartObjects(1).Height = 220
    'Dinh vi tri canh trai bang voi canh trai cot B (cot 2)'
    ActiveSheet.ChartObjects(1).Left = Cells(1, 2).Left
    'Dinh vi tri canh tren bang voi canh tren dong 5'
    ActiveSheet.ChartObjects(1).Top = Cells(5, 1).Top
    
    
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể xem giúp mình đoạn code này được không?
Sao mình vẽ biểu đồ mà đoạn code này cứ báo lỗi, mặc dù mình đã khai báo là mảng rồi mà vị trí mảng vẫn bị lỗi.
Vậy đoạn Code của bạn làm việc với DL (dữ liệu) như thế nào; Có lẽ bạn nên đưa cả phần DL lên, hay mô tả kỹ DL mới dám trả lời hay giúp bạn một cách nhanh chóng được. :-=
 
Upvote 0
Đây là file dữ liệu của mình! Mình gắn kèm và có link down nữa. Vì file rất nặng và nhiều công thức nên phiền bạn giản nén ra dùm nhé.

Link down http://www.mediafire.com/?piomijmtp9m
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
"=Dauvao!F" ?
Dauvao - Tên sheet
F ? địa chỉ không có nên thông báo lỗi.
Trước khi hoàn thiện bạn debug -> Compile VBAproject để nó kiểm tra qua các lỗi rồi bạn chạy thử Macro sẽ ít lỗi hơn.

Chúc bạn sớm hoàn thành.
 
Upvote 0
Của tôi có thấy hiện Debug -> Compile VBAproject đâu, nhưng khi Run thì lại báo lỗi chỗ ấy. Thực sự tôi chưa hiểu cái Series trong biểu đồ lắm. VÌ mảng ở đây là F, Zw,...vv đã khai báo trong excel là dùng cho toàn bộ workbook, mảng này là mảng động. Ở đây để chắc ăn tôi đã chỉ ra mảng này trong sheet Dauvao! Nhưng không hiểu sao nó vẫn chưa nhận mảng này. Trong excel tôi vẽ biểu đồ này để và thay vùng dữ liệu thành tên mảng thì nó lại hiện cả tên file và mảng kèm theo cụ thể giống như sau 'Ten file'!Tenmang, cái tên này trong chuỗi series được thay cho vùng dữ liệu. Vậy sao tên mảng lại không thay thế được mà vẫn phải kèm cả tên file! Vậy trong VBA nên làm thế nào là hợp lý và đúng đắn nhất?
 
Upvote 0
Sao chẳng có ai trả lời giúp vậy, ai biết xin hãy trả lời giúp tôi với!!
 
Upvote 0
Web KT

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

Back
Top Bottom