Board logo

標題: vba 語法請教 [打印本頁]

作者: 01300607    時間: 2013-7-14 11:54     標題: vba 語法請教

想請問為什麼這個程式碼能找出工作表裡的資料有幾列?
實在有點看不懂他的運作方式,謝謝
  1. Function findx(ByVal objsheet As Worksheet)
  2.      x = 0
  3.      Do While True
  4.         kk = ""
  5.         For l = 1 To 10
  6.             For k = 1 To 30
  7.                 If IsError(objsheet.Cells(x + l, k)) = False Then
  8.                     kk = kk & objsheet.Cells(x + l, k)
  9.                 End If
  10.             Next
  11.         Next
  12.         If kk = "" Then Exit Do
  13.         x = x + 1
  14.     Loop
  15.     findx = x
  16. End Function
複製代碼

作者: GBKEE    時間: 2013-7-14 16:52

回復 1# 01300607
  1. '傳回最後有資料儲存格列號: 資料在 1欗-30欗,第1列開始到10列 超過第10列後續有資料的儲存格,所間隔的列數不可大於10列.
  2. Function findx(ByVal objsheet As Worksheet) As Long   '函數型態 : Long (長整數)
  3.               'ByVal 選擇性引數。表示以傳值的方式來傳遞引數。
  4.               'objsheet(參數) As(型態)  Worksheet(工作表物件)
  5.     Dim x As Integer, L As Integer, k As Integer, kk As String
  6.     x = 0
  7.     Do   'While True : 這條件是預設,可不寫
  8.         kk = ""             '資串歸零
  9.         For L = 1 To 10     'L: 列號 (1-10)
  10.             For k = 1 To 30 'k: 欗號 (1-30)
  11.                 'objsheet.Cells(x + L, k) -> objsheet.Cells( X+列號L , 欗號 )
  12.                 If IsError(objsheet.Cells(x + L, k)) = False Then       '不為錯誤值:條件成立
  13.                   'IsError 函數  傳回 Boolean 值,用來指出運算式是否為一個錯誤值。
  14.                     kk = kk & objsheet.Cells(x + L, k)      '累加[不為錯誤值存格]的內容
  15.                 End If
  16.             Next
  17.         Next
  18.         '跑完 objsheet.Cells(x + 1, 1) 到 objsheet.Cells(x + 10, 30) 的範圍
  19.         If kk = "" Then Exit Do                               '跑完的範圍內沒有資料:離開迴圈
  20.         x = x + 1                                             '紀錄有資料的次數 => 最後有資料的列號列號
  21.     Loop
  22.     findx = x
  23. End Function
複製代碼

作者: 01300607    時間: 2013-7-15 01:47

太詳細的講解了,謝謝板主
謝謝




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