Board logo

標題: [發問] 請教改良速度方法 [打印本頁]

作者: 198188    時間: 2012-11-23 20:57     標題: 請幫忙解決錯誤。

本帖最後由 GBKEE 於 2012-11-24 15:35 編輯

[attach]13260[/attach]

Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, Rng As Range
If Target.Column = 1 Then
With Sheets("oracle")
For i = 1 To .UsedRange.Rows.Count
   Set A = .UsedRange.Rows(i).Find(Target)
   If Not A Is Nothing Then
     If Rng Is Nothing Then
     Set Rng = .UsedRange.Rows(i)
     Else
     Set Rng = Union(Rng, .UsedRange.Rows(i))
     End If
    End If
Next
End With
End If
If Not Rng Is Nothing Then Rng.Copy Target.Offset(, 1)

End Sub
請問哪裡出錯了,前一千個左右都找對了,但之後的資料就開始亂了。
另外請問
1)如何將尋找範圍規定某一個欄,不是全部都在尋找範圍。
2)If Target.Column = 1 Then 可否改成指定某個字嗎?例如:Target = "TT"
3)可否設定幾個尋找的規則嗎?例如:Client = "John"  Payment term = “TT”   ORIGIN = "USA"
4)可否將Target指定某一個儲存格?
5)可否只是copy 符合規格的某幾個欄的資料嗎?不是全部資料都copy 過去。例如 A 欄,C欄,E欄,其他的都不要。
作者: 198188    時間: 2012-11-25 21:41

回復 1# 198188


    請問有無高人可以幫忙解答?
作者: GBKEE    時間: 2012-11-26 15:22

回復 2# 198188
你列出的程序,但沒說明目的效果,是沒人明瞭你要請教什麼.
例如:Client = "John"  Payment term = “TT”   ORIGIN = "USA"  這也看不懂你要請教什麼.
作者: mark15jill    時間: 2012-11-26 16:19

回復 3# GBKEE


    If Target.Column = 1 Then   這個好像是 搜尋範圍  他要將 Target 改成  "TT"  ,只是 看了看,感覺不順.....
作者: 198188    時間: 2012-11-30 14:08

回復 3# GBKEE
Private Sub Worksheet_Change(ByVal Target As Range)
Dim A As Range, Rng As Range
If Target.Column = 1 Then
With Sheets("oracle")
For i = 1 To .UsedRange.Rows.Count
    Set A = .UsedRange.Rows(i).Find(Target)
    If Not A Is Nothing Then
      If Rng Is Nothing Then
      Set Rng = .UsedRange.Rows(i)
      Else
      Set Rng = Union(Rng, .UsedRange.Rows(i))
      End If
     End If
Next
End With
End If
If Not Rng Is Nothing Then Rng.Copy Target.Offset(, 1)

End Sub
資料庫
  A               B                   C                D                 E                F                  G
    姓名        性別        電話        國藉        車牌        年齡        職業
John        男        11111111        China        有        25        Clerk
Peter        男        22222222        Germany        有        30        A/C
David        男        33333333        USA        無        15        Admin
Tina        女        44444444        China        有        25        Clerk
June        女        55555555        Italy        無        35        Clerk

想要效果:
1)如何將尋找範圍規定某一個欄,不是全部都在尋找範圍。
就是想在姓名(A)一欄設定為尋找範圍
例如:規則:想找含有"a"的資料
結果:
Tina        女        44444444        China        有        25        Clerk

2)If Target.Column = 1 Then 可否改成指定某個字嗎?例如:Target = "TT"
如何設定將Target不是Column 而是指定一個字。
規則:Target含有“in”子資料
結果:
John        男        11111111        China        有        25        Clerk
David        男        33333333        USA        無        15        Admin
Tina        女        44444444        China        有        25        Clerk

3)可否設定幾個尋找的規則嗎?例如:Client = "John"  Payment term = “TT”   ORIGIN = "USA"
規則:性別=“男”; 車牌=“有”
結果:
John        男        11111111        China        有        25        Clerk
Peter        男        22222222        Germany        有        30        A/C
規則:國藉=“China"; 車牌=“有”;年齡="25"; 職業="Clerk"
結果:
John        男        11111111        China        有        25        Clerk
Tina        女        44444444        China        有        25        Clerk

4)可否將Target指定某一個儲存格?
例如將Target指定是另一個表的儲存格"A1"
只要A1輸入"男", Target就是"男"
結果:
John        男        11111111        China        有        25        Clerk
Peter        男        22222222        Germany        有        30        A/C
David        男        33333333        USA        無        15        Admin

或者將Target指定是另一個表的儲存格"A1" 及 "A2"
只要A1輸入"男", A2輸入"有“ ;Target就是"男" 和 "有”
結果:
John        男        11111111        China        有        25        Clerk
Peter        男        22222222        Germany        有        30        A/C

5)可否只是copy 符合規格的某幾個欄的資料嗎?不是全部資料都copy 過去。例如 A 欄,C欄,E欄,其他的都不要。
設定只會copy A 欄,B欄,C欄
規則Target="有"
結果:
John        男        11111111
Peter        男        22222222
Tina        女        44444444
作者: GBKEE    時間: 2012-12-1 10:59

回復 5# 198188


   [attach]13352[/attach]

姓名-職業欄 字尾加*可搜查含此字串的資料
如圖 Sheet2 的程式碼
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)         '這是工作表的觸發事件
  3.     Dim xlFind As Range, F As String, W As String
  4.     Application.EnableEvents = False                        'EnableEvents 屬性 如果指定物件能觸發事件,則本屬性為 True。讀/寫 Boolean。
  5.     If Target.Row = 2 Then                                  '改變輸入(資料)的儲存格列位=2
  6.         If Target.Column >= 1 And Target.Column <= 7 Then   '改變輸入(資料)的儲存格欄位介於 A欄:G欄 間
  7.         'If Target.Row = 2 And Target.Column >= 1 And Target.Column <= 7 Then  '兩判斷式 可合併
  8.             Cells(Rows.Count, "A").End(xlUp).CurrentRegion.Offset(1) = ""   '清除舊有尋找的資料
  9.             W = Replace(Target, "*", "")                                    '去掉 "*"字串
  10.             Set xlFind = Sheets("資料庫").Columns(Target.Column).Find(W, LOOKAT:=IIf(InStr(Target, "*"), xlPart, xlWhole))
  11.                       '在Sheets("資料庫").Columns(Target.Column) 的相同欄位中Target有"*"  尋找有xlPart(部份)相同
  12.             If Not xlFind Is Nothing Then           '尋找到
  13.                 F = xlFind.Address                  '設下第一個找到的位置
  14.                 Do
  15.                     With Cells(Rows.Count, "A").End(xlUp).Offset(1)
  16.                         Cells(.Row, "A") = xlFind.Parent.Cells(xlFind.Row, "A")  'xlFind.Parent: Parent 物件的父層
  17.                         Cells(.Row, "B") = xlFind.Parent.Cells(xlFind.Row, "B")  'xlFind.Row:    找到的列號
  18.                         Cells(.Row, "C") = xlFind.Parent.Cells(xlFind.Row, "C")
  19.                         ' Cells(.Row, "C") 前面沒加  . 是在這Sheet 的 Cells(儲存格)
  20.                     End With
  21.                     Set xlFind = Sheets("資料庫").Columns(Target.Column).FindNext(xlFind) '接著往下找
  22.                 Loop While F <> xlFind.Address      '離開迴圈: 直到尋找回第一個找到的位置
  23.             End If
  24.          End If
  25.     End If
  26.     Application.EnableEvents = True
  27. End Sub
複製代碼

作者: 198188    時間: 2012-12-1 12:50

回復 6# GBKEE

[attach]13356[/attach]

是可以尋找出來,但是要在第二欄輸入才會出來,如果第二欄我用的不是姓名尋找,那麼就會有重複
John         男        11111111        a*
John         男        11111111       
Peter        男        22222222       
David        男        33333333       
Tina        女        44444444       
June        女        55555555       
另外我用兩個來尋找,出來的是最後輸入的哪個規格的資料,但我想要的是要全部符合才會出來。另外第二欄出現一次後就需要自己刪除(John 男 11111111)
John         男        11111111        usa*                        clerk*
David        男        33333333                               
                       
請問可否在sheet3 做條件用途
A1 是填數字,寫明會有多少個規則,
A2表示這條規則應用在哪一欄 B2代表要尋找的資料
例如
A1 填 "1"
A2 填 "B"; B2 填 "男"
出來的是
John         男        11111111
Peter        男        22222222
David        男        33333333

例如
A1 填 "3"
A2 填 "D"; B2 填 "A"
A3 填 "E"; B2 填 "有"
A4 填 "F"; B2 填 "CLERK"
出來的是
John         男        11111111       
Tina        女        44444444       

例如
A1 填 "2"
A2 填 "D"; B2 填 "A"
A3 填 "E"; B2 填 "無"
出來的是
David        男        33333333
作者: 198188    時間: 2012-12-1 20:16

回復 7# 198188


請問高人明白我想表示什麼嗎?需要更加詳細表明嗎?
作者: stillfish00    時間: 2012-12-2 11:20

回復 7# 198188
你應該注意一下G版的縮圖 ,
他這樣做已經將條件區和篩選結果分開了,
你的sheet2一開始是完全空白
作者: 198188    時間: 2012-12-2 11:39

回復 9# stillfish00


這點我知道,不採用Option Explicit就可以了。可以用按鈕或者手動控制。最主要是可以做到那些功能。
作者: stillfish00    時間: 2012-12-2 14:49

回復 10# 198188
參考看看 , 利用進階篩選做的
[attach]13371[/attach]
[attach]13372[/attach]
  1. Sub myFilter()
  2.     Dim rngSrc As Range, rngCopyField As Range, rngFilter As Range
  3.     Dim nextRow As Long, endRow As Long
  4.    
  5.     Set rngSrc = Sheets("資料庫").[A1:G7]
  6.     Set rngCopyField = Sheets("條件區").[B8:H8]
  7.     Set rngFilter = Sheets("條件區").[B1].Resize(Sheets("條件區").[B1].CurrentRegion.Rows.Count, 8)
  8.    
  9.     nextRow = Sheets("整理區").UsedRange.Rows.Count + 1
  10.                
  11.     rngSrc.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:= _
  12.     rngFilter, CopyToRange:=Sheets("整理區").Range("A" & nextRow)
  13.         
  14.     endRow = Sheets("整理區").UsedRange.Rows.Count
  15.    
  16.     For i = 1 To rngCopyField.Count
  17.         If rngCopyField(i) = "N" Then
  18.             Sheets("整理區").Range(nextRow & ":" & endRow).Columns(i).Clear
  19.         End If
  20.     Next
  21.    
  22.     Sheets("整理區").Range("A" & nextRow).Resize(1, 7).Delete Shift:=xlUp   'delete header
  23.    
  24.     Set rngSrc = Nothing
  25.     Set rngCopyField = Nothing
  26.     Set rngFilter = Nothing
  27. End Sub
複製代碼

作者: 198188    時間: 2012-12-3 09:33

回復 11# stillfish00

請問如果尋找條件是空格,應該如何表示?
作者: stillfish00    時間: 2012-12-3 11:31

回復 12# 198188
條件設定都跟進階篩選準則一樣
你可以參考  http://office.microsoft.com/zh-tw/excel-help/HP010073942.aspx
如輸入
=" "        篩選該欄位為單個空白字元
="* *"    篩選該欄位包含空白字元
=" *"      篩選該欄位以空白字元開頭
作者: 198188    時間: 2012-12-3 11:56

本帖最後由 198188 於 2012-12-3 11:58 編輯

回復 13# stillfish00


    姓名         性別         電話         國藉         車牌         年齡         職業
John         男        11111111        China        有                Clerk
Peter        男        22222222        Germany        有        30        A/C
David        男        33333333        USA        無        15        ADMIN
Tina        女        44444444        China        有        25        Clerk
June        女        55555555        ITALY        無        35        Clerk


進階篩選準則:        姓名         性別         電話         國藉         車牌         年齡         職業
                                       *n*                                                                       =" "
複製欄位:                             Y        Y        Y        N        Y        N        Y

沒有反應,沒有資料出來
作者: stillfish00    時間: 2012-12-3 12:16

回復 14# 198188
找空白儲存格 , 輸入
=   或   ="="
作者: 198188    時間: 2012-12-3 12:47

回復 15# stillfish00


    另一個問題,請問如果要尋找絕對值呢,應該如何寫?
例如:
KEN
KENNY
KEN CHEN
CHAN KEN

如果只要顯示ken的資料,那麼應該怎樣寫?
作者: 198188    時間: 2012-12-3 13:00

回復 15# stillfish00


    [attach]13377[/attach]
好像有些問題,無法做到
作者: stillfish00    時間: 2012-12-3 13:59

回復 17# 198188

="=KEN"

[attach]13378[/attach]
1.  你欄數共有38欄 resize也要跟著改
2.  Result工作表要清空值的時候 , 要用整列刪除 ,
     否則判斷Sheets("Result").UsedRange.Rows.Count列數時
     還會是清空前的列數 , 這點我也不知道何解...
作者: 198188    時間: 2012-12-3 15:27

本帖最後由 198188 於 2012-12-3 15:29 編輯

回復 18# stillfish00

請問為什麼按一次後,它自動將最後那row當成下次的第一個?
因為我按一次後,把資料刪除後就在上一次執行的最後一列+1開始,可以讓它不會自動記憶,每按一次就先刪除以前的資料,然後都從A2開始。
另外我附件內另一個程式執行時很慢,有加快的方法嗎
作者: mark15jill    時間: 2012-12-3 15:32

回復 10# 198188


    左邊那張縮圖有說明...
作者: stillfish00    時間: 2012-12-3 19:15

回復 19# 198188
可以自己改阿 , 我是以為你要一直新增才這樣寫的..
    'nextRow = Sheets("Result").UsedRange.Rows.Count + 1
    nextRow = 2
    Sheets("Result").UsedRange.Offset(1).Clear
    ---略---
    'endRow = Sheets("Result").UsedRange.Rows.Count
    endRow = Sheets("Result").Range("A" & Sheets("Result").Rows.Count).End(xlUp)
作者: 198188    時間: 2012-12-3 23:03     標題: 請教改良速度方法

Sub Worksheet()
Dim LastRec As Integer
Dim i As Integer

Worksheets("Oracle").Range("G1").Select
ActiveCell.End(xlDown).Select
     LastRec = ActiveCell.Row
     
For i = 2 To LastRec
Worksheets("Oracle").Range("A" & i).Value = Worksheets("Oracle").Range("G" & i).Value '將G欄的值COPY到A欄

If IsError(Application.VLookup(Worksheets("Oracle").Range("C" & i).Value, Sheets("Follower").Range("A:E"), 5, False)) Then
Worksheets("Oracle").Range("B" & i).Value = ""  假如SHEET ORACLE C欄的值在SHEET FOLOWER A:E欄找不到,就將B欄設定空格
Else
Worksheets("Oracle").Range("B" & i).Value = Application.VLookup(Worksheets("Oracle").Range("c" & i).Value, Sheets("Follower").Range("A:E"), 5, False) 否則將SHEET ORACLE C欄在SHEET FOLLOWER尋找相同,並將相同的E欄值放在SHEET ORACLE B欄
End If

Next i
i = i + 1

End Sub

運行大約7000ROW,但運行得很慢,請問各位大大,有沒有可以加快運行的方法?
作者: GBKEE    時間: 2012-12-4 09:17

回復 22# 198188
測試完成約12秒,時間不算長吧!
  1. Option Explicit
  2. Sub Worksheet()
  3.     Dim LastRec As Integer
  4.     Dim i As Integer, T
  5.     T = Time
  6.     With Worksheets("Oracle")
  7.          LastRec = .Range("G1").End(xlDown).Row
  8.         .Range("A2:A" & LastRec).Value = .Range("G2:G" & LastRec).Value  '全部直接給值會快些
  9.         For i = 2 To LastRec
  10.             If IsError(Application.VLookup(Worksheets("Oracle").Range("C" & i).Value, Sheets("Follower").Range("A:E"), 5, False)) Then
  11.                 .Range("B" & i).Value = ""
  12.             Else
  13.                 .Range("B" & i).Value = Application.VLookup(Worksheets("Oracle").Range("c" & i).Value, Sheets("Follower").Range("A:E"), 5, False)
  14.             End If
  15.         Next
  16.     End With
  17.     MsgBox Format(Time - T, "HH:MM:SS")
  18. End Sub
複製代碼

作者: 198188    時間: 2012-12-4 09:30

回復 23# GBKEE

12秒夠快了,謝謝~
另外請問如果用Option Explicit,我將資料從另外一個excel copy過來,它會自動run嗎?還是需要另外按鈕才能run?
作者: GBKEE    時間: 2012-12-4 09:53

回復 24# 198188
Option Explicit 陳述式 在模組層次中強迫每個在模組�堛瘍僂くㄔ眸楨�確的宣告。
模組層有Option Explicit作用是:  系統會提醒,沒宣告的變數須宣告. 要養成這習慣 有助程式的偵錯.
作者: 198188    時間: 2012-12-4 10:41

回復 25# GBKEE


    感謝解釋~
請問如果要copy過去後,不按鈕就自動run 可以嗎?
作者: GBKEE    時間: 2012-12-4 11:20

回復 26# 198188
你要在何種狀態下不按鈕就自動run
1.檔案開啟時
A: 在ThisWorkbook這模組中有一預設的程序
  1. Private Sub Workbook_Open()
  2.    '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
B: 在VBA 的一般模組 寫上
  1. Sub AUTO_OPEN()  
  2. '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
2.檔案開啟後選定(移動)到這工作表,在這工作表模組中有一預設的程序
  1. Private Sub Worksheet_Activate()
  2.    '這裡的程式碼不按鈕就自動run
  3. End Sub
複製代碼
3.使用 OnTime 方法
  1. Sub AUTO_OPEN()  
  2. Application.OnTime Now + TimeValue("00:05:00"), "模組.程式名稱"
  3. End Sub
複製代碼

作者: 198188    時間: 2012-12-4 11:28

就是當該資料庫的資料有變動是run
作者: 198188    時間: 2012-12-5 17:25

回復 27# GBKEE


   在18的發言
請問顯示今日或之後的日期,應該如何填?
>=today()   ?
>=5/12/2012 ?
作者: GBKEE    時間: 2012-12-5 18:02

回復 29# 198188
18# 附檔 [Rule] 工作表  Ordered Date 欄位的進階篩選公式
=">="&DATEVALUE("2012/10/1")    指定日期
=">="&TODAY()                                    當日
作者: 198188    時間: 2012-12-5 18:09

回復 30# GBKEE


    可否設定當日的前幾天?
TODAY()-7 ?
作者: GBKEE    時間: 2012-12-5 18:11

回復 31# 198188
可自行試一下啊!!!
作者: 198188    時間: 2012-12-5 23:10

回復 32# GBKEE


    可以。
那麼如果是想用月份呢?有沒有一個是=當月份?
作者: GBKEE    時間: 2012-12-6 10:25

本帖最後由 GBKEE 於 2012-12-6 10:29 編輯

回復 33# 198188
請看圖解

[attach]13402[/attach]
作者: 198188    時間: 2012-12-12 14:01

回復 34# GBKEE


    請問如果要set 一個rule
不包含cancel這個字應該如何表達

以及

不包含cancel這個字或者不包含resell 這個字應該如何表達
作者: GBKEE    時間: 2012-12-13 07:53

回復 35# 198188


  [attach]13509[/attach]
作者: 198188    時間: 2012-12-13 08:51

回復 36# GBKEE

請問下面這句哪裡出錯了? 執行階段錯誤‘9’:陣列索引超出範圍
If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then

link:
    http://forum.twbts.com/viewthrea ... amp;page=3#pid48236
作者: GBKEE    時間: 2012-12-13 10:21

回復 37# 198188
" 執行階段錯誤‘9’:陣列索引超出範圍"-> 就是找不到!!! (這兩工作表名稱檢查看看)  
VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)
作者: 198188    時間: 2012-12-13 14:19

回復 38# GBKEE

[attach]13513[/attach]
    另外請問可否在excel 的EDIT FORMATING RULE設定
在A欄設定如果B欄是值大過0 和不等於A欄就變顏色
作者: 198188    時間: 2012-12-13 14:24

本帖最後由 GBKEE 於 2012-12-13 14:45 編輯

回復 38# GBKEE
  1. Option Explicit
  2. Sub ex()
  3.     Dim FRng As Range, Wb As Workbook
  4.     Dim A As Range, Rng As Range
  5.     Dim fs As String, xi As Integer
  6.     Dim i As Integer
  7.     Dim j As Integer
  8.     Dim k As Integer
  9.     i = Worksheets("outstanding payments").Range("A" & Worksheets("outstanding payments").Rows.Count).End(xlUp).Row
  10.     fs = "C:\Documents and Settings\USER\桌面\payment report 2012.xlsx"
  11.     Set Wb = Workbooks.Open(fs)
  12.     With Worksheets("New form of payment report")
  13.       j = Worksheets("New form of payment report").Range("E" & Worksheets("New form of payment report").Rows.Count).End(xlUp).Row
  14.     End With
  15.    Do
  16.     If Wb.Worksheets("New form of payment report").Range("k" & j).Value = Date And Wb.Worksheets("New form of payment report").Range("h" & j).Value >= 0.95 Then   
  17.     If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then   
  18.     Worksheets("outstanding payments").Range("A" & i + 1) = Wb.Worksheets("New form of payment report").Range("B" & j).Value
  19.     Worksheets("outstanding payments").Range("F" & i + 1) = Wb.Worksheets("New form of payment report").Range("H" & j).Value
  20.     End If
  21.      j = j - 1
  22.      i = i + 1
  23.     End If
  24.     Loop While j = 1   
  25.    Wb.Close 0
  26. End Sub
複製代碼
那麼是不是要在worksheets前面加上workbooks?但是上一句名稱沒有問題?
作者: GBKEE    時間: 2012-12-13 14:53

回復 40# 198188
那麼是不是要在worksheets前面加上workbooks?但是上一句名稱沒有問題?
工作表名稱無誤!!  程式碼: 程序所在的活頁簿之工作表, 不需加上  workbooks  其他活頁簿的工作表要加workbooks
儲存格要設底色,用錄製新巨集可得程式碼
作者: 198188    時間: 2012-12-14 14:11

回復 38# GBKEE

第38貼
  請問可否在excel 的EDIT FORMATING RULE設定
在A欄設定:如果B欄是值大過0 和不等於A欄就變顏
作者: 198188    時間: 2012-12-14 14:42

本帖最後由 GBKEE 於 2012-12-14 14:57 編輯

回復 41# GBKEE
  1. Option Explicit
  2. Sub ex()
  3.     Dim FRng As Range, Wb As Workbook
  4.     Dim A As Range, Rng As Range
  5.     Dim fs As String, xi As Integer
  6.     Dim i As Integer
  7.     Dim j As Integer
  8.     Dim k As Integer
  9.     i = Worksheets("outstanding payments").Range("A" & Worksheets("outstanding payments").Rows.Count).End(xlUp).Row
  10.     fs = "C:\Users\patrick.HKG\Desktop\payment report 2012.xlsx"
  11.     Set Wb = Workbooks.Open(fs)   
  12.     With Worksheets("New form of payment report")
  13.       j = Worksheets("New form of payment report").Range("E" & Worksheets("New form of payment report").Rows.Count).End(xlUp).Row   
  14.     End With   
  15.     Do   
  16.     ThisWorkbook.Activate   
  17.     If Wb.Worksheets("New form of payment report").Range("k" & j).Value = Date And Wb.Worksheets("New form of payment report").Range("h" & j).Value >= 0.95 Then   
  18.     If IsError(Application.VLookup(Wb.Worksheets("New form of payment report").Range("B" & j).Value, Worksheets("outstanding payments").Range("A:A"), 1, False)) Then   
  19.     Worksheets("outstanding payments").Range("A" & i + 1) = Wb.Worksheets("New form of payment report").Range("B" & j).Value
  20.     Worksheets("outstanding payments").Range("F" & i + 1) = Wb.Worksheets("New form of payment report").Range("K" & j).Value
  21.     End If
  22.     i = i + 1
  23.     End If
  24.     j = j - 1   
  25.    Loop While j = 2  
  26.    
  27.    Wb.Close 0
  28. End Sub
複製代碼
請問
Do
Loop While
是不是寫錯了?他不懂得循環做
作者: GBKEE    時間: 2012-12-14 14:54

回復 42# 198188
2003版 沒有EDIT FORMATING RULE 這功能
但有 指令[格式]->[設定格式化條件] :寫公式 ,指定顏色
或是VBA
  1. Option Explicit
  2. Sub Ex()  '欄設定如果B欄是值大過0 和不等於A欄就變顏色
  3.     '舉例 [A1]:[B1]
  4.     If [B1] >= 0 And [B1] <> [A1] Then
  5.         With Range("A1")
  6.             .Interior.Color = vbYellow  '底色    :黃
  7.             .Font.Color = vbRed         '字體色  :紅
  8.             .Font.Size = 15             '字體尺寸:15
  9.         End With
  10.     End If
  11. End Sub
複製代碼

作者: GBKEE    時間: 2012-12-14 15:10

本帖最後由 GBKEE 於 2012-12-14 15:16 編輯

回復 43# 198188
  1. Do
  2. '
  3. '
  4. MSGBOX J  '查看 J=??? 符合條件嗎!!
  5. Loop While J=2   
  6. '執行的條件 While (一直是) :  J=2
  7. '離開的條件 UNTIL (直到是):   J=2
複製代碼
你是要Loop While J>=2  ??
你是要Loop While J<>2  ??
你是要Loop While J<=2  ??
你是要Loop While J<2     ??
作者: tmde987    時間: 2012-12-16 12:31

If Target.Column = 1 Then   這個好像是 搜尋範圍  他要將 Target 改成  "TT"  ,只是 看了看,感覺不順.....
作者: 198188    時間: 2013-3-9 09:42

回復 3# GBKEE

高人,可否幫我看看個程式問題?
    http://forum.twbts.com/viewthrea ... amp;page=2#pid51122




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)