返回列表 上一主題 發帖

[發問] 請問VBA 的程式有沒有可以辨認某個儲存格內的字元有無包含某幾個字串?

本帖最後由 GBKEE 於 2013-3-9 12:52 編輯

回復 14# 198188
Set Rng = Sh.Columns("D").Find(a, lookat:=xlWhole) 這句只是會找一次
如下可尋找全部
  1. Option Explicit
  2. Sub Ex()
  3.     Dim A As String, Rng As Range, Sh As Worksheet, Address_First As String
  4.     Dim M As String
  5.     Set Sh = ActiveSheet
  6.     A = "OBL"                                          '尋找的字串
  7.     Set Rng = Sh.Columns("D").Find(A, lookat:=xlWhole) '第一個
  8.     If Not Rng Is Nothing Then
  9.         Address_First = Rng.Address                    '寫下第一個位址
  10.         Do
  11.             M = IIf(M <> "", M & ",", "") & Rng.Address
  12.             Set Rng = Sh.Columns("D").FindNext(Rng)   '繼續尋找下一個
  13.         Loop Until Address_First = Rng.Address        '回到第一個位址
  14.         MsgBox M
  15.      Else
  16.         MsgBox "找不到"
  17.     End If
  18. End Sub
  19. Sub Ex_1()
  20.     Dim A As String, Rng As Range, Sh As Worksheet, Address_First
  21.     Set Sh = ActiveSheet
  22.     A = "OBL"                                           '尋找的字串
  23.     Set Rng = Sh.Columns("D").Find(A, lookat:=xlWhole)  '第一個
  24.     If Not Rng Is Nothing Then
  25.         With Sh.Columns("D")
  26.             .Replace A, "=ABC", xlWhole                 '修改"尋找的字串" = 沒定義的名稱
  27.             Set Rng = .SpecialCells(xlCellTypeFormulas, xlErrors) '儲存格有錯誤值的特定範圍
  28.             Rng.Value = A                                '沒定義的名稱 改回 "尋找的字串"
  29.             MsgBox Rng.Address
  30.         End With
  31.     Else
  32.         MsgBox "找不到"
  33.     End If
  34. End Sub
複製代碼
因為我是想只要訂單號相同,而且這些訂單號只要有一列有OBL三個字,就出現OBL否則空格
不了解你檔案內容 無法回答

TOP

回復 16# 198188
  1. Option Explicit
  2. Sub Ex()
  3.     Dim R As Range, Rng As Range, E As Range
  4.     With Sheet1                         '*** 須改為: Test.xlsm的State Sheet
  5.         Set R = .Cells(1, "a")          'A1開始
  6.         Do Until R = ""                 '離開迴圈的條件:  A欄的 儲存格=""
  7.             With Sheet2                 '*** 須改為: W:\Payment Daily Report\DOCS RECEIVED N RELEASED RECORD.xlsx"
  8.                 Set Rng = .Columns("D").Find(R, lookat:=xlWhole)
  9.                  If Not Rng Is Nothing Then
  10.                     With .Columns("D")
  11.                         .Replace R, "=ABC", xlWhole                 '修改"尋找的字串" = 沒定義的名稱
  12.                         Set Rng = .SpecialCells(xlCellTypeFormulas, xlErrors) '儲存格有錯誤值的特定範圍
  13.                         Rng.Value = R                               '沒定義的名稱 改回 "尋找的字串"
  14.                         For Each E In Rng.Offset(0, 4)              'D欄位移4欄=H欄
  15.                             If InStr(UCase(E), "OBL") Then          'H欄的字元內包含"OBL"三個字
  16.                                                                     'UCase(E) 轉換為大寫
  17.                                 R.Offset(0, 9) = E.Value            'R.Offset(0, 9)-> A欄位移到 J欄
  18.                                 'Test.xlsm的State Sheet->J欄=DOCS RECEIVED N RELEASED RECORD.xlsx"->H欄的字元
  19.                                 Exit For    '有找到 "OBL" 離開迴圈                          '
  20.                             End If
  21.                        Next
  22.                     End With                '.Columns("D")
  23.                 End If
  24.             End With                        'Sheet2
  25.             Set R = R.Offset(1)             '下移到 A2
  26.         Loop
  27.     End With                                'Sheet1
  28. End Sub
複製代碼

TOP

回復 20# 198188
With Sheet2                 (這句是否改With W:\Payment Daily Report\DOCS RECEIVED N RELEASED RECORD.xlsx ?)但是好像不對??
如果我寫這句替代上面兩句fs = "W:\PIHK\DOCS RECEIVED N RELEASED RECORD.xlsx"
第5行這句
With Workbooks.Open(fd & fs)
就要改成
With Workbooks.Open(fs)
  1.              With Workbooks.Open(fs)
  2.                      Set Sh=.Sheets("收單記錄SHEET")
  3.              End With

  4.               With Sh  '->如此 Sh 已替代為為W:\Payment Daily Report\DOCS RECEIVED N RELEASED RECORD.xlsx"的 收單記錄SHEET
  5.             
  6.                End With
複製代碼

TOP

回復 32# 198188
If Worksheets("OHC").Range("G" & i) - Date <= 2 Then 這句哪裡出現問題了?
條件式:  Range("G?")(<- 必需是日期) - Date(當天日期)<=2(天)
你說出現問題了 ,請說明白!!
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 35# 198188
typing mistake 的翻譯是輸入錯誤
請檢查 Range("g?")是否是數字,或傳上檔案看看
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 每天無所事事,是人生的消費者,積極、有用才是人生的創造者。
返回列表 上一主題