返回列表 上一主題 發帖

[發問] ByVal a As Range~此類語法的用法,不太清楚

[發問] ByVal a As Range~此類語法的用法,不太清楚

本帖最後由 sayloveme 於 2011-12-30 14:21 編輯

Public Function FmdFatotal(ByVal a As Range, ByVal b As Range, ByVal c As Integer, ByVal pollutant As String) As Double
   Dim IRptData As Integer
   
   IRptData = 6
   FmdSTotal = 0
   
    Do Until Left(Trim(Sheets("資料").Cells(IRptData, 4).Value), 1) = "本"
        If Sheets("資料").Cells(IRptData, 21) > c Then
            If Trim(Sheets("資料").Cells(IRptData, 9).Value) = pollutant Then
                FmdFatotal = FmdFatotal + Sheets("資料").Cells(IRptData, 20)
            End If
        End If
        IRptData = IRptData + 1
    Loop
End Function

--------------------------我是分隔線----------------------
關於這段語法,想請教版上的高手,是否能夠幫我解釋一下,找尋了各大網站,IRptData 跟Do Until Left(Trim(Sheets("資料").Cells(IRptData, 4).Value), 1),這段語法,完全看不懂~還請神人大大賜教,感激不進~!!謝謝

IRptData -->自訂的整數變數
程式第二行己說明了 (Dim IRptData As Integer)
Do ..... Loop --> 重覆執行 .....  陳述式(迴圈)
以上應是vba基本功,在excel 的vba編緝器中的說明檔中都有範例說明
善用vba編緝器中的說明檔,可讓您的vba功力大增

TOP

回復 2# kobo


  大大您好,那像是Dim IRptData As Integer,已經定義為整數了,為何底下IRptData = 6、FmdSTotal = 0 還要進行這樣的設定,那個6是否有點多餘呢?,
還是說它有甚麼特定含義呢!? 謝謝,另外 Until Left (Trim(Sheets("審查資料").Cells(IRptData, 4).Value), 1),這串語法當中,
比較不懂的是Until Left (Trim(資料).Cells(自定義,4).Value),1),這樣的做法,會有甚麼樣的效果呢!?已用粗體標示,非常謝謝您的回答。

TOP

回復 2# kobo

感謝大大,依照大大給的方向仔細瀏覽過一遍,心裡大概有個方向,有個部份想再請教一下,
IRptData = 6
   FmdSTotal = 0
   
    Do Until Left(Trim(Sheets("審查資料").Cells(IRptData, 4).Value), 1) ="本"

其中Cells(IRptData, 4)這個是否能夠看成Cells(6, 4),另外最後="本"這個有甚麼作用嘛!? 謝謝大大

TOP

本帖最後由 hugh0620 於 2011-12-30 15:15 編輯

回復 4# sayloveme


    因為它是寫 迴圈 DO... LOOP
    當判定資料="本"時~ 就離開回圈  
    (迴圈需要有一個停止的條件~ Do until 條件式 =>符合這個條件就離開迴圈~
     像你放上去的程式碼很可能會產生循環迴圈中~  因為有可能資料會有"本"這個資料)
    進行下一段程式碼或離開程式
學習才能提升自己

TOP

本帖最後由 kobo 於 2011-12-30 15:10 編輯

Dim IRptData As Integer '   宣告IRptData 為整數
   IRptData = 6                '  IRptData 初始值為 6
   ..........
   ↓↓↓↓ 重覆執行迴圈,直到 Left(Trim.....), 1) = "本" 成立為止↓↓↓↓(條件成立跳出迴圈)
    Do Until Left(Trim(Sheets("資料").Cells(IRptData, 4).Value), 1) = "本"  (IRptData第一次是6)
      .............
        IRptData = IRptData + 1   '每執行一次 IRptData 就加 1   
    Loop

TOP

Do   While  條件  (條件成立 執行迴圈)  /  Until  條件  (條件成立 不執行迴圈)  ***可置於 Do
     if  條件=True Then   Exit Do                          '*** 也可中間設立條件 離開迴圈
Loop    While  條件  (條件成立 執行迴圈)  /  Until  條件  (條件成立 不執行迴圈)  ***也可置於 Loop

TOP

本帖最後由 sayloveme 於 2011-12-30 17:24 編輯

回復 5#、6#、7#


感謝大大們的回覆,小弟另外有個困擾,建立好的巨集,無法正確建立檔案名,例如我99年~正常出來會是099X,但如果我輸入100年,他跑出來的檔案名卻是010,
請問有甚麼方法可以解決嘛!? 目前代碼情況如下:

YS = YS_Y & " 年 " & YS_S
  WestYS1 = CLng(1910 + CLng(YS_Y))
  WestYS2 = CLng(1912 + CLng(YS_Y))
  
  Filename = UCase(FacNo.Text) & "_" & GetSsn(YS)
   If CLng(YS_Y) > 95 Then '加入96年新表單
    lsExcelModel = lsExcelFilePath & "96年試算表.xls"
   Else
    lsExcelModel = lsExcelFilePath & "試算表.xls"
   End If
  Workbooks.Open Filename:=lsExcelModel
  Sheets.Add After:=Worksheets(Worksheets.Count)
  Sheets(ActiveCell.Worksheet.Name).Select
  Sheets(ActiveCell.Worksheet.Name).Name = "匯入"
      Columns("A:AZ").Select
      Selection.NumberFormatLocal = "@"
  ActiveWorkbook.SaveAs Filename:=lsExcelFilePath & "建檔資料\" & Filename & ".xls" '存檔路徑
'----------------------------------------------------取出資料
  EmptyRowIndex = GetEmptyRowIndex("匯入")
  Cells(EmptyRowIndex, 3).Value = "#" & "P_Factory" & "#"
  SQLStr = "SELECT P_Factory.* FROM P_Factory WHERE (((P_Factory.管制編號)='" & FacNo & "'))"
  Call GetDataFromDB(lsDBFilePathName, SQLStr, EmptyRowIndex + 1, "Yes")
-----------------我是分隔線---------------------------

請問大大以上有缺甚麼資料嗎!? 還是有甚麼需要修改的嘛!? 先謝謝各位大大的不吝告知,萬分感謝。

TOP

回復 8# sayloveme

請問版上的高手,8樓的問題該如何解決呢~拜託各位大大了

TOP

回復 9# sayloveme
只是片段的程式碼!!, 誰能解答?

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題