返回列表 上一主題 發帖

[發問] vba for next用法及效率改善問題

本帖最後由 luhpro 於 2016-5-10 22:32 編輯

回復 1# 被論文逼瘋的人
Q1:

Worksheets("1") => Sheets(x + 1 & "")


Q2:
試試這樣是否可以: (未考慮效率改善, 僅針對當機情形處理)
  1. Sub morecriteriafilter()
  2.    
  3.     Dim i As Integer, j As Integer, k As Integer
  4.    
  5.     With Worksheets("be1")
  6.     x = 0
  7.         Application.ScreenUpdating = False
  8.         For i = 0 To 5
  9.             For j = 0 To 5
  10.                     .Range("A1").AutoFilter Field:=2, Criteria1:="<" & 3 + i, Operator:=xlAnd, Criteria2:=">" & 0 + i
  11.                     DoEvents
  12.                     .Range("A1").AutoFilter Field:=3, Criteria1:="=" & 1 + x
  13.                     DoEvents
  14.                     .Range("A1").AutoFilter Field:=5, Criteria1:=Cells(j + 2, 10)
  15.                     DoEvents
  16.                     .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Worksheets("1").Range("B2").Offset(7 * i, 7 * j)
  17.                     DoEvents
  18.             Next j
  19.         Next i
  20.     .Range("A1").AutoFilter
  21.     DoEvents
  22.     Application.ScreenUpdating = True
  23.     End With
  24. End Sub
複製代碼

TOP

本帖最後由 luhpro 於 2016-5-13 22:19 編輯
回復  luhpro
...
'解釋-----.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy後面放的sheets(x),
'發現()內不能寫成x+1算式,會跑出同sheets(1)的值(此時x默認為0,就算我先設x=2也一樣);
'使用sheets(x)時,如果有事先設置x=2,就會跑出sheets(2)的值,所以我就用這個。 ...
被論文逼瘋的人 發表於 2016-5-13 12:04


以下敘述中皆假設 x = 2
Sheets(x + 1)=Sheets(3) <> Sheets("3")
前面 Sheets(3) 的 3 是 Index 編號 (等同在 VBAProject 專案總管 列表中 Sheet1(S1) 前面那個 Sheet1<CodeName> 的 1 )
後面 Sheets("3") 的 3 是 Sheet 的 名稱(等同在 VBAProject 專案總管 列表中 Sheet1(S1) 後面括號中間的 S1<SheetName> )
除非你從建立檔案開始後就一直照順序產生 Sheets("1"),Sheets("2")...
且沒做任何工作表的增刪,移動或更名,
否則 Sheets(100) 很難 索引到 Sheets("100").

你的情形中若 Sheets(x + 1 & "") 不能正確索引到 Sheets("3") 的話,
改成 Sheets((x + 1) & "") 試試. (後面加上 & "" 是強制將 X+1 的結果改成字串, 等同 "3")

以上是我的理解,若有錯誤歡迎指正.

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題