嗨,我們正在嘗試進入宏/電源查詢模型以支持更廣泛團隊生產的每周檔案之一已接近完成,但我遇到了回圈問題,該回圈將提供檔案名的日期部分。該檔案可以在一周中的任何一天或與它相關的后一周的前幾天生成,具體取決于源資料何時準備就緒,但必須以 yyyymmdd 格式的日期作為前綴,該日期是它包含資料的最后一個日期。
最簡單的方法是在宏運行開始時通過輸入框進行設定,然后在將組件報告保存到其檔案夾中時可以呼叫該輸入框。我的問題是用戶可以將任何內容放入輸入框中(我認為需要將其格式化為其他元素的字串,因為我不太了解 vba,無法知道如何將數字變數呼叫到我的另存為名稱中)。所以我想添加一個回圈,說明它是否為 8 個字符長和一個數字繼續否則重新輸入日期
Dim svdate As String
Sub inpt()
Do
svdate = InputBox("date")
If Len(svdate) = 8 And IsNumeric(svdate) Then
MsgBox svdate
Else
MsgBox ("the value should be a number in format yyyymmdd please try inputting the date again")
End If
Loop Until True
由于我的 vba 不是很好,我剛剛在單獨的子程式中測驗了上述代碼,因此 if true 部分中的 msgbox 將被替換為在正確輸入日期后將運行的其余子程式。我已將 svdate 變數定義為模塊級專案,它在更廣泛的宏中的許多其他階段都被呼叫,所有這些都可以正常作業,我只希望確保用戶只能在組合代碼之前輸入適當的日期。
由于目前的代碼,它會要求我將日期輸入到框中,然后顯示 2 個 msgbox 之一,但如果 false 不會回傳添加輸入框階段,因為我會猜到回圈直到 cline規定。對此的任何幫助將不勝感激。
uj5u.com熱心網友回復:
正確的回圈:
Dim svdate As String
Sub inpt()
dim isOK as boolean
Do
svdate = InputBox("date")
If Len(svdate) = 8 And IsNumeric(svdate) Then
isOK = true
MsgBox svdate
Else
isOK = false
MsgBox ("the value should be a number in format yyyymmdd please try inputting the date again")
End If
Loop Until isOK = true
End Sub
在您的代碼中,If-loop 位于Do-loop 內 - 因此Do-loop 不“知道”檢查結果。
我的代碼isOK是由If-loop 設定的,并且do-loop 可以對其進行評估。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329188.html
