2011-12-18 68 views
34

Tôi đang cố gắng tạo một đoạn mã thay thế một từ bằng một từ khác. Ví dụ: Thay thế Avenue bằng Ave và North bằng N. Tôi đang sử dụng MS Access, tôi có thể sử dụng hàm SQL REPLACE nhưng tôi muốn thực hiện điều này trong VBA bằng mô-đun Access để tôi có thể đính kèm hàm này vào cột khác.Truy cập VBA | Cách thay thế các phần của chuỗi bằng một chuỗi khác

Tôi không chắc bắt đầu từ đâu, vì vậy mọi đầu vào sẽ được đánh giá cao.

Guy

+2

Bạn đã viết mã nào cho đến nay? –

+0

Như tôi đã đề cập, tôi có thể viết điều này bằng cách sử dụng: 'DECLARE @Mymessage varchar (100) SET @Mymessage =‘ Tôi không biết cách thực hiện điều này trong VBA. ‘ CHỌN LỰA CHỌN (@Mymessage,‘ know ’,‘ understand ’)' Một lần nữa, tôi không chắc chắn cách viết điều này trong VBA trong một mô-đun. Cảm ơn thời gian của bạn. – Asynchronous

+0

Xem thêm http://stackoverflow.com/questions/8571192/access-vba-to-trim-space-around-a-specific-character-or-wordss-in-a-column/8571442#8571442 – Fionnuala

Trả lời

54

chức năng VBA sử dụng truy cập của Replace(text, find, replacement):

Dim result As String 

result = Replace("Some sentence containing Avenue in it.", "Avenue", "Ave") 
+0

Tôi nên có giải thích tốt hơn, nói rằng tôi có một tên cột Địa chỉ. Tôi chỉ đơn giản là cố gắng thay thế Avenue trong cột địa chỉ. Bạn là người sáng nhất! Cảm ơn bạn đã đầu vào có giá trị của bạn. – Asynchronous

+0

Trong trường hợp đó, hãy thực hiện trong TSQL –

+0

Đây là giải pháp của tôi! Cảm ơn vì đã giúp tôi với điều này: Tất cả chúng ta đều phải bò trước khi chúng tôi có thể đi bộ. Công Function TrmChar (ReplaceChar As String) ReplaceChar = Replace (ReplaceChar, "đại lộ", "Ave") TrmChar = ReplaceChar End Function – Asynchronous

1

Bạn có thể sử dụng một chức năng tương tự như sau cũng có, nó sẽ cho phép bạn thêm trong những trường hợp khác nhau mà bạn muốn thay đổi các giá trị:

Public Function strReplace(varValue As Variant) as Variant 

    Select Case varValue 

     Case "Avenue" 
      strReplace = "Ave" 

     Case "North" 
      strReplace = "N" 

     Case Else 
      strReplace = varValue 

    End Select 

End Function 

Sau đó SQL của bạn sẽ đọc một cái gì đó như:

SELECT strReplace(Address) As Add FROM Tablename 
+0

Để thêm vào câu trả lời này. 1. Trường hợp có thể chấp nhận nhiều đối số: ví dụ: CASE "Đại lộ", "Ave." 2. Trường hợp quan trọng. Sử dụng lcase hoặc ucase với các so sánh của bạn – ray

1

Vì chuỗi "Bắc" có thể là phần đầu của tên phố, ví dụ: "Đại lộ phía Bắc", chỉ đường phố luôn nằm giữa số phố và tên phố, và được tách biệt với số phố và tên phố.

Public Function strReplace(varValue As Variant) as Variant 

Select Case varValue 

    Case "Avenue" 
     strReplace = "Ave" 

    Case " North " 
     strReplace = " N " 

    Case Else 
     strReplace = varValue 

End Select 

End Function 
2

Tôi đã đọc chủ đề này và muốn thêm thông tin mặc dù nó chắc chắn không còn kịp thời cho OP.

BiggerDon ở trên chỉ ra những khó khăn của việc thay thế chữ "Bắc" bằng "N". Một vấn đề tương tự tồn tại với "Avenue" đến "Ave" (ví dụ: "Avenue of the Americas" trở thành "Ave of the Americas": vẫn có thể hiểu được, nhưng có lẽ không phải là điều OP muốn.

Hàm replace() là hoàn toàn Một giải pháp hoàn chỉnh cần phải có logic bổ sung để giải thích ngữ cảnh một cách chính xác, và sau đó áp dụng thay thế() nếu cần.

Cơ sở dữ liệu thường chứa địa chỉ, và vì vậy tôi muốn chỉ ra rằng Phiên bản tổng quát của vấn đề OP được áp dụng cho các địa chỉ bên trong Hoa Kỳ đã được giải quyết (hài hước!) bởi Hệ thống Hỗ trợ Độ chính xác Mã hóa (CASS) CASS là một công cụ cơ sở dữ liệu chấp nhận địa chỉ của Hoa Kỳ và hoàn thành hoặc sửa chữa nó. do Bưu điện Hoa Kỳ thiết lập. Mục nhập Wikipedia https://en.wikipedia.org/wiki/Postal_address_verification có các thông tin cơ bản và có thêm thông tin tại Bưu điện: https://ribbs.usps.gov/index.cfm?page=address_info_systems

Các vấn đề liên quan