Đoạn code VBA bị lỗi khi chạy trên OpenOffice, LibreOffice (1 người xem)

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

Người dùng đang xem chủ đề này

o0o

Thành viên mới
Tham gia
6/12/07
Bài viết
21
Được thích
5
Em có đoạn code VBA như bên dưới được lưu trong file Excel (chạy bằng Excel thì okie).
Tuy nhiên, khi open file Excel bằng OpenOffice hoặc LibreOffice thì nó bị báo lỗi ở 3 chỗ:

- Set foundCell = .Cells.Find( ....
=> Cái này xóa chữ Set đi thì okie. Không hiểu vì sao vậy.
- FindNext(foundCell)
=> Không hiểu lệnh FindNext cần viết như thế nào cho nó hiểu.
- AddShape()
=> Lệnh AddShape cũng không hiểu cần sửa lại thế nào.

Em cần sửa lại như thế nào ?

Mấy bác chưa pro về OpenOffice cũng có thể giúp em bằng cách gợi ý về cách viết khác của các lệnh trên giúp em với nhé.

Mã:
Option Explicit

Private Sub drawMemo()
    Dim shapename As String
    Dim arrMemo() As String, cntMemo As Long
    Dim foundCell As Range, FirstAddress As String, foundRow As Long
    
    shapename = "Product"
    cntMemo = -1
    ReDim arrMemo(0)
    
    With Worksheets(1)
        Set foundCell = .Cells.Find(What:=shapename _
            , LookIn:=xlValues, LookAt:=xlWhole _
            , SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , MatchByte:=False, SearchFormat:=False)
        If Not foundCell Is Nothing Then
            FirstAddress = foundCell.Address
            Do
                foundRow = foundCell.Cells.Row
                cntMemo = cntMemo + 1
                ReDim Preserve arrMemo(cntMemo)
                arrMemo(cntMemo) = .Cells(foundRow, 1) & " " & .Cells(foundRow, 2) & " " & .Cells(foundRow, 3)
                
                Set foundCell = .Cells.FindNext(foundCell)
                If foundCell Is Nothing Then Exit Do
            Loop Until foundCell.Address = FirstAddress
        End If
    End With

    If cntMemo <> -1 Then
        Call addMemo(shapename, arrMemo)
    End If
EndProc:

End Sub

Private Sub addMemo(shapename As String, arrMemo() As String)
    Dim shapeMemoObj As Shape
    Dim start As Long, memo As String

    Set shapeMemoObj = Worksheets(2).Shapes.AddShape(16, 50, 50, 120, 45)
    With shapeMemoObj
        .Name = "MEMO" & shapename
        .Line.DashStyle = msoLineRoundDot
        With .TextFrame
            memo = Join(arrMemo, vbLf)
            For start = 1 To Len(memo) Step 255
                If (start + 254) <= 32767 Then
                    .Characters(start, 255).Text = _
                        Mid$(memo, start, 255)
                Else
                    .Characters(start, 32767 - start + 1).Text = _
                        Mid$(memo, start, 32767 - start + 1)
                    Exit For
                End If
            Next start
        End With
    End With
    
End Sub
 

File đính kèm

Nếu không nhầm, OpenOffice không sử dụng VBA. Đó là một lý do mà mọi người chưa muốn chuyển sang nó.
 
Upvote 0
Chào anh.

Open/LibreOffice hỗ trợ Macro viết bằng VBA một cách hạn chế. Nên để sử dụng được Macro ( tạo sẵn bằng VBA) trên Open/LibreOffice thì em nghĩ có 2 cách:
- Convert hoàn toàn VBA sang code BASIC của Open/LibreOffice
- Update code VBA lại một cách "basic" nhất để Open/LibreOffice có thể hiểu được.

Em đang convert mấy cái Macro dùng trong công việc từ Excel -> Open/LibreOffice. Diễn đàn mình dùng MS Office quen rồi nên ai cũng ngại nghiên cứu OpenOffice. Có lẽ em nên code luôn bằng Basic của OpenOffice luôn cho đỡ đau đầu.

thanks anh.
 
Upvote 0
Chào anh.

Open/LibreOffice hỗ trợ Macro viết bằng VBA một cách hạn chế. Nên để sử dụng được Macro ( tạo sẵn bằng VBA) trên Open/LibreOffice thì em nghĩ có 2 cách:
- Convert hoàn toàn VBA sang code BASIC của Open/LibreOffice
- Update code VBA lại một cách "basic" nhất để Open/LibreOffice có thể hiểu được.

Em đang convert mấy cái Macro dùng trong công việc từ Excel -> Open/LibreOffice. Diễn đàn mình dùng MS Office quen rồi nên ai cũng ngại nghiên cứu OpenOffice. Có lẽ em nên code luôn bằng Basic của OpenOffice luôn cho đỡ đau đầu.

thanks anh.

Đúng vậy, nhiều người còn quen sử dụng Excel 2003, không chịu nâng cấp lên mặc dù bản mới có nhiều thứ hay hơn! OpenOffice ban đầu tôi biết (năm 2006) hoàn toàn không sử dụng được VBA. Từ đó cũng chẳng ngó lại nữa... -+*/
 
Upvote 0
Tôi nghĩ ooo và xls là pm bảng tính từ hai hãng nên khác nhau về các đối tượng mặc dù giao diện người dùng gần giống vớ xl2003. Điểm chung là dùng ngôn ngữ Basic để điều khiển pm qua các đối tượng. Muốn lập trìng cho ooo có lẽ cần thiết phải đọc tài liệu hướng dẫn, mô tả các đối tượng như khi ta học Excel VBA.
 
Upvote 0
Tôi nghĩ ooo và xls là pm bảng tính từ hai hãng nên khác nhau về các đối tượng mặc dù giao diện người dùng gần giống vớ xl2003. Điểm chung là dùng ngôn ngữ Basic để điều khiển pm qua các đối tượng. Muốn lập trình cho ooo có lẽ cần thiết phải đọc tài liệu hướng dẫn, mô tả các đối tượng như khi ta học Excel VBA.

Trước đây khi mới có OpenOffice tôi đã sử dụng thử vài tháng rồi không sử dụng nữa vì những nguyên do sau:
Những phiên bản trước thì giao diện khác với MS Office 2003 nhưng phiên bản OpenOffice 3.3 và OpenOffice 3.4 thì giao diện gần giống.
- Tốc độ xử lý chậm hơn, thao tác phức tạp hơn MS Office 2003 (thử sử dụng PivotTable trong OpenOffice thì sẽ rõ).
- Người dùng không thích sử dụng OpenOffice nguyên do đa số người dùng đã quen với MS Office 2003, nếu sử dụng OpenOffice phải tốn thời gian học lại nhưng hiện nay hầu như những cơ sở dạy vi tính không dạy OpenOffice nên người dùng muốn học cũng chẳng biết học ở đâu.
- Sử dụng VBA cũng khó khăn và đôi khi bị lỗi phải cài thêm Java6 mới chạy được (các loại Java khác thì không thích hợp).
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom