Hỏi về lỗi VBA trong file

  • Thread starter Thread starter boyxin
  • Ngày gửi Ngày gửi
Liên hệ QC

boyxin

Members actively
Tham gia
10/3/08
Bài viết
1,664
Được thích
2,335
các bác ui, xem giúp em trong file này em chạy mỗi tý là hiện thông báo lỗi VBA và dừng luôn, không hiều VBA bị trục trặc chỗ nào các bác xem và xử lý giúp


 
-File trên mắc lỗi tràn bộ nhớ, do bạn khai báo biến i as byte mà chiều dài text của bạn vượt quá 255. Cách khắc phục: Giảm chiều dài text hoặc khai báo biến kiểu Integer.
 
Upvote 0
-File trên mắc lỗi tràn bộ nhớ, do bạn khai báo biến i as byte mà chiều dài text của bạn vượt quá 255. Cách khắc phục: Giảm chiều dài text hoặc khai báo biến kiểu Integer.

HI, cảm ơn thầy voda nhiều nhiều
  1. Chiều dài text thì không cắt ngắn được,
    vì em làm file để chức mừng các thành viên nhân ngày sinh nhật 15-6
    (đó là tên các thành viên sinh nhật ngày hôm nay - sẽ chỉ có thể dài thêm)
    hiện tại LEN(text)=409
  2. Xin thầy nói thêm về hướng khắc phục
    • khai báo biến kiểu Integer thì chiều dài text tối đa là bao nhiêu? (đã khai báo lại kiểu Integer vẫn lỗi)
    • có thể ngắt thành 2 hoặc 3 đoạn cho những đoạn này cùng chạy được không?
 
Lần chỉnh sửa cuối:
Upvote 0
HI, cảm ơn thầy voda nhiều nhiều
  1. Chiều dài text thì không cắt ngắn được,
    vì em làm file để chức mừng các thành viên nhân ngày sinh nhật 15-6
    (đó là tên các thành viên sinh nhật ngày hôm nay - sẽ chỉ có thể dài thêm)
    hiện tại LEN(text)=409
  2. Xin thầy nói thêm về hướng khắc phục
    • khai báo biến kiểu Integer thì chiều dài text tối đa là bao nhiêu? (đã khai báo lại kiểu Integer vẫn lỗi)
    • có thể ngắt thành 2 hoặc 3 đoạn cho những đoạn này cùng chạy được không?

Biến String :

There are two kinds of strings: variable-length and fixed-length strings.
  • A variable-length string can contain up to approximately 2 billion (2^31) characters.
  • A fixed-length string can contain 1 to approximately 64K (2^16) characters.
Biến Integer : Chạy theo chiều dài của biến String

Bill đã viết:
-32,768 to 32,767; fractions are rounded.

Biến Long : Chạy theo chiều dài của biến String : Được các Nha sĩ khuyên dùng
Bill đã viết:
-2,147,483,648 to 2,147,483,647; fractions are rounded.
!!

Thân!
 
Upvote 0
Mã:
Option Explicit
Public RunText As Boolean
Public Sub StartRunText()
Dim t As Single, i As Integer, j As Byte
Dim x As String, y As String, Text As String
    RunText = True
    With Sheet1.Range("NameText")
        .Value = Sheet1.Range("Text")
        i = 1
        Do
                Text = .Value
                If i > Len(Text) Then i = 1
                x = Left(Text, 1):        y = Right(Text, Len(Text) - 1)
                Text = y + x:            .Value = Text
                .Characters(Start:=1, Length:="" & Len(Text) - i & "").Font.ColorIndex = 4
                .Characters(Start:="" & Len(Text) - i & "", Length:="" & i & "").Font.ColorIndex = 5
                Shapes("WordArt1").IncrementRotation (5)
                t = Timer
            Do
                    DoEvents
            Loop Until Timer - t > 0.2
        i = i + 1
        Loop Until Not RunText
    End With
End Sub
Nhìn vào đoạn code trên, ta thấy:
-Khi vòng lặp chạy, biến i tăng lên (i =i + 1)
-Nhưng khi biến i lớn hơn chiều dài text, biến i trở lại giá trị ban đầu ( i = 1)
-Vậy ta phải khai báo biến i phụ thuộc vào chiều dài text.
+Khi chiều dài text < 255, ta khai báo kiểu byte.
+Khi chiều dài text< 32.767 ta khai báo kiểu integer.
+khi chiều dài text< 2.147.483.647 ta khai báo kiểu long.
Trong thực tế sử dụng, chỉ cần khai báo kiểu integer cũng đủ rồi.
(Nếu bạn đã khai báo rồi mà lỗi vẫn xảy ra, bạn cần mô tả lỗi ấy cụ thể hơn)
 
Upvote 0
Em có 1 ý tưởng như vầy: Nếu ta có 1 đoạn text có chuỗi ký tự dài (dài lắm). Vậy thì ta chỉ lấy một đoạn ký tự nằm giữa ra thôi. Rồi cho đoạn ký tự nằm giữa này chạy từ đầu này sang đầu bên kia. Ví dụ: +Phần đầu: Ta có 1 đoạn text 500 ký tự. Vậy nếu số j (là số tự thay đổi từ 1 -> 500) 400 rồi thì ta lấy ngược đoạn text để kết hợp được từ ký tự thứ 401 đến ký tự thứ 500 và từ ký tự đầu đến ký tự thứ 100. +Phần ba: Khi j=1 thì ta lại quay về phần đầu. Không biết có khả thi không mong xin ý kiến!
 
Lần chỉnh sửa cuối:
Upvote 0
BOYXIN CHÂN THÀNH CẢM ƠN
voda
user_offline.gif

8th Excel Member
gold.gif
gold.gif
gold.gif
gold.gif


Mr Okebab
user_offline.gif

Ngon Ngất Ngây !!!!
pip.gif
pip.gif
pip.gif


VẤN ĐỀ CỦA BOYXIN ĐÃ ĐƯỢC GIẢI QUYẾT XONG
-----------------------------------------------------------

MỌI NGƯỜI NGHIÊN CỨU TIẾP Ý TƯỜNG CỦA Po_Pikachu . CHÚC SỚM THÀNH CÔNG
 
Upvote 0
Em làm đến đây thì gặp 1 vấn đề là khi nối chuổi đầu với cuối lại thì được nhưng muốn có thêm vài khoảng trắng giữa đầu và cuối thì không được?
Bác nào giúp em phần này với.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em làm đến đây thì gặp 1 vấn đề là khi nối chuổi đầu với cuối lại thì được nhưng muốn có thêm vài khoảng trắng giữa đầu và cuối thì không được?
Bác nào giúp em phần này với.

Đơn giản nhất :
PHP:
b = Sheet1.Range("B22").Text   & "                    "

Thân!
 
Upvote 0
Có vậy thôi mà không biết, dở ơi là dở luôn! Cảm ơn bác nha! Thanks.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom